From 2b8e98157e1b66b1a2cf799bcdebd4b632e439cc Mon Sep 17 00:00:00 2001 From: Sonia Sanz Vivas Date: Fri, 8 Nov 2024 11:53:53 +0100 Subject: [PATCH 001/141] Show status in snapshot list --- .../__jest__/client_integration/home.test.ts | 11 ++--- .../public/application/constants/index.ts | 1 - .../components/snapshot_table.tsx | 13 ++++++ .../snapshot_details/tabs/snapshot_state.tsx | 42 +++++++++---------- .../snapshot_details/tabs/tab_summary.tsx | 2 +- 5 files changed, 41 insertions(+), 28 deletions(-) diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts index 222cc4e89c26e..4a9c93b548ca5 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts @@ -512,6 +512,7 @@ describe('', () => { expect(row).toEqual([ '', // Checkbox snapshot.snapshot, // Snapshot + 'Complete', // The displayed message when stats is success REPOSITORY_NAME, // Repository snapshot.indices.length.toString(), // Indices snapshot.shards.total.toString(), // Shards @@ -738,7 +739,7 @@ describe('', () => { expect(find('snapshotDetail.version.value').text()).toBe(version); expect(find('snapshotDetail.uuid.value').text()).toBe(uuid); - expect(find('snapshotDetail.state.value').text()).toBe('Snapshot complete'); + expect(find('snapshotDetail.state.value').text()).toBe('Complete'); expect(find('snapshotDetail.includeGlobalState.value').text()).toEqual('Yes'); expect( find('snapshotDetail.snapshotFeatureStatesSummary.featureStatesList').text() @@ -788,10 +789,10 @@ describe('', () => { }; const mapStateToMessage = { - [SNAPSHOT_STATE.IN_PROGRESS]: 'Taking snapshot…', - [SNAPSHOT_STATE.FAILED]: 'Snapshot failed', - [SNAPSHOT_STATE.PARTIAL]: 'Partial failure ', - [SNAPSHOT_STATE.INCOMPATIBLE]: 'Incompatible version ', + [SNAPSHOT_STATE.IN_PROGRESS]: 'In Progress', + [SNAPSHOT_STATE.FAILED]: 'Failed', + [SNAPSHOT_STATE.PARTIAL]: 'Partial', + [SNAPSHOT_STATE.SUCCESS]: 'Complete', }; // Call sequentially each state and verify that the message is ok diff --git a/x-pack/plugins/snapshot_restore/public/application/constants/index.ts b/x-pack/plugins/snapshot_restore/public/application/constants/index.ts index f319f1c995d0d..830af3c77f769 100644 --- a/x-pack/plugins/snapshot_restore/public/application/constants/index.ts +++ b/x-pack/plugins/snapshot_restore/public/application/constants/index.ts @@ -17,7 +17,6 @@ export enum SNAPSHOT_STATE { SUCCESS = 'SUCCESS', FAILED = 'FAILED', PARTIAL = 'PARTIAL', - INCOMPATIBLE = 'INCOMPATIBLE', } const INDEX_SETTING_SUGGESTIONS: string[] = [ diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx index 69f9d1b2f9ffb..2e55ec544b88e 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx @@ -29,6 +29,7 @@ import { import { SnapshotListParams, SortDirection, SortField } from '../../../../lib'; import { DataPlaceholder, FormattedDateTime, SnapshotDeleteProvider } from '../../../../components'; import { SnapshotSearchBar } from './snapshot_search_bar'; +import { SnapshotState } from '../snapshot_details/tabs/snapshot_state'; const getLastSuccessfulManagedSnapshot = ( snapshots: SnapshotDetails[] @@ -93,6 +94,18 @@ export const SnapshotTable: React.FunctionComponent = (props: Props) => { ), }, + { + field: 'state', + name: i18n.translate('xpack.snapshotRestore.snapshotList.table.stateColumnTitle', { + defaultMessage: 'State', + }), + truncateText: false, + sortable: false, + description: i18n.translate('xpack.snapshotRestore.snapshotList.table.statePartialTooltip', { + defaultMessage: 'This is partial.', + }), + render: (state: string) => , + }, { field: 'repository', name: i18n.translate('xpack.snapshotRestore.snapshotList.table.repositoryColumnTitle', { diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx index e4629f1160f38..c5eec5818e380 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx @@ -7,55 +7,47 @@ import React, { Fragment } from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiIconTip, EuiLoadingSpinner } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiIconTip, EuiToolTip } from '@elastic/eui'; import { SNAPSHOT_STATE } from '../../../../../constants'; import { useServices } from '../../../../../app_context'; interface Props { state: any; + tooltipIcon: boolean; } -export const SnapshotState: React.FC = ({ state }) => { +export const SnapshotState: React.FC = ({ state, tooltipIcon }) => { const { i18n } = useServices(); const stateMap: any = { [SNAPSHOT_STATE.IN_PROGRESS]: { - icon: , + icon: , label: i18n.translate('xpack.snapshotRestore.snapshotState.inProgressLabel', { - defaultMessage: 'Taking snapshot…', + defaultMessage: 'In Progress', }), }, [SNAPSHOT_STATE.SUCCESS]: { - icon: , + icon: , label: i18n.translate('xpack.snapshotRestore.snapshotState.completeLabel', { - defaultMessage: 'Snapshot complete', + defaultMessage: 'Complete', }), }, [SNAPSHOT_STATE.FAILED]: { - icon: , + icon: , label: i18n.translate('xpack.snapshotRestore.snapshotState.failedLabel', { - defaultMessage: 'Snapshot failed', + defaultMessage: 'Failed', }), }, [SNAPSHOT_STATE.PARTIAL]: { - icon: , + icon: , label: i18n.translate('xpack.snapshotRestore.snapshotState.partialLabel', { - defaultMessage: 'Partial failure', + defaultMessage: 'Partial', }), tip: i18n.translate('xpack.snapshotRestore.snapshotState.partialTipDescription', { defaultMessage: `Global cluster state was stored, but at least one shard wasn't stored successfully. See the 'Failed indices' tab.`, }), }, - [SNAPSHOT_STATE.INCOMPATIBLE]: { - icon: , - label: i18n.translate('xpack.snapshotRestore.snapshotState.incompatibleLabel', { - defaultMessage: 'Incompatible version', - }), - tip: i18n.translate('xpack.snapshotRestore.snapshotState.incompatibleTipDescription', { - defaultMessage: `Snapshot was created with a version of Elasticsearch incompatible with the cluster's version.`, - }), - }, }; if (!stateMap[state]) { @@ -65,14 +57,14 @@ export const SnapshotState: React.FC = ({ state }) => { const { icon, label, tip } = stateMap[state]; - const iconTip = tip && ( + const iconTip = tip && tooltipIcon && ( {' '} ); - return ( + const snapshotInfo = ( {icon} @@ -85,4 +77,12 @@ export const SnapshotState: React.FC = ({ state }) => { ); + + return tip && tooltipIcon ? ( + snapshotInfo + ) : ( + + {snapshotInfo} + + ); }; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/tab_summary.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/tab_summary.tsx index 00ea3fa27109b..fb17120a2ed15 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/tab_summary.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/tab_summary.tsx @@ -94,7 +94,7 @@ export const TabSummary: React.FC = ({ snapshotDetails }) => { - + From 8f60b4268c7dab5510d9b8726d4ce542def65d1b Mon Sep 17 00:00:00 2001 From: Sonia Sanz Vivas Date: Fri, 8 Nov 2024 14:41:39 +0100 Subject: [PATCH 002/141] Add SLM status to policy list --- .../public/application/constants/index.ts | 6 ++ .../sections/home/policy_list/policy_list.tsx | 11 ++- .../home/policy_list/slm_status/index.ts | 8 ++ .../policy_list/slm_status/slm_status.tsx | 77 +++++++++++++++++++ .../services/http/policy_requests.ts | 7 ++ .../server/routes/api/policy.ts | 16 ++++ 6 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/slm_status/index.ts create mode 100644 x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/slm_status/slm_status.tsx diff --git a/x-pack/plugins/snapshot_restore/public/application/constants/index.ts b/x-pack/plugins/snapshot_restore/public/application/constants/index.ts index 830af3c77f769..7ca0e3181aea0 100644 --- a/x-pack/plugins/snapshot_restore/public/application/constants/index.ts +++ b/x-pack/plugins/snapshot_restore/public/application/constants/index.ts @@ -19,6 +19,12 @@ export enum SNAPSHOT_STATE { PARTIAL = 'PARTIAL', } +export enum SLM_STATE { + RUNNING = 'RUNNING', + STOPPING = 'STOPPING', + STOPPED = 'STOPPED', +} + const INDEX_SETTING_SUGGESTIONS: string[] = [ 'index.number_of_shards', 'index.shard.check_on_startup', diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx index aa7a35bb2c0b2..d4be83fe633c0 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx @@ -25,13 +25,18 @@ import { SlmPolicy } from '../../../../../common/types'; import { APP_SLM_CLUSTER_PRIVILEGES } from '../../../../../common'; import { BASE_PATH, UIM_POLICY_LIST_LOAD } from '../../../constants'; import { useDecodedParams } from '../../../lib'; -import { useLoadPolicies, useLoadRetentionSettings } from '../../../services/http'; +import { + useLoadPolicies, + useLoadRetentionSettings, + useLoadSlmStatus, +} from '../../../services/http'; import { linkToAddPolicy, linkToPolicy } from '../../../services/navigation'; import { useAppContext, useServices } from '../../../app_context'; import { PolicyDetails } from './policy_details'; import { PolicyTable } from './policy_table'; import { PolicyRetentionSchedule } from './policy_retention_schedule'; +import { SlmStatus } from './slm_status'; interface MatchParams { policyName?: SlmPolicy['name']; @@ -61,6 +66,8 @@ export const PolicyList: React.FunctionComponent { return linkToPolicy(newPolicyName); }; @@ -190,6 +197,8 @@ export const PolicyList: React.FunctionComponent ) : null} + + = ({ status }) => { + const { i18n } = useServices(); + + const statusMap: any = { + [SLM_STATE.RUNNING]: { + icon: , + label: i18n.translate('xpack.snapshotRestore.slmstatus.runninglable', { + defaultMessage: 'Running', + }), + }, + [SLM_STATE.STOPPING]: { + icon: , + label: i18n.translate('xpack.snapshotRestore.slmstatus.stoppinglable', { + defaultMessage: 'Stopping', + }), + }, + [SLM_STATE.STOPPED]: { + icon: , + label: i18n.translate('xpack.snapshotRestore.slmstatus.stoppedlable', { + defaultMessage: 'Stopped', + }), + }, + }; + + if (!statusMap[status]) { + // Returns empty if no status + return <>; + } + + const { icon, label } = statusMap[status]; + + return ( + <> + + + + + + + {icon} + {label} + + ), + }} + /> + + + + + + + + ); +}; diff --git a/x-pack/plugins/snapshot_restore/public/application/services/http/policy_requests.ts b/x-pack/plugins/snapshot_restore/public/application/services/http/policy_requests.ts index f4e8abc34e993..945ceff724aef 100644 --- a/x-pack/plugins/snapshot_restore/public/application/services/http/policy_requests.ts +++ b/x-pack/plugins/snapshot_restore/public/application/services/http/policy_requests.ts @@ -131,3 +131,10 @@ export const executeRetention = async () => { uiMetricService.trackUiMetric(UIM_RETENTION_EXECUTE); return result; }; + +export const useLoadSlmStatus = () => { + return useRequest({ + path: `${API_BASE_PATH}policies/slm_status`, + method: 'get', + }); +}; diff --git a/x-pack/plugins/snapshot_restore/server/routes/api/policy.ts b/x-pack/plugins/snapshot_restore/server/routes/api/policy.ts index 51bdf96361a24..9f948d0d2524a 100644 --- a/x-pack/plugins/snapshot_restore/server/routes/api/policy.ts +++ b/x-pack/plugins/snapshot_restore/server/routes/api/policy.ts @@ -304,4 +304,20 @@ export function registerPolicyRoutes({ return res.ok({ body: response }); }) ); + + // Get snapshot lifecycle management status + router.get( + { path: addBasePath('policies/slm_status'), validate: false }, + license.guardApiRoute(async (ctx, req, res) => { + const { client: clusterClient } = (await ctx.core).elasticsearch; + + try { + const response = await clusterClient.asCurrentUser.slm.getStatus(); + + return res.ok({ body: response }); + } catch (e) { + return handleEsError({ error: e, response: res }); + } + }) + ); } From 1a75a91aa1f1e1c01716c31fef8a8e43410873ff Mon Sep 17 00:00:00 2001 From: Sonia Sanz Vivas Date: Mon, 25 Nov 2024 13:11:18 +0100 Subject: [PATCH 003/141] Remove unnecersary description --- .../sections/home/snapshot_list/components/snapshot_table.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx index 2e55ec544b88e..72d31fe920ba9 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx @@ -101,9 +101,6 @@ export const SnapshotTable: React.FunctionComponent = (props: Props) => { }), truncateText: false, sortable: false, - description: i18n.translate('xpack.snapshotRestore.snapshotList.table.statePartialTooltip', { - defaultMessage: 'This is partial.', - }), render: (state: string) => , }, { From 37af13254df3f4dd793b023d097bb353429715f6 Mon Sep 17 00:00:00 2001 From: Sonia Sanz Vivas Date: Wed, 27 Nov 2024 15:58:01 +0100 Subject: [PATCH 004/141] Add SLM status not running banner --- packages/kbn-doc-links/src/get_doc_links.ts | 1 + .../sections/home/policy_list/policy_list.tsx | 35 +++++++-- .../home/policy_list/slm_status/index.ts | 8 -- .../policy_list/slm_status/slm_status.tsx | 77 ------------------- .../server/routes/api/policy.test.ts | 23 ++++++ .../snapshot_restore/lib/elasticsearch.ts | 5 ++ .../management/snapshot_restore/policies.ts | 26 ++++++- 7 files changed, 82 insertions(+), 93 deletions(-) delete mode 100644 x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/slm_status/index.ts delete mode 100644 x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/slm_status/slm_status.tsx diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/packages/kbn-doc-links/src/get_doc_links.ts index 7fd12a815484a..47b601791d983 100644 --- a/packages/kbn-doc-links/src/get_doc_links.ts +++ b/packages/kbn-doc-links/src/get_doc_links.ts @@ -792,6 +792,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D restoreSnapshot: `${ELASTICSEARCH_DOCS}snapshots-restore-snapshot.html`, restoreSnapshotApi: `${ELASTICSEARCH_DOCS}restore-snapshot-api.html#restore-snapshot-api-request-body`, searchableSnapshotSharedCache: `${ELASTICSEARCH_DOCS}searchable-snapshots.html#searchable-snapshots-shared-cache`, + slmStart: `${ELASTICSEARCH_DOCS}slm-api-start.html`, }, ingest: { append: `${ELASTICSEARCH_DOCS}append-processor.html`, diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx index d4be83fe633c0..1488394b27a0c 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx @@ -8,7 +8,7 @@ import React, { Fragment, useEffect } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { RouteComponentProps } from 'react-router-dom'; -import { EuiButton, EuiCallOut, EuiSpacer, EuiPageTemplate } from '@elastic/eui'; +import { EuiButton, EuiCallOut, EuiSpacer, EuiPageTemplate, EuiLink } from '@elastic/eui'; import { reactRouterNavigate } from '@kbn/kibana-react-plugin/public'; @@ -23,7 +23,7 @@ import { import { SlmPolicy } from '../../../../../common/types'; import { APP_SLM_CLUSTER_PRIVILEGES } from '../../../../../common'; -import { BASE_PATH, UIM_POLICY_LIST_LOAD } from '../../../constants'; +import { BASE_PATH, SLM_STATE, UIM_POLICY_LIST_LOAD } from '../../../constants'; import { useDecodedParams } from '../../../lib'; import { useLoadPolicies, @@ -31,12 +31,11 @@ import { useLoadSlmStatus, } from '../../../services/http'; import { linkToAddPolicy, linkToPolicy } from '../../../services/navigation'; -import { useAppContext, useServices } from '../../../app_context'; +import { useAppContext, useCore, useServices } from '../../../app_context'; import { PolicyDetails } from './policy_details'; import { PolicyTable } from './policy_table'; import { PolicyRetentionSchedule } from './policy_retention_schedule'; -import { SlmStatus } from './slm_status'; interface MatchParams { policyName?: SlmPolicy['name']; @@ -57,6 +56,7 @@ export const PolicyList: React.FunctionComponent policy.schedule); const hasDuplicateSchedules = policySchedules.length > new Set(policySchedules).size; const hasRetention = Boolean(policies.find((policy: SlmPolicy) => policy.retention)); + const isSlmRunning = slmStatus?.operation_mode === SLM_STATE.RUNNING; content = (
+ {!isSlmRunning ? ( + + +

+ Policies are not executed. You must restart SLM{' '} + + by using the API. + +

+
+ +
+ ) : null} + {hasDuplicateSchedules ? ( @@ -197,8 +220,6 @@ export const PolicyList: React.FunctionComponent ) : null} - - = ({ status }) => { - const { i18n } = useServices(); - - const statusMap: any = { - [SLM_STATE.RUNNING]: { - icon: , - label: i18n.translate('xpack.snapshotRestore.slmstatus.runninglable', { - defaultMessage: 'Running', - }), - }, - [SLM_STATE.STOPPING]: { - icon: , - label: i18n.translate('xpack.snapshotRestore.slmstatus.stoppinglable', { - defaultMessage: 'Stopping', - }), - }, - [SLM_STATE.STOPPED]: { - icon: , - label: i18n.translate('xpack.snapshotRestore.slmstatus.stoppedlable', { - defaultMessage: 'Stopped', - }), - }, - }; - - if (!statusMap[status]) { - // Returns empty if no status - return <>; - } - - const { icon, label } = statusMap[status]; - - return ( - <> - - - - - - - {icon} - {label} - - ), - }} - /> - - - - - - - - ); -}; diff --git a/x-pack/plugins/snapshot_restore/server/routes/api/policy.test.ts b/x-pack/plugins/snapshot_restore/server/routes/api/policy.test.ts index 3d4f0f5505b30..873d270a206ca 100644 --- a/x-pack/plugins/snapshot_restore/server/routes/api/policy.test.ts +++ b/x-pack/plugins/snapshot_restore/server/routes/api/policy.test.ts @@ -9,6 +9,7 @@ import { addBasePath } from '../helpers'; import { registerPolicyRoutes } from './policy'; import { RouterMock, routeDependencies, RequestMock } from '../../test/helpers'; import { ResolveIndexResponseFromES } from '../../types'; +import { SlmGetStatusResponse } from '@elastic/elasticsearch/lib/api/types'; describe('[Snapshot and Restore API Routes] Policy', () => { const mockEsPolicy = { @@ -56,6 +57,7 @@ describe('[Snapshot and Restore API Routes] Policy', () => { const executeLifecycleFn = router.getMockApiFn('slm.executeLifecycle'); const deleteLifecycleFn = router.getMockApiFn('slm.deleteLifecycle'); const resolveIndicesFn = router.getMockApiFn('indices.resolveIndex'); + const getStatusFn = router.getMockApiFn('slm.getStatus'); beforeAll(() => { registerPolicyRoutes({ @@ -437,4 +439,25 @@ describe('[Snapshot and Restore API Routes] Policy', () => { await expect(router.runRequest(mockRequest)).rejects.toThrowError(); }); }); + + describe('getSlmStatusHandler', () => { + const mockRequest: RequestMock = { + method: 'get', + path: addBasePath('policies/slm_status'), + }; + + it('should return successful ES response', async () => { + const mockEsResponse: SlmGetStatusResponse = { operation_mode: 'RUNNING' }; + getStatusFn.mockResolvedValue(mockEsResponse); + + const expectedResponse = { ...mockEsResponse }; + await expect(router.runRequest(mockRequest)).resolves.toEqual({ body: expectedResponse }); + }); + + it('should throw if ES error', async () => { + getStatusFn.mockRejectedValue(new Error()); + + await expect(router.runRequest(mockRequest)).rejects.toThrowError(); + }); + }); }); diff --git a/x-pack/test/api_integration/apis/management/snapshot_restore/lib/elasticsearch.ts b/x-pack/test/api_integration/apis/management/snapshot_restore/lib/elasticsearch.ts index b5b0bc053f3de..f1fa340f9ae2e 100644 --- a/x-pack/test/api_integration/apis/management/snapshot_restore/lib/elasticsearch.ts +++ b/x-pack/test/api_integration/apis/management/snapshot_restore/lib/elasticsearch.ts @@ -101,6 +101,10 @@ export const registerEsHelpers = (getService: FtrProviderContext['getService']) }); }; + const startSlm = () => { + return es.slm.start(); + }; + return { createRepository, createPolicy, @@ -110,5 +114,6 @@ export const registerEsHelpers = (getService: FtrProviderContext['getService']) executePolicy, createSnapshot, deleteSnapshots, + startSlm, }; }; diff --git a/x-pack/test/api_integration/apis/management/snapshot_restore/policies.ts b/x-pack/test/api_integration/apis/management/snapshot_restore/policies.ts index e0734680887d2..2e771616f9d1b 100644 --- a/x-pack/test/api_integration/apis/management/snapshot_restore/policies.ts +++ b/x-pack/test/api_integration/apis/management/snapshot_restore/policies.ts @@ -16,7 +16,7 @@ const REPO_NAME = 'test_repo'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); - const { createRepository, createPolicy, deletePolicy, cleanupPolicies, getPolicy } = + const { createRepository, createPolicy, deletePolicy, cleanupPolicies, getPolicy, startSlm } = registerEsHelpers(getService); describe('SLM policies', function () { @@ -229,5 +229,29 @@ export default function ({ getService }: FtrProviderContext) { }); }); }); + + describe('Show info', () => { + before(async () => { + // Make sure SLM is running + try { + await startSlm(); + } catch (err) { + // eslint-disable-next-line no-console + console.log('[Setup error] Error starting Slm'); + throw err; + } + }); + + it('should get slm status', async () => { + const { body } = await supertest + .get(`${API_BASE_PATH}/policies/slm_status`) + .set('kbn-xsrf', 'xxx') + .expect(200); + + expect(body).to.eql({ + operation_mode: 'RUNNING', + }); + }); + }); }); } From cdb905bbb0983142ea9a75dbad550ebd4db4b760 Mon Sep 17 00:00:00 2001 From: Sonia Sanz Vivas Date: Wed, 27 Nov 2024 16:49:20 +0100 Subject: [PATCH 005/141] Update unused messages --- x-pack/plugins/translations/translations/fr-FR.json | 2 -- x-pack/plugins/translations/translations/ja-JP.json | 2 -- x-pack/plugins/translations/translations/zh-CN.json | 2 -- 3 files changed, 6 deletions(-) diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 9eb1d589d3cce..87a26687ca8ce 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -44454,8 +44454,6 @@ "xpack.snapshotRestore.snapshots.breadcrumbTitle": "Snapshots", "xpack.snapshotRestore.snapshotState.completeLabel": "Snapshot terminé", "xpack.snapshotRestore.snapshotState.failedLabel": "Snapshot échoué", - "xpack.snapshotRestore.snapshotState.incompatibleLabel": "Version incompatible", - "xpack.snapshotRestore.snapshotState.incompatibleTipDescription": "Le snapshot a été créé avec une version d'Elasticsearch incompatible avec la version du cluster.", "xpack.snapshotRestore.snapshotState.inProgressLabel": "Prise de snapshot…", "xpack.snapshotRestore.snapshotState.partialLabel": "Échec partiel", "xpack.snapshotRestore.snapshotState.partialTipDescription": "L'état du cluster global a été stocké, mais au moins une partition n'a pas été stockée correctement. Consultez l'onglet \"Index échoués\".", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index dc9158040da92..ece294b3b9e3e 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -44304,8 +44304,6 @@ "xpack.snapshotRestore.snapshots.breadcrumbTitle": "スナップショット", "xpack.snapshotRestore.snapshotState.completeLabel": "スナップショット完了", "xpack.snapshotRestore.snapshotState.failedLabel": "スナップショット失敗", - "xpack.snapshotRestore.snapshotState.incompatibleLabel": "互換性のないバージョン", - "xpack.snapshotRestore.snapshotState.incompatibleTipDescription": "このスナップショットはクラスターのバージョンと互換性のないバージョンの Elasticsearch で作成されました。", "xpack.snapshotRestore.snapshotState.inProgressLabel": "スナップショットを撮影中…", "xpack.snapshotRestore.snapshotState.partialLabel": "一部失敗", "xpack.snapshotRestore.snapshotState.partialTipDescription": "グローバルクラスターステータスが保存されましたが、1 つまたは複数のシャードの保存に失敗しました。「失敗したインシデント」タブをご覧ください。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 8341cc8aebead..77c7998778edf 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -43658,8 +43658,6 @@ "xpack.snapshotRestore.snapshots.breadcrumbTitle": "快照", "xpack.snapshotRestore.snapshotState.completeLabel": "快照完成", "xpack.snapshotRestore.snapshotState.failedLabel": "快照失败", - "xpack.snapshotRestore.snapshotState.incompatibleLabel": "不兼容版本", - "xpack.snapshotRestore.snapshotState.incompatibleTipDescription": "创建快照所用的 Elasticsearch 版本与集群的版本不兼容。", "xpack.snapshotRestore.snapshotState.inProgressLabel": "正在拍取快照……", "xpack.snapshotRestore.snapshotState.partialLabel": "部分失败", "xpack.snapshotRestore.snapshotState.partialTipDescription": "全局集群状态已存储,但至少一个分片未成功存储。请参阅'失败的索引'选项卡。", From ed81ffe214071d49d4191b092f629601dfaf19e4 Mon Sep 17 00:00:00 2001 From: Sonia Sanz Vivas Date: Fri, 29 Nov 2024 07:25:24 +0100 Subject: [PATCH 006/141] Address PR comments --- .../application/lib/snapshot_list_params.ts | 3 +- .../sections/home/policy_list/policy_list.tsx | 9 +++- .../components/snapshot_table.tsx | 2 +- .../snapshot_details/tabs/snapshot_state.tsx | 44 ++++++------------- .../server/routes/api/snapshots.ts | 1 + .../server/routes/api/validate_schemas.ts | 1 + 6 files changed, 25 insertions(+), 35 deletions(-) diff --git a/x-pack/plugins/snapshot_restore/public/application/lib/snapshot_list_params.ts b/x-pack/plugins/snapshot_restore/public/application/lib/snapshot_list_params.ts index 352eb658dd023..8c29a910c2d0c 100644 --- a/x-pack/plugins/snapshot_restore/public/application/lib/snapshot_list_params.ts +++ b/x-pack/plugins/snapshot_restore/public/application/lib/snapshot_list_params.ts @@ -15,7 +15,8 @@ export type SortField = | 'startTimeInMillis' | 'durationInMillis' | 'shards.total' - | 'shards.failed'; + | 'shards.failed' + | 'state'; export type SortDirection = Direction; diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx index 1488394b27a0c..177cef880d610 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx @@ -12,6 +12,7 @@ import { EuiButton, EuiCallOut, EuiSpacer, EuiPageTemplate, EuiLink } from '@ela import { reactRouterNavigate } from '@kbn/kibana-react-plugin/public'; +import { i18n } from '@kbn/i18n'; import { PageLoading, PageError, @@ -176,13 +177,17 @@ export const PolicyList: React.FunctionComponent

- Policies are not executed. You must restart SLM{' '} + {i18n.translate('xpack.snapshotRestore.slmWarning', { + defaultMessage: 'Policies are not executed. You must restart SLM', + })}{' '} - by using the API. + {i18n.translate('xpack.snapshotRestore.slmDocLink', { + defaultMessage: 'by using the API.', + })}

diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx index 72d31fe920ba9..35ae106a11449 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx @@ -100,7 +100,7 @@ export const SnapshotTable: React.FunctionComponent = (props: Props) => { defaultMessage: 'State', }), truncateText: false, - sortable: false, + sortable: true, render: (state: string) => , }, { diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx index c5eec5818e380..6ad687f9cfcbf 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx @@ -5,9 +5,9 @@ * 2.0. */ -import React, { Fragment } from 'react'; +import React from 'react'; -import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiIconTip, EuiToolTip } from '@elastic/eui'; +import { EuiFlexGroup, EuiHealth, EuiIcon, EuiToolTip } from '@elastic/eui'; import { SNAPSHOT_STATE } from '../../../../../constants'; import { useServices } from '../../../../../app_context'; @@ -22,25 +22,25 @@ export const SnapshotState: React.FC = ({ state, tooltipIcon }) => { const stateMap: any = { [SNAPSHOT_STATE.IN_PROGRESS]: { - icon: , + color: 'primary', label: i18n.translate('xpack.snapshotRestore.snapshotState.inProgressLabel', { defaultMessage: 'In Progress', }), }, [SNAPSHOT_STATE.SUCCESS]: { - icon: , + color: 'success', label: i18n.translate('xpack.snapshotRestore.snapshotState.completeLabel', { defaultMessage: 'Complete', }), }, [SNAPSHOT_STATE.FAILED]: { - icon: , + color: 'danger', label: i18n.translate('xpack.snapshotRestore.snapshotState.failedLabel', { defaultMessage: 'Failed', }), }, [SNAPSHOT_STATE.PARTIAL]: { - icon: , + color: 'warning', label: i18n.translate('xpack.snapshotRestore.snapshotState.partialLabel', { defaultMessage: 'Partial', }), @@ -55,34 +55,16 @@ export const SnapshotState: React.FC = ({ state, tooltipIcon }) => { return state; } - const { icon, label, tip } = stateMap[state]; + const { color, label, tip } = stateMap[state]; - const iconTip = tip && tooltipIcon && ( - - {' '} - - - ); - - const snapshotInfo = ( - - {icon} - - - {/* Escape flex layout created by EuiFlexItem. */} -
- {label} - {iconTip} -
-
-
- ); + const iconTip = tooltipIcon && tip && ; - return tip && tooltipIcon ? ( - snapshotInfo - ) : ( + return ( - {snapshotInfo} + + {label} + {iconTip} + ); }; diff --git a/x-pack/plugins/snapshot_restore/server/routes/api/snapshots.ts b/x-pack/plugins/snapshot_restore/server/routes/api/snapshots.ts index c486180424da5..f2a7b34ced554 100644 --- a/x-pack/plugins/snapshot_restore/server/routes/api/snapshots.ts +++ b/x-pack/plugins/snapshot_restore/server/routes/api/snapshots.ts @@ -22,6 +22,7 @@ const sortFieldToESParams = { durationInMillis: 'duration', 'shards.total': 'shard_count', 'shards.failed': 'failed_shard_count', + state: 'name', }; const isSearchingForNonExistentRepository = ( diff --git a/x-pack/plugins/snapshot_restore/server/routes/api/validate_schemas.ts b/x-pack/plugins/snapshot_restore/server/routes/api/validate_schemas.ts index 4167c0d972a48..50cfc94a5fbb7 100644 --- a/x-pack/plugins/snapshot_restore/server/routes/api/validate_schemas.ts +++ b/x-pack/plugins/snapshot_restore/server/routes/api/validate_schemas.ts @@ -36,6 +36,7 @@ export const snapshotListSchema = schema.object({ schema.literal('startTimeInMillis'), schema.literal('shards.total'), schema.literal('shards.failed'), + schema.literal('state'), ]), sortDirection: schema.oneOf([schema.literal('desc'), schema.literal('asc')]), pageIndex: schema.number(), From 8fca143c48ef8ec0ecf14c0ac2951cfd29348e8d Mon Sep 17 00:00:00 2001 From: Sonia Sanz Vivas Date: Fri, 29 Nov 2024 12:15:11 +0100 Subject: [PATCH 007/141] Update readme --- x-pack/plugins/snapshot_restore/README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/snapshot_restore/README.md b/x-pack/plugins/snapshot_restore/README.md index b6b75631b07d9..e448c7bca2c38 100644 --- a/x-pack/plugins/snapshot_restore/README.md +++ b/x-pack/plugins/snapshot_restore/README.md @@ -74,4 +74,12 @@ To run ES with plugins: 1. Run `yarn es snapshot` from the Kibana directory like normal, then exit out of process. 2. `cd .es/8.0.0` 3. `bin/elasticsearch-plugin install https://snapshots.elastic.co/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-8.0.0-SNAPSHOT.zip` -4. Run `bin/elasticsearch` from the `.es/8.0.0` directory. Otherwise, starting ES with `yarn es snapshot` would overwrite the plugins you just installed. \ No newline at end of file +4. Run `bin/elasticsearch` from the `.es/8.0.0` directory. Otherwise, starting ES with `yarn es snapshot` would overwrite the plugins you just installed. + + +### SLM status +Snapshot lifecycle management (SLM) status is "RUNNING" by default, but it can be stoped manually (for mantenaince purpouses, for instance). When this happens, no schedule snapshots will be taken. Docs: https://www.elastic.co/guide/en/elasticsearch/reference/master/snapshot-lifecycle-management-api.html + +* To check the SLM status you can run `GET _slm/status` +* To start SLM `POST /_slm/start` +* To stop SLM `POST /_slm/stop` From 039c7f1e7a57ca70dc920afc0943882b3af07901 Mon Sep 17 00:00:00 2001 From: Sonia Sanz Vivas Date: Tue, 3 Dec 2024 16:30:50 +0100 Subject: [PATCH 008/141] Address PR comments --- .../sections/home/policy_list/policy_list.tsx | 38 +++++++++++-------- .../components/snapshot_table.tsx | 4 +- .../snapshot_details/tabs/snapshot_state.tsx | 6 +-- .../snapshot_details/tabs/tab_summary.tsx | 2 +- .../server/routes/api/snapshots.ts | 1 - .../server/routes/api/validate_schemas.ts | 1 - 6 files changed, 29 insertions(+), 23 deletions(-) diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx index 177cef880d610..538c61ae94488 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx @@ -172,24 +172,32 @@ export const PolicyList: React.FunctionComponent + } color="warning" iconType="warning" > -

- {i18n.translate('xpack.snapshotRestore.slmWarning', { - defaultMessage: 'Policies are not executed. You must restart SLM', - })}{' '} - - {i18n.translate('xpack.snapshotRestore.slmDocLink', { - defaultMessage: 'by using the API.', - })} - -

+ + {i18n.translate('xpack.snapshotRestore.slmDocLink', { + defaultMessage: 'by using the API.', + })} + + ), + }} + />
diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx index 35ae106a11449..e4907709f7e1e 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/components/snapshot_table.tsx @@ -100,8 +100,8 @@ export const SnapshotTable: React.FunctionComponent = (props: Props) => { defaultMessage: 'State', }), truncateText: false, - sortable: true, - render: (state: string) => , + sortable: false, + render: (state: string) => , }, { field: 'repository', diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx index 6ad687f9cfcbf..57c47371bf893 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx @@ -14,10 +14,10 @@ import { useServices } from '../../../../../app_context'; interface Props { state: any; - tooltipIcon: boolean; + displayTooltipIcon: boolean; } -export const SnapshotState: React.FC = ({ state, tooltipIcon }) => { +export const SnapshotState: React.FC = ({ state, displayTooltipIcon }) => { const { i18n } = useServices(); const stateMap: any = { @@ -57,7 +57,7 @@ export const SnapshotState: React.FC = ({ state, tooltipIcon }) => { const { color, label, tip } = stateMap[state]; - const iconTip = tooltipIcon && tip && ; + const iconTip = displayTooltipIcon && tip && ; return ( diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/tab_summary.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/tab_summary.tsx index fb17120a2ed15..cf1f9fd83a3d8 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/tab_summary.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/tab_summary.tsx @@ -94,7 +94,7 @@ export const TabSummary: React.FC = ({ snapshotDetails }) => { - + diff --git a/x-pack/plugins/snapshot_restore/server/routes/api/snapshots.ts b/x-pack/plugins/snapshot_restore/server/routes/api/snapshots.ts index f2a7b34ced554..c486180424da5 100644 --- a/x-pack/plugins/snapshot_restore/server/routes/api/snapshots.ts +++ b/x-pack/plugins/snapshot_restore/server/routes/api/snapshots.ts @@ -22,7 +22,6 @@ const sortFieldToESParams = { durationInMillis: 'duration', 'shards.total': 'shard_count', 'shards.failed': 'failed_shard_count', - state: 'name', }; const isSearchingForNonExistentRepository = ( diff --git a/x-pack/plugins/snapshot_restore/server/routes/api/validate_schemas.ts b/x-pack/plugins/snapshot_restore/server/routes/api/validate_schemas.ts index 50cfc94a5fbb7..4167c0d972a48 100644 --- a/x-pack/plugins/snapshot_restore/server/routes/api/validate_schemas.ts +++ b/x-pack/plugins/snapshot_restore/server/routes/api/validate_schemas.ts @@ -36,7 +36,6 @@ export const snapshotListSchema = schema.object({ schema.literal('startTimeInMillis'), schema.literal('shards.total'), schema.literal('shards.failed'), - schema.literal('state'), ]), sortDirection: schema.oneOf([schema.literal('desc'), schema.literal('asc')]), pageIndex: schema.number(), From 72cefd1325c38426107a8febc532801a7086f010 Mon Sep 17 00:00:00 2001 From: Sonia Sanz Vivas Date: Thu, 5 Dec 2024 07:55:58 +0100 Subject: [PATCH 009/141] Apply suggestions from code review Co-authored-by: shainaraskas <58563081+shainaraskas@users.noreply.github.com> --- .../application/sections/home/policy_list/policy_list.tsx | 4 ++-- .../snapshot_list/snapshot_details/tabs/snapshot_state.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx index 538c61ae94488..6a74b92c4ac57 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/policy_list/policy_list.tsx @@ -183,7 +183,7 @@ export const PolicyList: React.FunctionComponent {i18n.translate('xpack.snapshotRestore.slmDocLink', { - defaultMessage: 'by using the API.', + defaultMessage: 'using the API.', })} ), diff --git a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx index 57c47371bf893..4b3a0215d7ec6 100644 --- a/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx +++ b/x-pack/plugins/snapshot_restore/public/application/sections/home/snapshot_list/snapshot_details/tabs/snapshot_state.tsx @@ -24,7 +24,7 @@ export const SnapshotState: React.FC = ({ state, displayTooltipIcon }) => [SNAPSHOT_STATE.IN_PROGRESS]: { color: 'primary', label: i18n.translate('xpack.snapshotRestore.snapshotState.inProgressLabel', { - defaultMessage: 'In Progress', + defaultMessage: 'In progress', }), }, [SNAPSHOT_STATE.SUCCESS]: { From 019914d66d026795a06d1801091145ffb9b1a18e Mon Sep 17 00:00:00 2001 From: Sonia Sanz Vivas Date: Thu, 5 Dec 2024 09:45:28 +0100 Subject: [PATCH 010/141] Fix test --- .../snapshot_restore/__jest__/client_integration/home.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts b/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts index 4a9c93b548ca5..a25dcf2a61341 100644 --- a/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts +++ b/x-pack/plugins/snapshot_restore/__jest__/client_integration/home.test.ts @@ -789,7 +789,7 @@ describe('', () => { }; const mapStateToMessage = { - [SNAPSHOT_STATE.IN_PROGRESS]: 'In Progress', + [SNAPSHOT_STATE.IN_PROGRESS]: 'In progress', [SNAPSHOT_STATE.FAILED]: 'Failed', [SNAPSHOT_STATE.PARTIAL]: 'Partial', [SNAPSHOT_STATE.SUCCESS]: 'Complete', From 656f2fb920f7f91f3cfb668520675cbe7f1bc25e Mon Sep 17 00:00:00 2001 From: Marco Vettorello Date: Wed, 4 Dec 2024 11:33:02 +0100 Subject: [PATCH 011/141] [deps] Remove faker from renovate (#202777) ## Summary With the [replacement](https://github.com/elastic/kibana/pull/201105) of `faker` with `@faker-js` there is no more need of this renovate configuration. --- renovate.json | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/renovate.json b/renovate.json index b010d5465dc33..4d2e1a2daf5e3 100644 --- a/renovate.json +++ b/renovate.json @@ -400,26 +400,6 @@ "enabled": true, "minimumReleaseAge": "7 days" }, - { - "groupName": "@elastic/kibana-visualizations test dependencies", - "matchDepNames": [ - "@types/faker", - "faker" - ], - "reviewers": [ - "team:visualizations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Visualizations", - "release_note:skip", - "backport:prev-minor" - ], - "enabled": true, - "minimumReleaseAge": "7 days" - }, { "groupName": "@elastic/charts", "matchDepNames": [ From cff3ace4483ea261d72bfdf7392941a1c9fa35c9 Mon Sep 17 00:00:00 2001 From: Mykola Harmash Date: Wed, 4 Dec 2024 11:49:47 +0100 Subject: [PATCH 012/141] [Observability Onboarding] Prevent showing duplcated AWS services in Firehose flow (#201613) Closes #200931 Switched to using AWS service list as a base to showing the detected services in the UI instead of the list of populated indices as multiple indices can be related to a single service. ### How to test 1. Go to Firehose flow `/observabilityOnboarding/firehose` 2. Open Kibana dev tools in another tab 3. Ingest documents related into multiple data streams which related to a single AWS service: ``` POST logs-aws.apigateway_logs-default/_doc { "@timestamp": "2024-11-25T13:32:01.000Z", "some": 111, "aws.kinesis.name": "Elastic-CloudwatchLogs" } POST metrics-aws.apigateway_metrics-default/_doc { "@timestamp": "2024-11-25T13:31:01.000Z", "agent": { "type": "firehose" }, "aws": { "cloudwatch": { "namespace": "AWS/ApiGateway" }, "exporter": { "arn": "arn:aws:cloudwatch:us-west-2:975050175126:metric-stream/Elastic-CloudwatchLogsAndMetricsToFirehose-CloudWatchMetricStream-Nhb4NhzPdL4J" } }, "cloud": { "account": { "id": "975050175126" }, "provider": "aws", "region": "us-west-2" } } ``` 4. Make sure you see only one entry for the service appear in the Firehose flow --- .../use_aws_service_get_started_list.ts | 2 +- .../firehose/visualize_data.tsx | 129 +++++++++--------- 2 files changed, 68 insertions(+), 63 deletions(-) diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/use_aws_service_get_started_list.ts b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/use_aws_service_get_started_list.ts index 277c565986d3c..13273475c7697 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/use_aws_service_get_started_list.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/use_aws_service_get_started_list.ts @@ -14,7 +14,7 @@ import { DISCOVER_APP_LOCATOR } from '@kbn/discover-plugin/common'; import { AWSIndexName } from '../../../../common/aws_firehose'; import { ObservabilityOnboardingContextValue } from '../../../plugin'; -interface AWSServiceGetStartedConfig { +export interface AWSServiceGetStartedConfig { id: string; indexNameList: AWSIndexName[]; title: string; diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/visualize_data.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/visualize_data.tsx index 1b6b281495971..45a2089c2d1c4 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/visualize_data.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/quickstart_flows/firehose/visualize_data.tsx @@ -9,19 +9,21 @@ import { EuiIcon, EuiSpacer, EuiText, useGeneratedHtmlId } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useEffect, useState } from 'react'; import useInterval from 'react-use/lib/useInterval'; -import { union } from 'lodash'; +import { unionBy } from 'lodash'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { FormattedMessage } from '@kbn/i18n-react'; import { ObservabilityOnboardingAppServices } from '../../..'; import { FIREHOSE_CLOUDFORMATION_STACK_NAME, FIREHOSE_LOGS_STREAM_NAME, - type AWSIndexName, } from '../../../../common/aws_firehose'; import { FETCH_STATUS, useFetcher } from '../../../hooks/use_fetcher'; import { AccordionWithIcon } from '../shared/accordion_with_icon'; import { GetStartedPanel } from '../shared/get_started_panel'; -import { useAWSServiceGetStartedList } from './use_aws_service_get_started_list'; +import { + type AWSServiceGetStartedConfig, + useAWSServiceGetStartedList, +} from './use_aws_service_get_started_list'; import { AutoRefreshCallout } from './auto_refresh_callout'; import { ProgressCallout } from './progress_callout'; import { HAS_DATA_FETCH_INTERVAL } from './utils'; @@ -36,12 +38,12 @@ interface Props { export function VisualizeData({ onboardingId, selectedCreateStackOption }: Props) { const accordionId = useGeneratedHtmlId({ prefix: 'accordion' }); - const [orderedPopulatedAWSLogsIndexList, setOrderedPopulatedAWSLogsIndexList] = useState< - AWSIndexName[] + const [orderedVisibleAWSServiceList, setOrderedVisibleAWSServiceList] = useState< + AWSServiceGetStartedConfig[] >([]); const [shouldShowDataReceivedToast, setShouldShowDataReceivedToast] = useState(true); const { - data: populatedAWSLogsIndexList, + data: populatedAWSIndexList, status, refetch, } = useFetcher((callApi) => { @@ -60,12 +62,13 @@ export function VisualizeData({ onboardingId, selectedCreateStackOption }: Props context: { cloudServiceProvider }, }, } = useKibana(); + const awsServiceGetStartedConfigList = useAWSServiceGetStartedList(); useEffect(() => { if ( shouldShowDataReceivedToast && - Array.isArray(populatedAWSLogsIndexList) && - populatedAWSLogsIndexList.length > 0 + Array.isArray(populatedAWSIndexList) && + populatedAWSIndexList.length > 0 ) { notifications?.toasts.addSuccess( { @@ -90,17 +93,27 @@ export function VisualizeData({ onboardingId, selectedCreateStackOption }: Props setShouldShowDataReceivedToast(false); } - setOrderedPopulatedAWSLogsIndexList((currentList) => + setOrderedVisibleAWSServiceList((currentList) => /** - * Using union() to ensure items in the array are unique - * add stay in the insertion order to keep the order of - * the AWS services in the UI. + * unionBy() ensures uniqueness of the resulting list + * and preserves the order of the first list passed to it, + * which in turn keeps already visible services in the UI + * in place and new services are only appended to the end. */ - union(currentList, populatedAWSLogsIndexList) + unionBy( + currentList, + awsServiceGetStartedConfigList.filter(({ indexNameList }) => + indexNameList.some((indexName) => populatedAWSIndexList?.includes(indexName)) + ), + 'id' + ) ); - }, [notifications?.toasts, populatedAWSLogsIndexList, shouldShowDataReceivedToast]); - - const awsServiceGetStartedConfigList = useAWSServiceGetStartedList(); + }, [ + awsServiceGetStartedConfigList, + notifications?.toasts, + populatedAWSIndexList, + shouldShowDataReceivedToast, + ]); useInterval(() => { if (REQUEST_PENDING_STATUS_LIST.includes(status)) { @@ -110,7 +123,7 @@ export function VisualizeData({ onboardingId, selectedCreateStackOption }: Props refetch(); }, HAS_DATA_FETCH_INTERVAL); - if (populatedAWSLogsIndexList === undefined) { + if (populatedAWSIndexList === undefined) { return null; } @@ -127,56 +140,48 @@ export function VisualizeData({ onboardingId, selectedCreateStackOption }: Props - {orderedPopulatedAWSLogsIndexList.length === 0 && } - {orderedPopulatedAWSLogsIndexList.length > 0 && } + {orderedVisibleAWSServiceList.length === 0 && } + {orderedVisibleAWSServiceList.length > 0 && }
- {orderedPopulatedAWSLogsIndexList.map((indexName, index) => { - const getStartedConfig = awsServiceGetStartedConfigList.find(({ indexNameList }) => - indexNameList.includes(indexName) - ); - - if (!getStartedConfig) { - return null; + {orderedVisibleAWSServiceList.map( + ({ id, actionLinks, title, logoURL, previewImage }, index) => { + return ( + } + title={title} + initialIsOpen={true} + borders={ + index === 0 || index === orderedVisibleAWSServiceList.length - 1 + ? 'none' + : 'horizontal' + } + > + + + ); } - - const { id, actionLinks, title, logoURL, previewImage } = getStartedConfig; - - return ( - } - title={title} - initialIsOpen={true} - borders={ - index === 0 || index === orderedPopulatedAWSLogsIndexList.length - 1 - ? 'none' - : 'horizontal' - } - > - - - ); - })} + )}
); From 5047c6e101c7a45bcd0ccc67f23f241a21e08ac4 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Wed, 4 Dec 2024 12:04:17 +0100 Subject: [PATCH 013/141] [Synthetics] E2e test update flakiness !! (#201123) ## Summary E2e test update flakiness !! --- .../e2e/synthetics/journeys/management_list.journey.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/management_list.journey.ts b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/management_list.journey.ts index c81fe084194d5..7794099093c5e 100644 --- a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/management_list.journey.ts +++ b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/management_list.journey.ts @@ -69,6 +69,7 @@ journey(`MonitorManagementList`, async ({ page, params }) => { await page.click('span >> text="Journey / Page"'); await page.click('[aria-label="Apply the selected filters for Type"]'); expect(page.url()).toBe(`${pageBaseUrl}?monitorTypes=%5B%22browser%22%5D`); + await page.waitForTimeout(5000); await page.click('[placeholder="Search by name, URL, host, tag, project or location"]'); await Promise.all([ page.waitForNavigation({ From 2cbd79b901b85bdc55f61957fbc9cc00e83a0caf Mon Sep 17 00:00:00 2001 From: Yan Savitski Date: Wed, 4 Dec 2024 12:34:30 +0100 Subject: [PATCH 014/141] [Search] [Onboarding] Update example data for index (#201983) Improve generated vector db data in the index Use: - Ironman - Batman - Black Widow image image --------- Co-authored-by: Elastic Machine --- .../add_documents_code_example.test.tsx | 132 ++++++++++++++++++ .../add_documents_code_example.tsx | 27 +++- .../svl_search_index_detail_page.ts | 27 ++++ .../test_suites/search/search_index_detail.ts | 27 ++++ 4 files changed, 208 insertions(+), 5 deletions(-) create mode 100644 x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.test.tsx diff --git a/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.test.tsx b/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.test.tsx new file mode 100644 index 0000000000000..c5fdc7428e690 --- /dev/null +++ b/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.test.tsx @@ -0,0 +1,132 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render } from '@testing-library/react'; +import { + AddDocumentsCodeExample, + basicExampleTexts, + exampleTextsWithCustomMapping, +} from './add_documents_code_example'; +import { generateSampleDocument } from '../../utils/document_generation'; +import { MappingProperty } from '@elastic/elasticsearch/lib/api/types'; + +jest.mock('../../utils/language', () => ({ + getDefaultCodingLanguage: jest.fn().mockReturnValue('python'), +})); + +jest.mock('../../hooks/use_asset_base_path', () => ({ + useAssetBasePath: jest.fn().mockReturnValue('/plugins/'), +})); + +jest.mock('../../utils/document_generation', () => ({ + generateSampleDocument: jest.fn(), +})); + +jest.mock('../../hooks/use_elasticsearch_url', () => ({ + useElasticsearchUrl: jest.fn(), +})); + +jest.mock('@kbn/search-api-keys-components', () => ({ + useSearchApiKey: jest.fn().mockReturnValue({ apiKey: 'test-api-key' }), +})); + +jest.mock('../../hooks/use_kibana', () => ({ + useKibana: jest.fn().mockReturnValue({ + services: { + application: {}, + share: {}, + console: {}, + }, + }), +})); + +jest.mock('../../contexts/usage_tracker_context', () => ({ + useUsageTracker: jest.fn().mockReturnValue({ + count: jest.fn(), + click: jest.fn(), + }), +})); + +describe('AddDocumentsCodeExample', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('generateSampleDocument', () => { + it('pass basic examples when mapping is default', () => { + const indexName = 'test-index'; + const mappingProperties: Record = { + vector: { type: 'dense_vector', dims: 3 }, + text: { type: 'text' }, + }; + + render( + + ); + + expect(generateSampleDocument).toHaveBeenCalledTimes(3); + + basicExampleTexts.forEach((text, index) => { + expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); + }); + }); + + it('pass basic examples when mapping is not passed', () => { + const indexName = 'test-index'; + + render(); + + expect(generateSampleDocument).toHaveBeenCalledTimes(3); + + const mappingProperties: Record = { + vector: { type: 'dense_vector', dims: 3 }, + text: { type: 'text' }, + }; + + basicExampleTexts.forEach((text, index) => { + expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); + }); + }); + + it('pass basic examples when mapping is default with extra vector fields', () => { + const indexName = 'test-index'; + const mappingProperties: Record = { + vector: { type: 'dense_vector', dims: 3, similarity: 'extra' }, + text: { type: 'text' }, + }; + + render( + + ); + + expect(generateSampleDocument).toHaveBeenCalledTimes(3); + + basicExampleTexts.forEach((text, index) => { + expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); + }); + }); + + it('pass examples text when mapping is custom', () => { + const indexName = 'test-index'; + const mappingProperties: Record = { + text: { type: 'text' }, + test: { type: 'boolean' }, + }; + + render( + + ); + + expect(generateSampleDocument).toHaveBeenCalledTimes(3); + + exampleTextsWithCustomMapping.forEach((text, index) => { + expect(generateSampleDocument).toHaveBeenNthCalledWith(index + 1, mappingProperties, text); + }); + }); + }); +}); diff --git a/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx b/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx index e84ca5bd47be0..d96055b5dc184 100644 --- a/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx +++ b/x-pack/plugins/search_indices/public/components/index_documents/add_documents_code_example.tsx @@ -6,10 +6,11 @@ */ import React, { useCallback, useMemo, useState } from 'react'; -import { MappingProperty } from '@elastic/elasticsearch/lib/api/types'; +import { MappingDenseVectorProperty, MappingProperty } from '@elastic/elasticsearch/lib/api/types'; import { EuiFlexGroup, EuiFlexItem, EuiPanel } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { TryInConsoleButton } from '@kbn/try-in-console'; +import { isEqual } from 'lodash'; import { useSearchApiKey } from '@kbn/search-api-keys-components'; import { useKibana } from '../../hooks/use_kibana'; @@ -24,6 +25,13 @@ import { CodeSample } from '../shared/code_sample'; import { generateSampleDocument } from '../../utils/document_generation'; import { getDefaultCodingLanguage } from '../../utils/language'; +export const basicExampleTexts = [ + 'Yellowstone National Park', + 'Yosemite National Park', + 'Rocky Mountain National Park', +]; +export const exampleTextsWithCustomMapping = [1, 2, 3].map((num) => `Example text ${num}`); + export interface AddDocumentsCodeExampleProps { indexName: string; mappingProperties: Record; @@ -56,10 +64,19 @@ export const AddDocumentsCodeExample = ({ [usageTracker] ); const sampleDocuments = useMemo(() => { - return [1, 2, 3].map((num) => - generateSampleDocument(codeSampleMappings, `Example text ${num}`) - ); - }, [codeSampleMappings]); + // If the default mapping was used, we need to exclude generated vector fields + const copyCodeSampleMappings = { + ...codeSampleMappings, + vector: { + type: codeSampleMappings.vector?.type, + dims: (codeSampleMappings.vector as MappingDenseVectorProperty)?.dims, + }, + }; + const isDefaultMapping = isEqual(copyCodeSampleMappings, ingestCodeExamples.defaultMapping); + const sampleTexts = isDefaultMapping ? basicExampleTexts : exampleTextsWithCustomMapping; + + return sampleTexts.map((text) => generateSampleDocument(codeSampleMappings, text)); + }, [codeSampleMappings, ingestCodeExamples.defaultMapping]); const { apiKey } = useSearchApiKey(); const codeParams: IngestCodeSnippetParameters = useMemo(() => { return { diff --git a/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts b/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts index 0609b2bec4aed..17821c7dfe73b 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_search_index_detail_page.ts @@ -208,6 +208,33 @@ export function SvlSearchIndexDetailPageProvider({ getService }: FtrProviderCont ); }, + async expectHasSampleDocuments() { + await testSubjects.existOrFail('ingestDataCodeExample-code-block'); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Yellowstone National Park' + ); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Yosemite National Park' + ); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Rocky Mountain National Park' + ); + }, + + async expectSampleDocumentsWithCustomMappings() { + await browser.refresh(); + await testSubjects.existOrFail('ingestDataCodeExample-code-block'); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Example text 1' + ); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Example text 2' + ); + expect(await testSubjects.getVisibleText('ingestDataCodeExample-code-block')).to.contain( + 'Example text 3' + ); + }, + async clickFirstDocumentDeleteAction() { await testSubjects.existOrFail('documentMetadataButton'); await testSubjects.click('documentMetadataButton'); diff --git a/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts b/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts index 097da2201e1e7..7d47bd732746b 100644 --- a/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts +++ b/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts @@ -54,6 +54,33 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await pageObjects.svlSearchIndexDetailPage.expectConnectionDetails(); }); + describe('check code example texts', () => { + const indexNameCodeExample = 'test-my-index2'; + before(async () => { + await es.indices.create({ index: indexNameCodeExample }); + await svlSearchNavigation.navigateToIndexDetailPage(indexNameCodeExample); + }); + + after(async () => { + await esDeleteAllIndices(indexNameCodeExample); + }); + + it('should have basic example texts', async () => { + await pageObjects.svlSearchIndexDetailPage.expectHasSampleDocuments(); + }); + + it('should have other example texts when mapping changed', async () => { + await es.indices.putMapping({ + index: indexNameCodeExample, + properties: { + text: { type: 'text' }, + number: { type: 'integer' }, + }, + }); + await pageObjects.svlSearchIndexDetailPage.expectSampleDocumentsWithCustomMappings(); + }); + }); + describe.skip('API key details', () => { // Flaky test related with deleting API keys it('should show api key', async () => { From 7354cf21a3bd6af4725c0efcf10d3f6cfef7aa6e Mon Sep 17 00:00:00 2001 From: Irene Blanco Date: Wed, 4 Dec 2024 12:41:44 +0100 Subject: [PATCH 015/141] [Infra] Send Host View Total Host Count Retrieved event on every query submission in hosts inventory (#202691) ## Summary Fixes https://github.com/elastic/kibana/issues/202441 This PR reintroduces the `Host View Total Host Count Retrieved` event, which was unintentionally removed in the past. It has been added back to the same position in the code as previously |Scenario|Event| |-|-| |Page load|![Screenshot 2024-12-03 at 12 37 28](https://github.com/user-attachments/assets/8a12d713-219b-4c1f-a08e-7b475634b4fc)| |Query|![Screenshot 2024-12-03 at 12 40 12](https://github.com/user-attachments/assets/501a8a81-b0b0-46a6-a470-dceeba791c01)| |Filter|![Screenshot 2024-12-03 at 12 40 56](https://github.com/user-attachments/assets/586f2176-b05b-4571-b3d8-f3f9cb803249)| --- .../hosts/hooks/use_host_count.test.ts | 144 ++++++++++++++++++ .../metrics/hosts/hooks/use_host_count.ts | 17 ++- 2 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.test.ts diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.test.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.test.ts new file mode 100644 index 0000000000000..641194c82888a --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.test.ts @@ -0,0 +1,144 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook } from '@testing-library/react'; +import { useFetcher } from '../../../../hooks/use_fetcher'; +import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; +import * as useKibanaContextForPluginHook from '../../../../hooks/use_kibana'; +import * as useUnifiedSearchHooks from './use_unified_search'; +import { useHostCount } from './use_host_count'; + +jest.mock('../../../../hooks/use_fetcher'); +jest.mock('../../../../hooks/use_kibana'); +jest.mock('./use_unified_search'); + +describe('useHostCount', () => { + const useKibanaContextForPluginMock = useKibanaContextForPlugin as jest.MockedFunction< + typeof useKibanaContextForPlugin + >; + + const telemetryMock = { reportHostsViewTotalHostCountRetrieved: jest.fn() }; + + useKibanaContextForPluginMock.mockReturnValue({ + services: { telemetry: telemetryMock }, + } as unknown as ReturnType); + + const useUnifiedSearchContextMock = + useUnifiedSearchHooks.useUnifiedSearchContext as jest.MockedFunction< + typeof useUnifiedSearchHooks.useUnifiedSearchContext + >; + + const mockUseUnifiedContext = (searchCriteria: any) => { + useUnifiedSearchContextMock.mockReturnValue({ + buildQuery: jest.fn(() => 'query'), + parsedDateRange: { from: '', to: '' }, + searchCriteria, + } as unknown as ReturnType); + }; + + describe('when data is fetched', () => { + const fetcherDataMock = { count: 10 }; + + beforeAll(() => { + (useFetcher as jest.Mock).mockReturnValue({ + data: fetcherDataMock, + status: 'success', + error: null, + }); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('and there is no filters or query applied', () => { + it('should call reportHostsViewTotalHostCountRetrieved with the correct data', async () => { + mockUseUnifiedContext({ + query: { query: null }, + filters: [], + panelFilters: [], + }); + + await renderHook(() => useHostCount()); + + expect(telemetryMock.reportHostsViewTotalHostCountRetrieved).toHaveBeenCalledWith({ + total: fetcherDataMock.count, + with_query: false, + with_filters: false, + }); + }); + }); + + describe('and query is applied', () => { + it('should call reportHostsViewTotalHostCountRetrieved with the correct data', async () => { + mockUseUnifiedContext({ query: { query: 'test' }, filters: [], panelFilters: [] }); + + await renderHook(() => useHostCount()); + + expect(telemetryMock.reportHostsViewTotalHostCountRetrieved).toHaveBeenCalledWith({ + total: fetcherDataMock.count, + with_query: true, + with_filters: false, + }); + }); + }); + + describe('and filters are applied', () => { + it('should call reportHostsViewTotalHostCountRetrieved with the correct data', async () => { + mockUseUnifiedContext({ + query: { query: null }, + filters: [{ filter: 'filter' }], + panelFilters: [], + }); + + await renderHook(() => useHostCount()); + + expect(telemetryMock.reportHostsViewTotalHostCountRetrieved).toHaveBeenCalledWith({ + total: fetcherDataMock.count, + with_query: false, + with_filters: true, + }); + }); + }); + + describe('and panel filters are applied', () => { + it('should call reportHostsViewTotalHostCountRetrieved with the correct data', async () => { + mockUseUnifiedContext({ + query: { query: null }, + filters: [{ filter: 'filter' }], + panelFilters: [{ filter: 'filter' }], + }); + + await renderHook(() => useHostCount()); + + expect(telemetryMock.reportHostsViewTotalHostCountRetrieved).toHaveBeenCalledWith({ + total: fetcherDataMock.count, + with_query: false, + with_filters: true, + }); + }); + }); + }); + + describe('when data is fetched with error', () => { + beforeAll(() => { + (useFetcher as jest.Mock).mockReturnValue({ + data: {}, + status: 'error', + error: 'error', + }); + }); + + it('should NOT call reportHostsViewTotalHostCountRetrieved ', async () => { + mockUseUnifiedContext(null); + + await renderHook(() => useHostCount()); + + expect(telemetryMock.reportHostsViewTotalHostCountRetrieved).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts index a09e46ed2792a..fd723fd596146 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts @@ -7,13 +7,16 @@ import createContainer from 'constate'; import { decodeOrThrow } from '@kbn/io-ts-utils'; -import { useMemo } from 'react'; +import { useMemo, useEffect } from 'react'; +import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { GetInfraAssetCountResponsePayloadRT } from '../../../../../common/http_api'; import { isPending, useFetcher } from '../../../../hooks/use_fetcher'; import { useUnifiedSearchContext } from './use_unified_search'; export const useHostCount = () => { - const { buildQuery, parsedDateRange } = useUnifiedSearchContext(); + const { buildQuery, parsedDateRange, searchCriteria } = useUnifiedSearchContext(); + const { services } = useKibanaContextForPlugin(); + const { telemetry } = services; const payload = useMemo( () => @@ -37,6 +40,16 @@ export const useHostCount = () => { [payload] ); + useEffect(() => { + if (data && !error) { + telemetry.reportHostsViewTotalHostCountRetrieved({ + total: data.count ?? 0, + with_query: !!searchCriteria.query.query, + with_filters: searchCriteria.filters.length > 0 || searchCriteria.panelFilters.length > 0, + }); + } + }, [data, error, payload, searchCriteria, telemetry]); + return { errors: error, loading: isPending(status), From c5370b257ea04d39a00bf0e649780a83a6e366e7 Mon Sep 17 00:00:00 2001 From: Vadim Kibana <82822460+vadimkibana@users.noreply.github.com> Date: Wed, 4 Dec 2024 13:19:59 +0100 Subject: [PATCH 016/141] [ES|QL] `JOIN` command parser support (#202749) ## Summary Partially addresses https://github.com/elastic/kibana/issues/200858 - Adds `JOIN` command support in Kibana ES|QL AST and parser. - Adds `commandType` to AST nodes, to support ` JOIN ...` in join commands. - Adds `AS` binary expression, to support *target* aliassing in `JOIN` commands: `LEFT JOIN a AS b` ### 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 --- .../src/parser/__tests__/join.test.ts | 202 ++++++++++++++++++ .../src/parser/esql_ast_builder_listener.ts | 19 ++ .../kbn-esql-ast/src/parser/factories/join.ts | 57 +++++ packages/kbn-esql-ast/src/parser/walkers.ts | 2 +- packages/kbn-esql-ast/src/query/query.ts | 14 +- packages/kbn-esql-ast/src/types.ts | 7 + .../src/validation/validation.ts | 6 +- 7 files changed, 301 insertions(+), 6 deletions(-) create mode 100644 packages/kbn-esql-ast/src/parser/__tests__/join.test.ts create mode 100644 packages/kbn-esql-ast/src/parser/factories/join.ts diff --git a/packages/kbn-esql-ast/src/parser/__tests__/join.test.ts b/packages/kbn-esql-ast/src/parser/__tests__/join.test.ts new file mode 100644 index 0000000000000..5784e0c71cb86 --- /dev/null +++ b/packages/kbn-esql-ast/src/parser/__tests__/join.test.ts @@ -0,0 +1,202 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { EsqlQuery } from '../../query'; +import { Walker } from '../../walker'; + +describe(' JOIN command', () => { + describe('correctly formatted', () => { + it('can parse out JOIN command', () => { + const text = `FROM employees | LOOKUP JOIN languages_lookup ON language_code`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + type: 'command', + name: 'join', + commandType: 'lookup', + }); + }); + + it('supports all join types', () => { + const assertJoinType = (type: string) => { + const text = `FROM employees | ${type} JOIN languages_lookup ON language_code`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + type: 'command', + name: 'join', + commandType: type.toLowerCase(), + }); + }; + + assertJoinType('LOOKUP'); + assertJoinType('LEFT'); + assertJoinType('RIGHT'); + expect(() => assertJoinType('HASH')).toThrow(); + }); + + it('can parse out target identifier', () => { + const text = `FROM employees | LOOKUP JOIN languages_lookup ON language_code`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + commandType: 'lookup', + args: [ + { + type: 'identifier', + name: 'languages_lookup', + }, + {}, + ], + }); + }); + + it('can parse out target with "AS" alias expression', () => { + const text = `FROM employees | LOOKUP JOIN languages_lookup AS ll ON language_code`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + commandType: 'lookup', + args: [ + { + type: 'function', + subtype: 'binary-expression', + name: 'as', + args: [ + { + type: 'identifier', + name: 'languages_lookup', + }, + { + type: 'identifier', + name: 'll', + }, + ], + }, + {}, + ], + }); + }); + + it('can parse out a single "ON" predicate expression', () => { + const text = `FROM employees | LOOKUP JOIN languages_lookup AS ll ON language_code`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + commandType: 'lookup', + args: [ + {}, + { + type: 'option', + name: 'on', + args: [ + { + type: 'column', + name: 'language_code', + args: [ + { + type: 'identifier', + name: 'language_code', + }, + ], + }, + ], + }, + ], + }); + }); + + it('can parse out multiple "ON" predicate expressions', () => { + const text = `FROM employees | LOOKUP JOIN languages_lookup AS ll ON a, b, c`; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[1]).toMatchObject({ + name: 'join', + args: [ + {}, + { + type: 'option', + name: 'on', + args: [ + { + type: 'column', + name: 'a', + }, + { + type: 'column', + name: 'b', + }, + { + type: 'column', + name: 'c', + }, + ], + }, + ], + }); + }); + + it('example from documentation', () => { + const text = ` + FROM employees + | EVAL language_code = languages + | LOOKUP JOIN languages_lookup ON language_code + | WHERE emp_no < 500 + | KEEP emp_no, language_name + | SORT emp_no + | LIMIT 10 + `; + const query = EsqlQuery.fromSrc(text); + + expect(query.ast.commands[2]).toMatchObject({ + type: 'command', + name: 'join', + commandType: 'lookup', + args: [ + { + type: 'identifier', + name: 'languages_lookup', + }, + { + type: 'option', + name: 'on', + args: [ + { + type: 'column', + name: 'language_code', + }, + ], + }, + ], + }); + }); + + it('correctly extracts node positions', () => { + const text = `FROM employees | LOOKUP JOIN index AS alias ON on_1, on_2 | LIMIT 1`; + const query = EsqlQuery.fromSrc(text); + const node1 = Walker.match(query.ast, { type: 'identifier', name: 'index' }); + const node2 = Walker.match(query.ast, { type: 'identifier', name: 'alias' }); + const node3 = Walker.match(query.ast, { type: 'column', name: 'on_1' }); + const node4 = Walker.match(query.ast, { type: 'column', name: 'on_2' }); + + expect(query.src.slice(node1?.location.min, node1?.location.max! + 1)).toBe('index'); + expect(query.src.slice(node2?.location.min, node2?.location.max! + 1)).toBe('alias'); + expect(query.src.slice(node3?.location.min, node3?.location.max! + 1)).toBe('on_1'); + expect(query.src.slice(node4?.location.min, node4?.location.max! + 1)).toBe('on_2'); + }); + }); + + describe('incorrectly formatted', () => { + const text = `FROM employees | LOOKUP JOIN index AAS alias ON on_1, on_2 | LIMIT 1`; + const query = EsqlQuery.fromSrc(text); + + expect(query.errors.length > 0).toBe(true); + expect(query.errors[0].message.includes('AAS')).toBe(true); + }); +}); diff --git a/packages/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts b/packages/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts index a3f5bfabed154..e167a55f1b682 100644 --- a/packages/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts +++ b/packages/kbn-esql-ast/src/parser/esql_ast_builder_listener.ts @@ -30,6 +30,7 @@ import { type MetricsCommandContext, IndexPatternContext, InlinestatsCommandContext, + JoinCommandContext, } from '../antlr/esql_parser'; import { default as ESQLParserListener } from '../antlr/esql_parser_listener'; import { @@ -58,6 +59,7 @@ import { getEnrichClauses, } from './walkers'; import type { ESQLAst, ESQLAstMetricsCommand } from '../types'; +import { createJoinCommand } from './factories/join'; export class ESQLAstBuilderListener implements ESQLParserListener { private ast: ESQLAst = []; @@ -304,6 +306,23 @@ export class ESQLAstBuilderListener implements ESQLParserListener { command.args.push(...getPolicyName(ctx), ...getMatchField(ctx), ...getEnrichClauses(ctx)); } + /** + * Exit a parse tree produced by `esql_parser.joinCommand`. + * + * Parse the JOIN command: + * + * ``` + * JOIN identifier [ AS identifier ] ON expression [, expression [, ... ]] + * ``` + * + * @param ctx the parse tree + */ + exitJoinCommand(ctx: JoinCommandContext): void { + const command = createJoinCommand(ctx); + + this.ast.push(command); + } + enterEveryRule(ctx: ParserRuleContext): void { // method not implemented, added to satisfy interface expectation } diff --git a/packages/kbn-esql-ast/src/parser/factories/join.ts b/packages/kbn-esql-ast/src/parser/factories/join.ts new file mode 100644 index 0000000000000..400313aa39045 --- /dev/null +++ b/packages/kbn-esql-ast/src/parser/factories/join.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { JoinCommandContext, JoinTargetContext } from '../../antlr/esql_parser'; +import { Builder } from '../../builder'; +import { ESQLAstItem, ESQLBinaryExpression, ESQLCommand, ESQLIdentifier } from '../../types'; +import { createCommand, createIdentifier } from '../factories'; +import { visitValueExpression } from '../walkers'; + +const createNodeFromJoinTarget = ( + ctx: JoinTargetContext +): ESQLIdentifier | ESQLBinaryExpression => { + const index = createIdentifier(ctx._index); + const aliasCtx = ctx._alias; + + if (!aliasCtx) { + return index; + } + + const alias = createIdentifier(aliasCtx); + const renameExpression = Builder.expression.func.binary('as', [ + index, + alias, + ]) as ESQLBinaryExpression; + + return renameExpression; +}; + +export const createJoinCommand = (ctx: JoinCommandContext): ESQLCommand => { + const command = createCommand('join', ctx); + + // Pick-up the of the command. + command.commandType = (ctx._type_.text ?? '').toLocaleLowerCase(); + + const joinTarget = createNodeFromJoinTarget(ctx.joinTarget()); + const onOption = Builder.option({ name: 'on' }); + const joinPredicates: ESQLAstItem[] = onOption.args; + + for (const joinPredicateCtx of ctx.joinCondition().joinPredicate_list()) { + const expression = visitValueExpression(joinPredicateCtx.valueExpression()); + + if (expression) { + joinPredicates.push(expression); + } + } + + command.args.push(joinTarget); + command.args.push(onOption); + + return command; +}; diff --git a/packages/kbn-esql-ast/src/parser/walkers.ts b/packages/kbn-esql-ast/src/parser/walkers.ts index 60d69a17bb1c7..60dfafa6e3c89 100644 --- a/packages/kbn-esql-ast/src/parser/walkers.ts +++ b/packages/kbn-esql-ast/src/parser/walkers.ts @@ -267,7 +267,7 @@ function getComparisonName(ctx: ComparisonOperatorContext) { return (ctx.EQ() || ctx.NEQ() || ctx.LT() || ctx.LTE() || ctx.GT() || ctx.GTE()).getText() || ''; } -function visitValueExpression(ctx: ValueExpressionContext) { +export function visitValueExpression(ctx: ValueExpressionContext) { if (!textExistsAndIsValid(ctx.getText())) { return []; } diff --git a/packages/kbn-esql-ast/src/query/query.ts b/packages/kbn-esql-ast/src/query/query.ts index 66c9fd58df085..638cc4fc17f32 100644 --- a/packages/kbn-esql-ast/src/query/query.ts +++ b/packages/kbn-esql-ast/src/query/query.ts @@ -9,7 +9,7 @@ import type { Token } from 'antlr4'; import { ParseOptions, parse } from '../parser'; -import type { ESQLAstQueryExpression } from '../types'; +import type { ESQLAstQueryExpression, EditorError } from '../types'; import { WrappingPrettyPrinter, WrappingPrettyPrinterOptions, @@ -21,8 +21,9 @@ import { */ export class EsqlQuery { public static readonly fromSrc = (src: string, opts?: ParseOptions): EsqlQuery => { - const { root, tokens } = parse(src, opts); - return new EsqlQuery(root, src, tokens); + const { root, tokens, errors } = parse(src, opts); + + return new EsqlQuery(root, src, tokens, errors); }; constructor( @@ -43,7 +44,12 @@ export class EsqlQuery { * Optional array of ANTLR tokens, in case the query was parsed from a * source code. */ - public readonly tokens: Token[] = [] + public readonly tokens: Token[] = [], + + /** + * Parsing errors. + */ + public readonly errors: EditorError[] = [] ) {} public print(opts?: WrappingPrettyPrinterOptions): string { diff --git a/packages/kbn-esql-ast/src/types.ts b/packages/kbn-esql-ast/src/types.ts index 2a8513fc2ced1..60da69b04989a 100644 --- a/packages/kbn-esql-ast/src/types.ts +++ b/packages/kbn-esql-ast/src/types.ts @@ -76,6 +76,13 @@ export interface ESQLAstNodeFormatting { export interface ESQLCommand extends ESQLAstBaseItem { type: 'command'; + + /** + * The subtype of the command. For example, the `JOIN` command can be: (1) + * LOOKUP JOIN, (2) LEFT JOIN, (3) RIGHT JOIN. + */ + commandType?: string; + args: ESQLAstItem[]; } diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts index b3076d107f850..ae8ab41da157e 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts @@ -1117,7 +1117,11 @@ function validateCommand( // do not check the command exists, the grammar is already picking that up const commandDef = getCommandDefinition(command.name); - if (commandDef?.validate) { + if (!commandDef) { + return messages; + } + + if (commandDef.validate) { messages.push(...commandDef.validate(command)); } From 75c24deb1be30b38753fa5b7f863d3be5fb6b1f3 Mon Sep 17 00:00:00 2001 From: "Devin W. Hurley" Date: Wed, 4 Dec 2024 07:21:49 -0500 Subject: [PATCH 017/141] [Security Solution][Detection Engine] Adds support for suppressing EQL sequence alerts (#189725) ## Summary Provide support for suppressing EQL sequence alerts. Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Marshall Main <55718608+marshallmain@users.noreply.github.com> --- .../common/schemas/8.17.0/index.ts | 32 + .../rule_registry/common/schemas/index.ts | 6 +- .../create_persistence_rule_type_wrapper.ts | 19 +- .../server/utils/persistence_types.ts | 4 + .../common/experimental_features.ts | 11 + .../components/step_define_rule/index.tsx | 27 +- .../components/step_define_rule/schema.tsx | 23 - .../step_define_rule/translations.tsx | 16 - ...e_experimental_feature_fields_transform.ts | 35 +- .../pages/rule_editing/index.tsx | 12 +- .../rule_details/rule_definition_section.tsx | 2 +- .../logic/use_alert_suppression.test.tsx | 38 +- .../logic/use_alert_suppression.tsx | 17 +- .../build_alert_group_from_sequence.test.ts | 40 +- .../eql/build_alert_group_from_sequence.ts | 114 +- .../rule_types/eql/create_eql_alert_type.ts | 31 +- .../rule_types/eql/eql.test.ts | 70 +- .../detection_engine/rule_types/eql/eql.ts | 39 +- .../rule_types/eql/wrap_sequences_factory.ts | 45 +- .../esql/wrap_suppressed_esql_alerts.ts | 2 +- .../wrap_suppressed_new_terms_alerts.ts | 2 +- .../rule_types/query/query.ts | 1 + .../lib/detection_engine/rule_types/types.ts | 6 +- ...bulk_create_suppressed_alerts_in_memory.ts | 118 +- .../utils/bulk_create_with_suppression.ts | 18 +- .../utils/get_is_alert_suppression_active.ts | 6 +- .../utils/robust_field_access.test.ts | 3 + .../utils/suppression_utils.test.ts | 28 +- .../rule_types/utils/suppression_utils.ts | 22 +- .../rule_types/utils/utils.ts | 121 +- .../utils/wrap_suppressed_alerts.ts | 29 +- .../lib/detection_engine/scripts/post_rule.sh | 1 + .../rules/queries/sequence_eql_query.json | 62 + .../sequence_eql_query_no_duration.json | 61 + .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - .../config/ess/config.base.ts | 1 + .../eql_alert_suppression.ts | 1515 ++++++++++++++++- .../configs/serverless.config.ts | 3 + .../test/security_solution_cypress/config.ts | 3 + .../rule_creation/eql_rule_suppression.cy.ts | 2 +- .../eql_rule_suppression_sequence.cy.ts | 104 +- 43 files changed, 2371 insertions(+), 324 deletions(-) create mode 100644 x-pack/plugins/rule_registry/common/schemas/8.17.0/index.ts create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query.json create mode 100644 x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query_no_duration.json diff --git a/x-pack/plugins/rule_registry/common/schemas/8.17.0/index.ts b/x-pack/plugins/rule_registry/common/schemas/8.17.0/index.ts new file mode 100644 index 0000000000000..cc1d73de3c4ae --- /dev/null +++ b/x-pack/plugins/rule_registry/common/schemas/8.17.0/index.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ALERT_SUPPRESSION_TERMS } from '@kbn/rule-data-utils'; +import { SearchTypes } from '@kbn/data-plugin/common'; +import { AlertWithCommonFields880 } from '../8.8.0'; + +import { SuppressionFields8130 } from '../8.13.0'; + +/* DO NOT MODIFY THIS SCHEMA TO ADD NEW FIELDS. These types represent the alerts that shipped in 8.13.0. +Any changes to these types should be bug fixes so the types more accurately represent the alerts from 8.13.0. + +If you are adding new fields for a new release of Kibana, create a new sibling folder to this one +for the version to be released and add the field(s) to the schema in that folder. + +Then, update `../index.ts` to import from the new folder that has the latest schemas, add the +new schemas to the union of all alert schemas, and re-export the new schemas as the `*Latest` schemas. +*/ + +export interface SuppressionFields8170 + extends Omit { + [ALERT_SUPPRESSION_TERMS]: Array<{ + field: string; + value: SearchTypes | null; + }>; +} + +export type AlertWithSuppressionFields8170 = AlertWithCommonFields880 & SuppressionFields8170; diff --git a/x-pack/plugins/rule_registry/common/schemas/index.ts b/x-pack/plugins/rule_registry/common/schemas/index.ts index 5c168a4b899cc..5a94d250392ef 100644 --- a/x-pack/plugins/rule_registry/common/schemas/index.ts +++ b/x-pack/plugins/rule_registry/common/schemas/index.ts @@ -13,11 +13,11 @@ import type { CommonAlertFields880, } from './8.8.0'; -import type { AlertWithSuppressionFields8130, SuppressionFields8130 } from './8.13.0'; +import type { AlertWithSuppressionFields8170, SuppressionFields8170 } from './8.17.0'; export type { - AlertWithSuppressionFields8130 as AlertWithSuppressionFieldsLatest, - SuppressionFields8130 as SuppressionFieldsLatest, + AlertWithSuppressionFields8170 as AlertWithSuppressionFieldsLatest, + SuppressionFields8170 as SuppressionFieldsLatest, CommonAlertFieldName880 as CommonAlertFieldNameLatest, CommonAlertIdFieldName870 as CommonAlertIdFieldNameLatest, CommonAlertFields880 as CommonAlertFieldsLatest, diff --git a/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts b/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts index 9900c889ae73e..892ba70d247ed 100644 --- a/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts +++ b/x-pack/plugins/rule_registry/server/utils/create_persistence_rule_type_wrapper.ts @@ -27,6 +27,7 @@ import { ALERT_RULE_EXECUTION_TIMESTAMP, } from '@kbn/rule-data-utils'; import { mapKeys, snakeCase } from 'lodash/fp'; + import type { IRuleDataClient } from '..'; import { getCommonAlertFields } from './get_common_alert_fields'; import { CreatePersistenceRuleTypeWrapper } from './persistence_types'; @@ -471,9 +472,11 @@ export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper }, {}); // filter out alerts that were already suppressed - // alert was suppressed if its suppression ends is older than suppression end of existing alert - // if existing alert was created earlier during the same rule execution - then alerts can be counted as not suppressed yet - // as they are processed for the first against this existing alert + // alert was suppressed if its suppression ends is older + // than suppression end of existing alert + // if existing alert was created earlier during the same + // rule execution - then alerts can be counted as not suppressed yet + // as they are processed for the first time against this existing alert const nonSuppressedAlerts = filteredDuplicates.filter((alert) => { const existingAlert = existingAlertsByInstanceId[alert._source[ALERT_INSTANCE_ID]]; @@ -544,7 +547,15 @@ export const createPersistenceRuleTypeWrapper: CreatePersistenceRuleTypeWrapper ]; }); - let enrichedAlerts = newAlerts; + // we can now augment and enrich + // the sub alerts (if any) the same as we would + // any other newAlert + let enrichedAlerts = newAlerts.some((newAlert) => newAlert.subAlerts != null) + ? newAlerts.flatMap((newAlert) => { + const { subAlerts, ...everything } = newAlert; + return [everything, ...(subAlerts ?? [])]; + }) + : newAlerts; if (enrichAlerts) { try { diff --git a/x-pack/plugins/rule_registry/server/utils/persistence_types.ts b/x-pack/plugins/rule_registry/server/utils/persistence_types.ts index 328e5185a2b80..f6e1ae5942b37 100644 --- a/x-pack/plugins/rule_registry/server/utils/persistence_types.ts +++ b/x-pack/plugins/rule_registry/server/utils/persistence_types.ts @@ -45,6 +45,10 @@ export type SuppressedAlertService = ( alerts: Array<{ _id: string; _source: T; + subAlerts?: Array<{ + _id: string; + _source: T; + }>; }>, suppressionWindow: string, enrichAlerts?: ( diff --git a/x-pack/plugins/security_solution/common/experimental_features.ts b/x-pack/plugins/security_solution/common/experimental_features.ts index 3697359365619..095324840fc5c 100644 --- a/x-pack/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/plugins/security_solution/common/experimental_features.ts @@ -12,6 +12,17 @@ export type ExperimentalFeatures = { [K in keyof typeof allowedExperimentalValue * This object is then used to validate and parse the value entered. */ export const allowedExperimentalValues = Object.freeze({ + /* + * Enables experimental feature flag for eql sequence alert suppression. + * + * Ticket: https://github.com/elastic/security-team/issues/9608 + * Owners: https://github.com/orgs/elastic/teams/security-detection-engine + * Added: on October 1st, 2024 in https://github.com/elastic/kibana/pull/189725 + * Turned: on (TBD) + * Expires: on (TBD) + */ + alertSuppressionForSequenceEqlRuleEnabled: true, + // FIXME:PT delete? excludePoliciesInFilterEnabled: false, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx index dd50d83ce7f09..7b056b5969799 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/index.tsx @@ -145,7 +145,6 @@ const RuleTypeEuiFormRow = styled(EuiFormRow).attrs<{ $isVisible: boolean }>(({ }, }))<{ $isVisible: boolean }>``; -// eslint-disable-next-line complexity const StepDefineRuleComponent: FC = ({ dataSourceType, defaultSavedQuery, @@ -172,7 +171,6 @@ const StepDefineRuleComponent: FC = ({ watch: ['ruleType', 'queryBar', 'machineLearningJobId'], }); - const { isSuppressionEnabled: isAlertSuppressionEnabled } = useAlertSuppression(ruleType); const [openTimelineSearch, setOpenTimelineSearch] = useState(false); const [indexModified, setIndexModified] = useState(false); const [threatIndexModified, setThreatIndexModified] = useState(false); @@ -358,10 +356,9 @@ const StepDefineRuleComponent: FC = ({ * purpose and so are treated as if the field is always selected. */ const areSuppressionFieldsSelected = isThresholdRule || Boolean(alertSuppressionFields?.length); - const areSuppressionFieldsDisabledBySequence = - isEqlRule(ruleType) && - isEqlSequenceQuery(queryBar?.query?.query as string) && - alertSuppressionFields?.length === 0; + const { isSuppressionEnabled: isAlertSuppressionEnabled } = useAlertSuppression( + isEqlSequenceQuery(queryBar?.query?.query as string) + ); /** If we don't have ML field information, users can't meaningfully interact with suppression fields */ const areSuppressionFieldsDisabledByMlFields = @@ -369,30 +366,21 @@ const StepDefineRuleComponent: FC = ({ /** Suppression fields are generally disabled if either: * - License is insufficient (i.e. less than platinum) - * - An EQL Sequence is used * - ML Field information is not available */ const areSuppressionFieldsDisabled = - !isAlertSuppressionLicenseValid || - areSuppressionFieldsDisabledBySequence || - areSuppressionFieldsDisabledByMlFields; + !isAlertSuppressionLicenseValid || areSuppressionFieldsDisabledByMlFields; const isSuppressionGroupByDisabled = (areSuppressionFieldsDisabled || isEsqlSuppressionLoading) && !areSuppressionFieldsSelected; const suppressionGroupByDisabledText = useMemo(() => { - if (areSuppressionFieldsDisabledBySequence) { - return i18n.EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP; - } else if (areSuppressionFieldsDisabledByMlFields) { + if (areSuppressionFieldsDisabledByMlFields) { return i18n.MACHINE_LEARNING_SUPPRESSION_DISABLED_LABEL; } else { return alertSuppressionUpsellingMessage; } - }, [ - alertSuppressionUpsellingMessage, - areSuppressionFieldsDisabledByMlFields, - areSuppressionFieldsDisabledBySequence, - ]); + }, [alertSuppressionUpsellingMessage, areSuppressionFieldsDisabledByMlFields]); const suppressionGroupByFields = useMemo(() => { if (isEsqlRule(ruleType)) { @@ -824,13 +812,14 @@ const StepDefineRuleReadOnlyComponent: FC = ({ }) => { const dataForDescription: Partial = getStepDataDataSource(data); const transformFields = useExperimentalFeatureFieldsTransform(); + const fieldsToDisplay = transformFields(dataForDescription); return ( diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx index f0db9f0342736..323e321eee8d9 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/schema.tsx @@ -16,8 +16,6 @@ import { customValidators, } from '../../../../common/components/threat_match/helpers'; import { - isEqlRule, - isEqlSequenceQuery, isEsqlRule, isNewTermsRule, isThreatMatchRule, @@ -44,7 +42,6 @@ import { THREAT_MATCH_INDEX_HELPER_TEXT, THREAT_MATCH_REQUIRED, THREAT_MATCH_EMPTIES, - EQL_SEQUENCE_SUPPRESSION_GROUPBY_VALIDATION_TEXT, } from './translations'; import { queryRequiredValidatorFactory } from '../../validators/query_required_validator_factory'; import { kueryValidatorFactory } from '../../validators/kuery_validator_factory'; @@ -587,7 +584,6 @@ export const schema: FormSchema = { validator: (...args: Parameters) => { const [{ formData }] = args; const needsValidation = isSuppressionRuleConfiguredWithGroupBy(formData.ruleType); - if (!needsValidation) { return; } @@ -595,25 +591,6 @@ export const schema: FormSchema = { return alertSuppressionFieldsValidatorFactory()(...args); }, }, - { - validator: ( - ...args: Parameters - ): ReturnType> | undefined => { - const [{ formData, value }] = args; - - if (!isEqlRule(formData.ruleType) || !Array.isArray(value) || value.length === 0) { - return; - } - - const query: string = formData.queryBar?.query?.query ?? ''; - - if (isEqlSequenceQuery(query)) { - return { - message: EQL_SEQUENCE_SUPPRESSION_GROUPBY_VALIDATION_TEXT, - }; - } - }, - }, ], }, [ALERT_SUPPRESSION_DURATION_FIELD_NAME]: { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx index 897331d20da73..362f586dc5abd 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/translations.tsx @@ -176,22 +176,6 @@ export const getEnableThresholdSuppressionLabel = (fields: string[] | undefined) ) ); -export const EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP = i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionDisableText', - { - defaultMessage: 'Suppression is not supported for EQL sequence queries.', - } -); - -export const EQL_SEQUENCE_SUPPRESSION_GROUPBY_VALIDATION_TEXT = i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionValidationText', - { - defaultMessage: - '{EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP} Change the EQL query to a non-sequence query, or remove the suppression fields.', - values: { EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP }, - } -); - export const MACHINE_LEARNING_SUPPRESSION_DISABLED_LABEL = i18n.translate( 'xpack.securitySolution.detectionEngine.createRule.stepDefineRule.machineLearningSuppressionDisabledLabel', { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts index c035fef5af6e4..d896fa676d31d 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_define_rule/use_experimental_feature_fields_transform.ts @@ -7,6 +7,14 @@ import { useCallback } from 'react'; import type { DefineStepRule } from '../../../../detections/pages/detection_engine/rules/types'; +import { useIsExperimentalFeatureEnabled } from '../../../../common/hooks/use_experimental_features'; +import { isEqlRule, isEqlSequenceQuery } from '../../../../../common/detection_engine/utils'; +import { + ALERT_SUPPRESSION_FIELDS_FIELD_NAME, + ALERT_SUPPRESSION_DURATION_TYPE_FIELD_NAME, + ALERT_SUPPRESSION_DURATION_FIELD_NAME, + ALERT_SUPPRESSION_MISSING_FIELDS_FIELD_NAME, +} from '../../../rule_creation/components/alert_suppression_edit'; /** * transforms DefineStepRule fields according to experimental feature flags @@ -14,9 +22,30 @@ import type { DefineStepRule } from '../../../../detections/pages/detection_engi export const useExperimentalFeatureFieldsTransform = >(): (( fields: T ) => T) => { - const transformer = useCallback((fields: T) => { - return fields; - }, []); + const isAlertSuppressionForSequenceEqlRuleEnabled = useIsExperimentalFeatureEnabled( + 'alertSuppressionForSequenceEqlRuleEnabled' + ); + const transformer = useCallback( + (fields: T) => { + const isSuppressionDisabled = + isEqlRule(fields.ruleType) && + isEqlSequenceQuery(fields.queryBar?.query?.query as string) && + !isAlertSuppressionForSequenceEqlRuleEnabled; + + // reset any alert suppression values hidden behind feature flag + if (isSuppressionDisabled) { + return { + ...fields, + [ALERT_SUPPRESSION_FIELDS_FIELD_NAME]: [], + [ALERT_SUPPRESSION_DURATION_TYPE_FIELD_NAME]: undefined, + [ALERT_SUPPRESSION_DURATION_FIELD_NAME]: undefined, + [ALERT_SUPPRESSION_MISSING_FIELDS_FIELD_NAME]: undefined, + }; + } + return fields; + }, + [isAlertSuppressionForSequenceEqlRuleEnabled] + ); return transformer; }; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx index dbc753ca33d37..0a75fa5c8f319 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx @@ -42,6 +42,7 @@ import { useUserData } from '../../../../detections/components/user_info'; import { StepPanel } from '../../../rule_creation/components/step_panel'; import { StepAboutRule } from '../../components/step_about_rule'; import { StepDefineRule } from '../../components/step_define_rule'; +import { useExperimentalFeatureFieldsTransform } from '../../components/step_define_rule/use_experimental_feature_fields_transform'; import { StepScheduleRule } from '../../components/step_schedule_rule'; import { StepRuleActions } from '../../../rule_creation/components/step_rule_actions'; import { formatRule } from '../rule_creation/helpers'; @@ -52,6 +53,7 @@ import { MaxWidthEuiFlexItem, } from '../../../../detections/pages/detection_engine/rules/helpers'; import * as ruleI18n from '../../../../detections/pages/detection_engine/rules/translations'; +import type { DefineStepRule } from '../../../../detections/pages/detection_engine/rules/types'; import { RuleStep } from '../../../../detections/pages/detection_engine/rules/types'; import * as i18n from './translations'; import { SecurityPageName } from '../../../../app/types'; @@ -368,11 +370,16 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { const { startTransaction } = useStartTransaction(); + const defineFieldsTransform = useExperimentalFeatureFieldsTransform(); + const saveChanges = useCallback(async () => { startTransaction({ name: SINGLE_RULE_ACTIONS.SAVE }); + const localDefineStepData: DefineStepRule = defineFieldsTransform({ + ...defineStepData, + }); const updatedRule = await updateRule({ ...formatRule( - defineStepData, + localDefineStepData, aboutStepData, scheduleStepData, actionsStepData, @@ -390,8 +397,9 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { }, [ aboutStepData, actionsStepData, - addSuccess, defineStepData, + defineFieldsTransform, + addSuccess, navigateToApp, rule?.exceptions_list, ruleId, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx index 70f267ac94ba4..3e08f4ce3acc8 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx @@ -843,7 +843,7 @@ export const RuleDefinitionSection = ({ ruleType: rule.type, }); - const { isSuppressionEnabled } = useAlertSuppression(rule.type); + const { isSuppressionEnabled } = useAlertSuppression(); const definitionSectionListItems = prepareDefinitionSectionListItems( rule, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx index 27615ef2d489a..7877a86385cde 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.test.tsx @@ -6,37 +6,23 @@ */ import { renderHook } from '@testing-library/react'; -import type { Type } from '@kbn/securitysolution-io-ts-alerting-types'; +import * as useIsExperimentalFeatureEnabledMock from '../../../common/hooks/use_experimental_features'; import { useAlertSuppression } from './use_alert_suppression'; describe('useAlertSuppression', () => { - ( - [ - 'new_terms', - 'threat_match', - 'saved_query', - 'query', - 'threshold', - 'eql', - 'esql', - 'machine_learning', - ] as Type[] - ).forEach((ruleType) => { - it(`should return the isSuppressionEnabled true for ${ruleType} rule type that exists in SUPPRESSIBLE_ALERT_RULES`, () => { - const { result } = renderHook(() => useAlertSuppression(ruleType)); - - expect(result.current.isSuppressionEnabled).toBe(true); - }); + jest + .spyOn(useIsExperimentalFeatureEnabledMock, 'useIsExperimentalFeatureEnabled') + .mockReturnValue(false); + it(`should return the isSuppressionEnabled true if query for all rule types is not an eql sequence query`, () => { + const { result } = renderHook(() => useAlertSuppression()); + expect(result.current.isSuppressionEnabled).toBe(true); }); - it('should return false if rule type is undefined', () => { - const { result } = renderHook(() => useAlertSuppression(undefined)); - expect(result.current.isSuppressionEnabled).toBe(false); - }); - - it('should return false if rule type is not a suppressible rule', () => { - const { result } = renderHook(() => useAlertSuppression('OTHER_RULE_TYPE' as Type)); - + jest + .spyOn(useIsExperimentalFeatureEnabledMock, 'useIsExperimentalFeatureEnabled') + .mockReturnValue(false); + it('should return isSuppressionEnabled false for eql sequence query when feature flag is disabled', () => { + const { result } = renderHook(() => useAlertSuppression(true)); expect(result.current.isSuppressionEnabled).toBe(false); }); }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx index 6e1b2a4d6163f..dae422a8e81c5 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/logic/use_alert_suppression.tsx @@ -5,21 +5,24 @@ * 2.0. */ import { useCallback } from 'react'; -import type { Type } from '@kbn/securitysolution-io-ts-alerting-types'; -import { isSuppressibleAlertRule } from '../../../../common/detection_engine/utils'; +import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; export interface UseAlertSuppressionReturn { isSuppressionEnabled: boolean; } -export const useAlertSuppression = (ruleType: Type | undefined): UseAlertSuppressionReturn => { +export const useAlertSuppression = (isEqlSequenceQuery = false): UseAlertSuppressionReturn => { + const isAlertSuppressionForSequenceEQLRuleEnabled = useIsExperimentalFeatureEnabled( + 'alertSuppressionForSequenceEqlRuleEnabled' + ); + const isSuppressionEnabledForRuleType = useCallback(() => { - if (!ruleType) { - return false; + if (isEqlSequenceQuery) { + return isAlertSuppressionForSequenceEQLRuleEnabled; } - return isSuppressibleAlertRule(ruleType); - }, [ruleType]); + return true; + }, [isAlertSuppressionForSequenceEQLRuleEnabled, isEqlSequenceQuery]); return { isSuppressionEnabled: isSuppressionEnabledForRuleType(), diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.test.ts index 84349e9142e22..a2b0d4f21fc78 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.test.ts @@ -43,19 +43,19 @@ describe('buildAlert', () => { sampleDocNoSortId('619389b2-b077-400e-b40b-abde20d675d3'), ], }; - const alertGroup = buildAlertGroupFromSequence( - ruleExecutionLoggerMock, - eqlSequence, + const { shellAlert, buildingBlocks } = buildAlertGroupFromSequence({ + ruleExecutionLogger: ruleExecutionLoggerMock, + sequence: eqlSequence, completeRule, - 'allFields', - SPACE_ID, - jest.fn(), - completeRule.ruleParams.index as string[], - undefined, - PUBLIC_BASE_URL - ); - expect(alertGroup.length).toEqual(3); - expect(alertGroup[0]).toEqual( + mergeStrategy: 'allFields', + spaceId: SPACE_ID, + buildReasonMessage: jest.fn(), + indicesToQuery: completeRule.ruleParams.index as string[], + alertTimestampOverride: undefined, + publicBaseUrl: PUBLIC_BASE_URL, + }); + expect(buildingBlocks.length).toEqual(2); + expect(buildingBlocks[0]).toEqual( expect.objectContaining({ _source: expect.objectContaining({ [ALERT_ANCESTORS]: [ @@ -72,10 +72,10 @@ describe('buildAlert', () => { }), }) ); - expect(alertGroup[0]._source[ALERT_URL]).toContain( + expect(buildingBlocks[0]?._source?.[ALERT_URL]).toContain( 'http://testkibanabaseurl.com/s/space/app/security/alerts/redirect/f2db3574eaf8450e3f4d1cf4f416d70b110b035ae0a7a00026242df07f0a6c90?index=.alerts-security.alerts-space' ); - expect(alertGroup[1]).toEqual( + expect(buildingBlocks[1]).toEqual( expect.objectContaining({ _source: expect.objectContaining({ [ALERT_ANCESTORS]: [ @@ -92,10 +92,10 @@ describe('buildAlert', () => { }), }) ); - expect(alertGroup[1]._source[ALERT_URL]).toContain( + expect(buildingBlocks[1]._source[ALERT_URL]).toContain( 'http://testkibanabaseurl.com/s/space/app/security/alerts/redirect/1dbc416333244efbda833832eb83f13ea5d980a33c2f981ca8d2b35d82a045da?index=.alerts-security.alerts-space' ); - expect(alertGroup[2]).toEqual( + expect(shellAlert).toEqual( expect.objectContaining({ _source: expect.objectContaining({ [ALERT_ANCESTORS]: expect.arrayContaining([ @@ -113,14 +113,14 @@ describe('buildAlert', () => { }, { depth: 1, - id: alertGroup[0]._id, + id: buildingBlocks[0]?._id, index: '', rule: sampleRuleGuid, type: 'signal', }, { depth: 1, - id: alertGroup[1]._id, + id: buildingBlocks[0]._id, index: '', rule: sampleRuleGuid, type: 'signal', @@ -132,10 +132,10 @@ describe('buildAlert', () => { }), }) ); - expect(alertGroup[2]._source[ALERT_URL]).toContain( + expect(shellAlert?._source[ALERT_URL]).toContain( 'http://testkibanabaseurl.com/s/space/app/security/alerts/redirect/1b7d06954e74257140f3bf73f139078483f9658fe829fd806cc307fc0388fb23?index=.alerts-security.alerts-space' ); - const groupIds = alertGroup.map((alert) => alert._source[ALERT_GROUP_ID]); + const groupIds = buildingBlocks.map((alert) => alert?._source?.[ALERT_GROUP_ID]); for (const groupId of groupIds) { expect(groupId).toEqual(groupIds[0]); } diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts index 185aa1236a234..2e0948b1af4d9 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts @@ -5,6 +5,13 @@ * 2.0. */ +import type { + ALERT_SUPPRESSION_DOCS_COUNT, + ALERT_INSTANCE_ID, + ALERT_SUPPRESSION_TERMS, + ALERT_SUPPRESSION_START, + ALERT_SUPPRESSION_END, +} from '@kbn/rule-data-utils'; import { ALERT_URL, ALERT_UUID } from '@kbn/rule-data-utils'; import { intersection as lodashIntersection, isArray } from 'lodash'; @@ -30,6 +37,35 @@ import type { EqlShellFieldsLatest, WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; +import type { SuppressionTerm } from '../utils'; + +export interface ExtraFieldsForShellAlert { + [ALERT_INSTANCE_ID]: string; + [ALERT_SUPPRESSION_TERMS]: SuppressionTerm[]; + [ALERT_SUPPRESSION_START]: Date; + [ALERT_SUPPRESSION_END]: Date; + [ALERT_SUPPRESSION_DOCS_COUNT]: number; +} + +export interface BuildAlertGroupFromSequence { + ruleExecutionLogger: IRuleExecutionLogForExecutors; + sequence: EqlSequence; + completeRule: CompleteRule; + mergeStrategy: ConfigType['alertMergeStrategy']; + spaceId: string | null | undefined; + buildReasonMessage: BuildReasonMessage; + indicesToQuery: string[]; + alertTimestampOverride: Date | undefined; + applyOverrides?: boolean; + publicBaseUrl?: string; + intendedTimestamp?: Date; +} + +// eql shell alerts can have a subAlerts property +// when suppression is used in EQL sequence queries +export type WrappedEqlShellOptionalSubAlertsType = WrappedFieldsLatest & { + subAlerts?: Array>; +}; /** * Takes N raw documents from ES that form a sequence and builds them into N+1 signals ready to be indexed - @@ -38,25 +74,30 @@ import type { * @param sequence The raw ES documents that make up the sequence * @param completeRule object representing the rule that found the sequence */ -export const buildAlertGroupFromSequence = ( - ruleExecutionLogger: IRuleExecutionLogForExecutors, - sequence: EqlSequence, - completeRule: CompleteRule, - mergeStrategy: ConfigType['alertMergeStrategy'], - spaceId: string | null | undefined, - buildReasonMessage: BuildReasonMessage, - indicesToQuery: string[], - alertTimestampOverride: Date | undefined, - publicBaseUrl?: string, - intendedTimestamp?: Date -): Array> => { +export const buildAlertGroupFromSequence = ({ + ruleExecutionLogger, + sequence, + completeRule, + mergeStrategy, + spaceId, + buildReasonMessage, + indicesToQuery, + alertTimestampOverride, + publicBaseUrl, + intendedTimestamp, +}: BuildAlertGroupFromSequence): { + shellAlert: WrappedFieldsLatest | undefined; + buildingBlocks: Array>; +} => { const ancestors: Ancestor[] = sequence.events.flatMap((event) => buildAncestors(event)); if (ancestors.some((ancestor) => ancestor?.rule === completeRule.alertId)) { - return []; + return { shellAlert: undefined, buildingBlocks: [] }; } - // The "building block" alerts start out as regular BaseFields. We'll add the group ID and index fields - // after creating the shell alert later on, since that's when the group ID is determined. + // The "building block" alerts start out as regular BaseFields. + // We'll add the group ID and index fields + // after creating the shell alert later on + // since that's when the group ID is determined. let baseAlerts: BaseFieldsLatest[] = []; try { baseAlerts = sequence.events.map((event) => @@ -79,7 +120,7 @@ export const buildAlertGroupFromSequence = ( ); } catch (error) { ruleExecutionLogger.error(error); - return []; + return { shellAlert: undefined, buildingBlocks: [] }; } // The ID of each building block alert depends on all of the other building blocks as well, @@ -99,16 +140,16 @@ export const buildAlertGroupFromSequence = ( // Now that we have an array of building blocks for the events in the sequence, // we can build the signal that links the building blocks together // and also insert the group id (which is also the "shell" signal _id) in each building block - const shellAlert = buildAlertRoot( - wrappedBaseFields, + const shellAlert = buildAlertRoot({ + wrappedBuildingBlocks: wrappedBaseFields, completeRule, spaceId, buildReasonMessage, indicesToQuery, alertTimestampOverride, publicBaseUrl, - intendedTimestamp - ); + intendedTimestamp, + }); const sequenceAlert: WrappedFieldsLatest = { _id: shellAlert[ALERT_UUID], _index: '', @@ -139,19 +180,30 @@ export const buildAlertGroupFromSequence = ( } ); - return [...wrappedBuildingBlocks, sequenceAlert]; + return { shellAlert: sequenceAlert, buildingBlocks: wrappedBuildingBlocks }; }; -export const buildAlertRoot = ( - wrappedBuildingBlocks: Array>, - completeRule: CompleteRule, - spaceId: string | null | undefined, - buildReasonMessage: BuildReasonMessage, - indicesToQuery: string[], - alertTimestampOverride: Date | undefined, - publicBaseUrl?: string, - intendedTimestamp?: Date -): EqlShellFieldsLatest => { +export interface BuildAlertRootParams { + wrappedBuildingBlocks: Array>; + completeRule: CompleteRule; + spaceId: string | null | undefined; + buildReasonMessage: BuildReasonMessage; + indicesToQuery: string[]; + alertTimestampOverride: Date | undefined; + publicBaseUrl?: string; + intendedTimestamp?: Date; +} + +export const buildAlertRoot = ({ + wrappedBuildingBlocks, + completeRule, + spaceId, + buildReasonMessage, + indicesToQuery, + alertTimestampOverride, + publicBaseUrl, + intendedTimestamp, +}: BuildAlertRootParams): EqlShellFieldsLatest => { const mergedAlerts = objectArrayIntersection(wrappedBuildingBlocks.map((alert) => alert._source)); const reason = buildReasonMessage({ name: completeRule.ruleConfig.name, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/create_eql_alert_type.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/create_eql_alert_type.ts index 2bdf0d913d156..79bc9c9849da1 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/create_eql_alert_type.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/create_eql_alert_type.ts @@ -13,9 +13,10 @@ import { EqlRuleParams } from '../../rule_schema'; import { eqlExecutor } from './eql'; import type { CreateRuleOptions, SecurityAlertType, SignalSourceHit } from '../types'; import { validateIndexPatterns } from '../utils'; -import type { BuildReasonMessage } from '../utils/reason_formatters'; -import { wrapSuppressedAlerts } from '../utils/wrap_suppressed_alerts'; import { getIsAlertSuppressionActive } from '../utils/get_is_alert_suppression_active'; +import type { SharedParams } from '../utils/utils'; +import { wrapSuppressedAlerts } from '../utils/wrap_suppressed_alerts'; +import type { BuildReasonMessage } from '../utils/reason_formatters'; export const createEqlAlertType = ( createOptions: CreateRuleOptions @@ -86,6 +87,24 @@ export const createEqlAlertType = ( spaceId, } = execOptions; + const isAlertSuppressionActive = await getIsAlertSuppressionActive({ + alertSuppression: completeRule.ruleParams.alertSuppression, + licensing, + }); + + const sharedParams: SharedParams = { + spaceId, + completeRule, + mergeStrategy, + indicesToQuery: inputIndex, + alertTimestampOverride, + ruleExecutionLogger, + publicBaseUrl, + primaryTimestamp, + secondaryTimestamp, + intendedTimestamp, + }; + const wrapSuppressedHits = ( events: SignalSourceHit[], buildReasonMessage: BuildReasonMessage @@ -104,10 +123,7 @@ export const createEqlAlertType = ( secondaryTimestamp, intendedTimestamp, }); - const isNonSeqAlertSuppressionActive = await getIsAlertSuppressionActive({ - alertSuppression: completeRule.ruleParams.alertSuppression, - licensing, - }); + const { result, loggedRequests } = await eqlExecutor({ completeRule, tuple, @@ -124,9 +140,10 @@ export const createEqlAlertType = ( exceptionFilter, unprocessedExceptions, wrapSuppressedHits, + sharedParams, alertTimestampOverride, alertWithSuppression, - isAlertSuppressionActive: isNonSeqAlertSuppressionActive, + isAlertSuppressionActive, experimentalFeatures, state, scheduleNotificationResponseActionsService, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.test.ts index 4f5aa7d322c9e..f1fabcfd0f96b 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.test.ts @@ -18,6 +18,7 @@ import { getCompleteRuleMock, getEqlRuleParams } from '../../rule_schema/mocks'; import { ruleExecutionLogMock } from '../../rule_monitoring/mocks'; import { eqlExecutor } from './eql'; import { getDataTierFilter } from '../utils/get_data_tier_filter'; +import type { SharedParams } from '../utils/utils'; jest.mock('../../routes/index/get_index_version'); jest.mock('../utils/get_data_tier_filter', () => ({ getDataTierFilter: jest.fn() })); @@ -38,6 +39,21 @@ describe('eql_executor', () => { }; const mockExperimentalFeatures = {} as ExperimentalFeatures; const mockScheduleNotificationResponseActionsService = jest.fn(); + const ruleExecutionLoggerMock = ruleExecutionLogMock.forExecutors.create(); + const SPACE_ID = 'space'; + const PUBLIC_BASE_URL = 'http://testkibanabaseurl.com'; + + const sharedParams: SharedParams = { + ruleExecutionLogger: ruleExecutionLoggerMock, + completeRule: eqlCompleteRule, + mergeStrategy: 'allFields', + spaceId: SPACE_ID, + indicesToQuery: eqlCompleteRule.ruleParams.index as string[], + alertTimestampOverride: undefined, + publicBaseUrl: PUBLIC_BASE_URL, + intendedTimestamp: undefined, + primaryTimestamp: new Date().toISOString(), + }; beforeEach(() => { jest.clearAllMocks(); @@ -69,6 +85,7 @@ describe('eql_executor', () => { exceptionFilter: undefined, unprocessedExceptions: [getExceptionListItemSchemaMock()], wrapSuppressedHits: jest.fn(), + sharedParams, alertTimestampOverride: undefined, alertWithSuppression: jest.fn(), isAlertSuppressionActive: false, @@ -82,56 +99,6 @@ describe('eql_executor', () => { }`, ]); }); - - it('warns when a sequence query is used with alert suppression', async () => { - // mock a sequences response - alertServices.scopedClusterClient.asCurrentUser.eql.search.mockReset().mockResolvedValue({ - hits: { - total: { relation: 'eq', value: 10 }, - sequences: [], - }, - }); - - const ruleWithSequenceAndSuppression = getCompleteRuleMock({ - ...params, - query: 'sequence [any where true] [any where true]', - alertSuppression: { - groupBy: ['event.type'], - duration: { - value: 10, - unit: 'm', - }, - missingFieldsStrategy: 'suppress', - }, - }); - - const { result } = await eqlExecutor({ - inputIndex: DEFAULT_INDEX_PATTERN, - runtimeMappings: {}, - completeRule: ruleWithSequenceAndSuppression, - tuple, - ruleExecutionLogger, - services: alertServices, - version, - bulkCreate: jest.fn(), - wrapHits: jest.fn(), - wrapSequences: jest.fn(), - primaryTimestamp: '@timestamp', - exceptionFilter: undefined, - unprocessedExceptions: [], - wrapSuppressedHits: jest.fn(), - alertTimestampOverride: undefined, - alertWithSuppression: jest.fn(), - isAlertSuppressionActive: true, - experimentalFeatures: mockExperimentalFeatures, - scheduleNotificationResponseActionsService: - mockScheduleNotificationResponseActionsService, - }); - - expect(result.warningMessages).toContain( - 'Suppression is not supported for EQL sequence queries. The rule will proceed without suppression.' - ); - }); }); it('should classify EQL verification exceptions as "user errors" when reporting to the framework', async () => { @@ -155,6 +122,7 @@ describe('eql_executor', () => { exceptionFilter: undefined, unprocessedExceptions: [], wrapSuppressedHits: jest.fn(), + sharedParams, alertTimestampOverride: undefined, alertWithSuppression: jest.fn(), isAlertSuppressionActive: true, @@ -180,6 +148,7 @@ describe('eql_executor', () => { exceptionFilter: undefined, unprocessedExceptions: [], wrapSuppressedHits: jest.fn(), + sharedParams, alertTimestampOverride: undefined, alertWithSuppression: jest.fn(), isAlertSuppressionActive: false, @@ -220,6 +189,7 @@ describe('eql_executor', () => { exceptionFilter: undefined, unprocessedExceptions: [], wrapSuppressedHits: jest.fn(), + sharedParams, alertTimestampOverride: undefined, alertWithSuppression: jest.fn(), isAlertSuppressionActive: true, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.ts index cd8b76a93d23b..756f220f06d55 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/eql.ts @@ -5,6 +5,7 @@ * 2.0. */ import { performance } from 'perf_hooks'; + import type { SuppressedAlertService } from '@kbn/rule-registry-plugin/server'; import type { ExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; import type { @@ -25,9 +26,10 @@ import type { RuleRangeTuple, SearchAfterAndBulkCreateReturnType, SignalSource, - WrapSuppressedHits, CreateRuleOptions, + WrapSuppressedHits, } from '../types'; +import type { SharedParams } from '../utils/utils'; import { addToSearchAfterReturn, createSearchAfterReturnType, @@ -44,11 +46,15 @@ import type { WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; import type { IRuleExecutionLogForExecutors } from '../../rule_monitoring'; -import { bulkCreateSuppressedAlertsInMemory } from '../utils/bulk_create_suppressed_alerts_in_memory'; +import { + bulkCreateSuppressedAlertsInMemory, + bulkCreateSuppressedSequencesInMemory, +} from '../utils/bulk_create_suppressed_alerts_in_memory'; import { getDataTierFilter } from '../utils/get_data_tier_filter'; import type { RulePreviewLoggedRequest } from '../../../../../common/api/detection_engine/rule_preview/rule_preview.gen'; import { logEqlRequest } from '../utils/logged_requests'; import * as i18n from '../translations'; +import { alertSuppressionTypeGuard } from '../utils/get_is_alert_suppression_active'; interface EqlExecutorParams { inputIndex: string[]; @@ -60,6 +66,7 @@ interface EqlExecutorParams { version: string; bulkCreate: BulkCreate; wrapHits: WrapHits; + sharedParams: SharedParams; wrapSequences: WrapSequences; primaryTimestamp: string; secondaryTimestamp?: string; @@ -90,6 +97,7 @@ export const eqlExecutor = async ({ exceptionFilter, unprocessedExceptions, wrapSuppressedHits, + sharedParams, alertTimestampOverride, alertWithSuppression, isAlertSuppressionActive, @@ -104,6 +112,7 @@ export const eqlExecutor = async ({ const isLoggedRequestsEnabled = state?.isLoggedRequestsEnabled ?? false; const loggedRequests: RulePreviewLoggedRequest[] = []; + // eslint-disable-next-line complexity return withSecuritySpan('eqlExecutor', async () => { const result = createSearchAfterReturnType(); @@ -179,12 +188,28 @@ export const eqlExecutor = async ({ newSignals = wrapHits(events, buildReasonMessageForEqlAlert); } } else if (sequences) { - if (isAlertSuppressionActive) { - result.warningMessages.push( - 'Suppression is not supported for EQL sequence queries. The rule will proceed without suppression.' - ); + if ( + isAlertSuppressionActive && + experimentalFeatures.alertSuppressionForSequenceEqlRuleEnabled && + alertSuppressionTypeGuard(completeRule.ruleParams.alertSuppression) + ) { + await bulkCreateSuppressedSequencesInMemory({ + sequences, + toReturn: result, + bulkCreate, + services, + buildReasonMessage: buildReasonMessageForEqlAlert, + ruleExecutionLogger, + tuple, + alertSuppression: completeRule.ruleParams.alertSuppression, + sharedParams, + alertTimestampOverride, + alertWithSuppression, + experimentalFeatures, + }); + } else { + newSignals = wrapSequences(sequences, buildReasonMessageForEqlAlert); } - newSignals = wrapSequences(sequences, buildReasonMessageForEqlAlert); } else { throw new Error( 'eql query response should have either `sequences` or `events` but had neither' diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/wrap_sequences_factory.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/wrap_sequences_factory.ts index 39f9df366627e..d7ce37dd1feb0 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/wrap_sequences_factory.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/wrap_sequences_factory.ts @@ -11,7 +11,8 @@ import type { ConfigType } from '../../../../config'; import type { CompleteRule, RuleParams } from '../../rule_schema'; import type { IRuleExecutionLogForExecutors } from '../../rule_monitoring'; import type { - BaseFieldsLatest, + EqlBuildingBlockFieldsLatest, + EqlShellFieldsLatest, WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; @@ -38,21 +39,27 @@ export const wrapSequencesFactory = intendedTimestamp: Date | undefined; }): WrapSequences => (sequences, buildReasonMessage) => - sequences.reduce( - (acc: Array>, sequence) => [ - ...acc, - ...buildAlertGroupFromSequence( - ruleExecutionLogger, - sequence, - completeRule, - mergeStrategy, - spaceId, - buildReasonMessage, - indicesToQuery, - alertTimestampOverride, - publicBaseUrl, - intendedTimestamp - ), - ], - [] - ); + sequences.reduce< + Array< + | WrappedFieldsLatest + | WrappedFieldsLatest + > + >((acc, sequence) => { + const { shellAlert, buildingBlocks } = buildAlertGroupFromSequence({ + ruleExecutionLogger, + sequence, + completeRule, + mergeStrategy, + spaceId, + buildReasonMessage, + indicesToQuery, + alertTimestampOverride, + publicBaseUrl, + intendedTimestamp, + }); + if (shellAlert) { + acc.push(shellAlert, ...buildingBlocks); + return acc; + } + return acc; + }, []); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts index b2d01e4d5ee7a..fe72aa566583a 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/esql/wrap_suppressed_esql_alerts.ts @@ -61,7 +61,7 @@ export const wrapSuppressedEsqlAlerts = ({ const suppressionTerms = getSuppressionTerms({ alertSuppression: completeRule?.ruleParams?.alertSuppression, - fields: combinedFields, + input: combinedFields, }); const id = generateAlertId({ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/wrap_suppressed_new_terms_alerts.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/wrap_suppressed_new_terms_alerts.ts index fa3781b2a2e63..dc9a322301126 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/wrap_suppressed_new_terms_alerts.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/new_terms/wrap_suppressed_new_terms_alerts.ts @@ -58,7 +58,7 @@ export const wrapSuppressedNewTermsAlerts = ({ const suppressionTerms = getSuppressionTerms({ alertSuppression: completeRule?.ruleParams?.alertSuppression, - fields: event.fields, + input: event.fields, }); const instanceId = objectHash([suppressionTerms, completeRule.alertId, spaceId]); diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts index 8c235c5e8f238..106a7589a2826 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/query/query.ts @@ -65,6 +65,7 @@ export const queryExecutor = async ({ const hasPlatinumLicense = license.hasAtLeast('platinum'); const result = + // TODO: replace this with getIsAlertSuppressionActive function ruleParams.alertSuppression?.groupBy != null && hasPlatinumLicense ? await groupAndBulkCreate({ runOpts, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts index c1e8165fe3aed..94aa55e6b0dd5 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/types.ts @@ -52,6 +52,8 @@ import type { BuildReasonMessage } from './utils/reason_formatters'; import type { BaseFieldsLatest, DetectionAlert, + EqlBuildingBlockFieldsLatest, + EqlShellFieldsLatest, WrappedFieldsLatest, } from '../../../../common/api/detection_engine/model/alerts'; import type { @@ -354,7 +356,9 @@ export type WrapSuppressedHits = ( export type WrapSequences = ( sequences: Array>, buildReasonMessage: BuildReasonMessage -) => Array>; +) => Array< + WrappedFieldsLatest | WrappedFieldsLatest +>; export type RuleServices = RuleExecutorServices< AlertInstanceState, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts index 030cb213d94dd..291b5cfa0d2f6 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_suppressed_alerts_in_memory.ts @@ -7,14 +7,18 @@ import type { SuppressedAlertService } from '@kbn/rule-registry-plugin/server'; import type { SuppressionFieldsLatest } from '@kbn/rule-registry-plugin/common/schemas'; +import type { EqlHitsSequence } from '@elastic/elasticsearch/lib/api/types'; + import type { SearchAfterAndBulkCreateParams, SearchAfterAndBulkCreateReturnType, WrapSuppressedHits, SignalSourceHit, + SignalSource, } from '../types'; import { MAX_SIGNALS_SUPPRESSION_MULTIPLIER } from '../constants'; -import { addToSearchAfterReturn } from './utils'; +import type { SharedParams } from './utils'; +import { addToSearchAfterReturn, buildShellAlertSuppressionTermsAndFields } from './utils'; import type { AlertSuppressionCamel } from '../../../../../common/api/detection_engine/model/rule_schema'; import { DEFAULT_SUPPRESSION_MISSING_FIELDS_STRATEGY } from '../../../../../common/detection_engine/constants'; import { partitionMissingFieldsEvents } from './partition_missing_fields_events'; @@ -25,8 +29,12 @@ import type { ExperimentalFeatures } from '../../../../../common'; import type { BaseFieldsLatest, + EqlBuildingBlockFieldsLatest, + EqlShellFieldsLatest, WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; +import { robustGet } from './source_fields_merging/utils/robust_field_access'; +import { buildAlertGroupFromSequence } from '../eql/build_alert_group_from_sequence'; interface SearchAfterAndBulkCreateSuppressedAlertsParams extends SearchAfterAndBulkCreateParams { wrapSuppressedHits: WrapSuppressedHits; @@ -54,9 +62,31 @@ export interface BulkCreateSuppressedAlertsParams mergeSourceAndFields?: boolean; maxNumberOfAlertsMultiplier?: number; } + +export interface BulkCreateSuppressedSequencesParams + extends Pick< + SearchAfterAndBulkCreateSuppressedAlertsParams, + | 'bulkCreate' + | 'services' + | 'buildReasonMessage' + | 'ruleExecutionLogger' + | 'tuple' + | 'alertSuppression' + | 'alertWithSuppression' + | 'alertTimestampOverride' + > { + sequences: Array>; + buildingBlockAlerts?: Array>; + toReturn: SearchAfterAndBulkCreateReturnType; + experimentalFeatures: ExperimentalFeatures; + maxNumberOfAlertsMultiplier?: number; + sharedParams: SharedParams; + alertSuppression: AlertSuppressionCamel; +} /** * wraps, bulk create and suppress alerts in memory, also takes care of missing fields logic. - * If parameter alertSuppression.missingFieldsStrategy configured not to be suppressed, regular alerts will be created for such events without suppression + * If parameter alertSuppression.missingFieldsStrategy configured not to be suppressed, + * regular alerts will be created for such events without suppression */ export const bulkCreateSuppressedAlertsInMemory = async ({ enrichedEvents, @@ -112,6 +142,90 @@ export const bulkCreateSuppressedAlertsInMemory = async ({ }); }; +/** + * wraps, bulk create and suppress alerts in memory, also takes care of missing fields logic. + * If parameter alertSuppression.missingFieldsStrategy configured not to be suppressed, + * regular alerts will be created for such events without suppression + */ +export const bulkCreateSuppressedSequencesInMemory = async ({ + sequences, + toReturn, + bulkCreate, + services, + ruleExecutionLogger, + tuple, + alertSuppression, + buildReasonMessage, + sharedParams, + alertWithSuppression, + alertTimestampOverride, + experimentalFeatures, + maxNumberOfAlertsMultiplier, +}: BulkCreateSuppressedSequencesParams) => { + const suppressOnMissingFields = + (alertSuppression.missingFieldsStrategy ?? DEFAULT_SUPPRESSION_MISSING_FIELDS_STRATEGY) === + AlertSuppressionMissingFieldsStrategyEnum.suppress; + + const suppressibleWrappedSequences: Array< + WrappedFieldsLatest & { + subAlerts: Array>; + } + > = []; + const unsuppressibleWrappedDocs: Array> = []; + + sequences.forEach((sequence) => { + const alertGroupFromSequence = buildAlertGroupFromSequence({ + sequence, + applyOverrides: true, + buildReasonMessage, + ...sharedParams, + }); + const shellAlert = alertGroupFromSequence.shellAlert; + const buildingBlocks = alertGroupFromSequence.buildingBlocks; + if (shellAlert) { + if (!suppressOnMissingFields) { + // does the shell alert have all the suppression fields? + const hasEverySuppressionField = alertSuppression.groupBy.every( + (suppressionPath) => + robustGet({ key: suppressionPath, document: shellAlert._source }) != null + ); + if (!hasEverySuppressionField) { + unsuppressibleWrappedDocs.push(shellAlert, ...buildingBlocks); + } else { + const wrappedWithSuppressionTerms = buildShellAlertSuppressionTermsAndFields({ + shellAlert, + buildingBlockAlerts: buildingBlocks, + ...sharedParams, + }); + suppressibleWrappedSequences.push(wrappedWithSuppressionTerms); + } + } else { + const wrappedWithSuppressionTerms = buildShellAlertSuppressionTermsAndFields({ + shellAlert, + buildingBlockAlerts: buildingBlocks, + ...sharedParams, + }); + suppressibleWrappedSequences.push(wrappedWithSuppressionTerms); + } + } + }); + + return executeBulkCreateAlerts({ + suppressibleWrappedDocs: suppressibleWrappedSequences, + unsuppressibleWrappedDocs, + toReturn, + bulkCreate, + services, + ruleExecutionLogger, + tuple, + alertSuppression, + alertWithSuppression, + alertTimestampOverride, + experimentalFeatures, + maxNumberOfAlertsMultiplier, + }); +}; + export interface ExecuteBulkCreateAlertsParams extends Pick< SearchAfterAndBulkCreateSuppressedAlertsParams, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_with_suppression.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_with_suppression.ts index 7decfd8294913..6c7228d6b78af 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_with_suppression.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/bulk_create_with_suppression.ts @@ -53,7 +53,7 @@ export const bulkCreateWithSuppression = async < }: { alertWithSuppression: SuppressedAlertService; ruleExecutionLogger: IRuleExecutionLogForExecutors; - wrappedDocs: Array>; + wrappedDocs: Array & { subAlerts?: Array> }>; services: RuleServices; suppressionWindow: string; alertTimestampOverride: Date | undefined; @@ -97,13 +97,19 @@ export const bulkCreateWithSuppression = async < } }; + const alerts = wrappedDocs.map((doc) => ({ + _id: doc._id, + // `fields` should have already been merged into `doc._source` + _source: doc._source, + subAlerts: + doc?.subAlerts != null + ? doc?.subAlerts?.map((subAlert) => ({ _id: subAlert._id, _source: subAlert._source })) + : undefined, + })); + const { createdAlerts, errors, suppressedAlerts, alertsWereTruncated } = await alertWithSuppression( - wrappedDocs.map((doc) => ({ - _id: doc._id, - // `fields` should have already been merged into `doc._source` - _source: doc._source, - })), + alerts, suppressionWindow, enrichAlertsWrapper, alertTimestampOverride, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts index 5ab06db3043af..263bd88bc1b0e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/get_is_alert_suppression_active.ts @@ -17,6 +17,10 @@ interface GetIsAlertSuppressionActiveParams { licensing: LicensingPluginSetup; } +export const alertSuppressionTypeGuard = ( + alertSuppression: AlertSuppressionCamel | undefined +): alertSuppression is AlertSuppressionCamel => Boolean(alertSuppression?.groupBy?.length); + /** * checks if alert suppression is active: * - rule should have alert suppression config @@ -32,7 +36,7 @@ export const getIsAlertSuppressionActive = async ({ return false; } - const isAlertSuppressionConfigured = Boolean(alertSuppression?.groupBy?.length); + const isAlertSuppressionConfigured = alertSuppressionTypeGuard(alertSuppression); if (!isAlertSuppressionConfigured) { return false; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/robust_field_access.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/robust_field_access.test.ts index 646068b59eec7..1b4b9e7d49174 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/robust_field_access.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/source_fields_merging/utils/robust_field_access.test.ts @@ -34,6 +34,9 @@ describe('robust field access', () => { it('returns undefined if the key does not exist', () => { expect(robustGet({ key: 'a.b.c', document: { a: { b: 'my-value' } } })).toEqual(undefined); }); + it('returns an array if the key exists', () => { + expect(robustGet({ key: 'a.b', document: { a: { b: ['my-value'] } } })).toEqual(['my-value']); + }); }); describe('set', () => { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.test.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.test.ts index 745dd08977520..46aa25d08d44a 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.test.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.test.ts @@ -85,17 +85,37 @@ describe('getSuppressionTerms', () => { alertSuppression: { groupBy: ['host.name'], }, - fields: { 'host.name': 'localhost-1' }, + input: { 'host.name': 'localhost-1' }, }) ).toEqual([{ field: 'host.name', value: 'localhost-1' }]); }); + it('should return suppression terms when using source', () => { + expect( + getSuppressionTerms({ + alertSuppression: { + groupBy: ['host.name'], + }, + input: { host: { name: 'localhost-1' } }, + }) + ).toEqual([{ field: 'host.name', value: 'localhost-1' }]); + }); + it('should return suppression terms when using source and mixed notation', () => { + expect( + getSuppressionTerms({ + alertSuppression: { + groupBy: ['host.something.name'], + }, + input: { 'host.something': { name: 'localhost-1' } }, + }) + ).toEqual([{ field: 'host.something.name', value: 'localhost-1' }]); + }); it('should return suppression terms array when fields do not have matches', () => { expect( getSuppressionTerms({ alertSuppression: { groupBy: ['host.name'], }, - fields: { 'host.ip': '127.0.0.1' }, + input: { 'host.ip': '127.0.0.1' }, }) ).toEqual([{ field: 'host.name', value: null }]); }); @@ -105,7 +125,7 @@ describe('getSuppressionTerms', () => { alertSuppression: { groupBy: ['host.name'], }, - fields: { 'host.name': ['localhost-2', 'localhost-1'] }, + input: { 'host.name': ['localhost-2', 'localhost-1'] }, }) ).toEqual([{ field: 'host.name', value: ['localhost-1', 'localhost-2'] }]); }); @@ -115,7 +135,7 @@ describe('getSuppressionTerms', () => { alertSuppression: { groupBy: ['host.name', 'host.ip'], }, - fields: { 'host.name': ['localhost-1'], 'agent.name': 'test', 'host.ip': '127.0.0.1' }, + input: { 'host.name': ['localhost-1'], 'agent.name': 'test', 'host.ip': '127.0.0.1' }, }) ).toEqual([ { field: 'host.name', value: ['localhost-1'] }, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts index 44febba73e68e..0e066069665dd 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/suppression_utils.ts @@ -5,7 +5,6 @@ * 2.0. */ -import pick from 'lodash/pick'; import get from 'lodash/get'; import sortBy from 'lodash/sortBy'; @@ -17,10 +16,13 @@ import { ALERT_SUPPRESSION_END, } from '@kbn/rule-data-utils'; import type { AlertSuppressionCamel } from '../../../../../common/api/detection_engine/model/rule_schema'; +import type { ExtraFieldsForShellAlert } from '../eql/build_alert_group_from_sequence'; +import { robustGet } from './source_fields_merging/utils/robust_field_access'; +import type { SearchTypes } from '../../../../../common/detection_engine/types'; export interface SuppressionTerm { field: string; - value: string[] | number[] | null; + value: SearchTypes | null; } /** @@ -47,7 +49,7 @@ export const getSuppressionAlertFields = ({ fallbackTimestamp ); - const suppressionFields = { + const suppressionFields: ExtraFieldsForShellAlert = { [ALERT_INSTANCE_ID]: instanceId, [ALERT_SUPPRESSION_TERMS]: suppressionTerms, [ALERT_SUPPRESSION_START]: suppressionTime, @@ -59,23 +61,21 @@ export const getSuppressionAlertFields = ({ }; /** + * generates values from a source event for the fields provided in the alertSuppression object + * @param alertSuppression {@link AlertSuppressionCamel} options defining how to suppress alerts + * @param input source data from either the _source of "fields" property on the event * returns an array of {@link SuppressionTerm}s by retrieving the appropriate field values based on the provided alertSuppression configuration */ export const getSuppressionTerms = ({ alertSuppression, - fields, + input, }: { - fields: Record | undefined; alertSuppression: AlertSuppressionCamel | undefined; + input: Record | undefined; }): SuppressionTerm[] => { const suppressedBy = alertSuppression?.groupBy ?? []; - - const suppressedProps = pick(fields, suppressedBy) as Record< - string, - string[] | number[] | undefined - >; const suppressionTerms = suppressedBy.map((field) => { - const value = suppressedProps[field] ?? null; + const value = input != null ? robustGet({ document: input, key: field }) ?? null : null; const sortedValue = Array.isArray(value) ? (sortBy(value) as string[] | number[]) : value; return { field, diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts index bf0899978f2b2..271a2ce64883e 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/utils.ts @@ -5,14 +5,25 @@ * 2.0. */ import { createHash } from 'crypto'; -import { chunk, get, invert, isEmpty, partition } from 'lodash'; +import { chunk, get, invert, isEmpty, merge, partition } from 'lodash'; import moment from 'moment'; +import objectHash from 'object-hash'; import dateMath from '@kbn/datemath'; import { isCCSRemoteIndexName } from '@kbn/es-query'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { TransportResult } from '@elastic/elasticsearch'; -import { ALERT_UUID, ALERT_RULE_UUID, ALERT_RULE_PARAMETERS } from '@kbn/rule-data-utils'; +import { + ALERT_UUID, + ALERT_RULE_UUID, + ALERT_RULE_PARAMETERS, + TIMESTAMP, + ALERT_INSTANCE_ID, + ALERT_SUPPRESSION_DOCS_COUNT, + ALERT_SUPPRESSION_END, + ALERT_SUPPRESSION_START, + ALERT_SUPPRESSION_TERMS, +} from '@kbn/rule-data-utils'; import type { ListArray, ExceptionListItemSchema, @@ -33,6 +44,7 @@ import type { import { parseDuration } from '@kbn/alerting-plugin/server'; import type { ExceptionListClient, ListClient, ListPluginSetup } from '@kbn/lists-plugin/server'; import type { SanitizedRuleAction } from '@kbn/alerting-plugin/common'; +import type { SuppressionFieldsLatest } from '@kbn/rule-registry-plugin/common/schemas'; import type { TimestampOverride } from '../../../../../common/api/detection_engine/model/rule_schema'; import type { Privilege } from '../../../../../common/api/detection_engine'; import { RuleExecutionStatusEnum } from '../../../../../common/api/detection_engine/rule_monitoring'; @@ -51,6 +63,7 @@ import type { } from '../types'; import type { ShardError } from '../../../types'; import type { + CompleteRule, EqlRuleParams, EsqlRuleParams, MachineLearningRuleParams, @@ -65,9 +78,20 @@ import { withSecuritySpan } from '../../../../utils/with_security_span'; import type { BaseFieldsLatest, DetectionAlert, + EqlBuildingBlockFieldsLatest, + EqlShellFieldsLatest, + WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; import { ENABLE_CCS_READ_WARNING_SETTING } from '../../../../../common/constants'; import type { GenericBulkCreateResponse } from '../factories'; +import type { ConfigType } from '../../../../config'; +import type { + ExtraFieldsForShellAlert, + WrappedEqlShellOptionalSubAlertsType, +} from '../eql/build_alert_group_from_sequence'; +import type { BuildReasonMessage } from './reason_formatters'; +import { getSuppressionTerms } from './suppression_utils'; +import { robustGet } from './source_fields_merging/utils/robust_field_access'; export const MAX_RULE_GAP_RATIO = 4; @@ -1027,3 +1051,96 @@ export const getDisabledActionsWarningText = ({ return `${alertsGeneratedText} connector ${actionTypesJoined} is not enabled. To send notifications, you need a higher Security Analytics license / tier`; } }; + +export interface SharedParams { + spaceId: string; + completeRule: CompleteRule; + mergeStrategy: ConfigType['alertMergeStrategy']; + indicesToQuery: string[]; + alertTimestampOverride: Date | undefined; + ruleExecutionLogger: IRuleExecutionLogForExecutors; + publicBaseUrl: string | undefined; + primaryTimestamp: string; + secondaryTimestamp?: string; + intendedTimestamp: Date | undefined; +} + +export type RuleWithInMemorySuppression = + | ThreatRuleParams + | EqlRuleParams + | MachineLearningRuleParams; + +export interface SequenceSuppressionTermsAndFieldsParams { + shellAlert: WrappedFieldsLatest; + buildingBlockAlerts: Array>; + spaceId: string; + completeRule: CompleteRule; + indicesToQuery: string[]; + alertTimestampOverride: Date | undefined; + primaryTimestamp: string; + secondaryTimestamp?: string; +} + +export type SequenceSuppressionTermsAndFieldsFactory = ( + shellAlert: WrappedEqlShellOptionalSubAlertsType, + buildingBlockAlerts: Array>, + buildReasonMessage: BuildReasonMessage +) => WrappedFieldsLatest & { + subAlerts: Array>; +}; + +export const buildShellAlertSuppressionTermsAndFields = ({ + shellAlert, + buildingBlockAlerts, + spaceId, + completeRule, + alertTimestampOverride, + primaryTimestamp, + secondaryTimestamp, +}: SequenceSuppressionTermsAndFieldsParams): WrappedFieldsLatest< + EqlShellFieldsLatest & SuppressionFieldsLatest +> & { + subAlerts: Array>; +} => { + const suppressionTerms = getSuppressionTerms({ + alertSuppression: completeRule?.ruleParams?.alertSuppression, + input: shellAlert._source, + }); + const instanceId = objectHash([suppressionTerms, completeRule.alertId, spaceId]); + + const primarySuppressionTime = robustGet({ + key: primaryTimestamp, + document: shellAlert._source, + }) as string | undefined; + + const secondarySuppressionTime = + secondaryTimestamp && + (robustGet({ + key: secondaryTimestamp, + document: shellAlert._source, + }) as string | undefined); + + const suppressionTime = new Date( + primarySuppressionTime ?? + secondarySuppressionTime ?? + alertTimestampOverride ?? + shellAlert._source[TIMESTAMP] + ); + + const suppressionFields: ExtraFieldsForShellAlert = { + [ALERT_INSTANCE_ID]: instanceId, + [ALERT_SUPPRESSION_TERMS]: suppressionTerms, + [ALERT_SUPPRESSION_START]: suppressionTime, + [ALERT_SUPPRESSION_END]: suppressionTime, + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }; + + merge(shellAlert._source, suppressionFields); + + return { + _id: shellAlert._id, + _index: shellAlert._index, + _source: shellAlert._source as EqlShellFieldsLatest & SuppressionFieldsLatest, + subAlerts: buildingBlockAlerts, + }; +}; diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/wrap_suppressed_alerts.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/wrap_suppressed_alerts.ts index 2e40026c38e4a..6cb176ba70f77 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/wrap_suppressed_alerts.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/utils/wrap_suppressed_alerts.ts @@ -9,28 +9,19 @@ import objectHash from 'object-hash'; import { TIMESTAMP } from '@kbn/rule-data-utils'; import type { SuppressionFieldsLatest } from '@kbn/rule-registry-plugin/common/schemas'; -import type { SignalSourceHit } from '../types'; +import type { SignalSourceHit } from '../types'; import type { BaseFieldsLatest, WrappedFieldsLatest, } from '../../../../../common/api/detection_engine/model/alerts'; -import type { ConfigType } from '../../../../config'; -import type { - CompleteRule, - EqlRuleParams, - MachineLearningRuleParams, - ThreatRuleParams, -} from '../../rule_schema'; -import type { IRuleExecutionLogForExecutors } from '../../rule_monitoring'; + import { transformHitToAlert } from '../factories/utils/transform_hit_to_alert'; import { getSuppressionAlertFields, getSuppressionTerms } from './suppression_utils'; +import type { SharedParams } from './utils'; import { generateId } from './utils'; - import type { BuildReasonMessage } from './reason_formatters'; -type RuleWithInMemorySuppression = ThreatRuleParams | EqlRuleParams | MachineLearningRuleParams; - /** * wraps suppressed alerts * creates instanceId hash, which is used to search on time interval alerts @@ -51,22 +42,12 @@ export const wrapSuppressedAlerts = ({ intendedTimestamp, }: { events: SignalSourceHit[]; - spaceId: string; - completeRule: CompleteRule; - mergeStrategy: ConfigType['alertMergeStrategy']; - indicesToQuery: string[]; buildReasonMessage: BuildReasonMessage; - alertTimestampOverride: Date | undefined; - ruleExecutionLogger: IRuleExecutionLogForExecutors; - publicBaseUrl: string | undefined; - primaryTimestamp: string; - secondaryTimestamp?: string; - intendedTimestamp: Date | undefined; -}): Array> => { +} & SharedParams): Array> => { return events.map((event) => { const suppressionTerms = getSuppressionTerms({ alertSuppression: completeRule?.ruleParams?.alertSuppression, - fields: event.fields, + input: event.fields, }); const id = generateId( diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/post_rule.sh b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/post_rule.sh index e8f5c627d3c88..b40c416943295 100755 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/post_rule.sh +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/post_rule.sh @@ -22,6 +22,7 @@ do { curl -s -k \ -H 'Content-Type: application/json' \ -H 'kbn-xsrf: 123' \ + -H 'elastic-api-version: 2023-10-31' \ -u ${ELASTICSEARCH_USERNAME}:${ELASTICSEARCH_PASSWORD} \ -X POST ${KIBANA_URL}${SPACE_URL}/api/detection_engine/rules \ -d @${RULE} \ diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query.json new file mode 100644 index 0000000000000..8c5531188379b --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query.json @@ -0,0 +1,62 @@ +{ + "name": "EQL sequence duration", + "description": "Rule with an eql query", + "false_positives": ["https://www.example.com/some-article-about-a-false-positive"], + "rule_id": "rule-id-eql-1", + "enabled": true, + "index": ["auditbeat*", "packetbeat*"], + "interval": "30s", + "query": "sequence with maxspan=10m [any where agent.type == \"auditbeat\"] [any where event.category == \"network_traffic\"]", + "meta": { + "anything_you_want_ui_related_or_otherwise": { + "as_deep_structured_as_you_need": { + "any_data_type": {} + } + } + }, + "risk_score": 99, + "to": "now", + "from": "now-120s", + "severity": "high", + "type": "eql", + "language": "eql", + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1499", + "name": "endpoint denial of service", + "reference": "https://attack.mitre.org/techniques/T1499/" + } + ] + }, + { + "framework": "Some other Framework you want", + "tactic": { + "id": "some-other-id", + "name": "Some other name", + "reference": "https://example.com" + }, + "technique": [ + { + "id": "some-other-id", + "name": "some other technique name", + "reference": "https://example.com" + } + ] + } + ], + "references": ["http://www.example.com/some-article-about-attack"], + "alert_suppression": { + "group_by": ["agent.name"], + "duration": { "value": 5, "unit": "h" }, + "missing_fields_strategy": "suppress" + }, + "version": 1 +} diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query_no_duration.json b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query_no_duration.json new file mode 100644 index 0000000000000..a3df1cfe24938 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/scripts/rules/queries/sequence_eql_query_no_duration.json @@ -0,0 +1,61 @@ +{ + "name": "EQL sequence no duration", + "description": "Rule with an eql query", + "false_positives": ["https://www.example.com/some-article-about-a-false-positive"], + "rule_id": "rule-id-eql-2", + "enabled": true, + "index": ["auditbeat*", "packetbeat*"], + "interval": "30s", + "query": "sequence with maxspan=10m [any where agent.type == \"auditbeat\"] [any where event.category == \"network_traffic\"]", + "meta": { + "anything_you_want_ui_related_or_otherwise": { + "as_deep_structured_as_you_need": { + "any_data_type": {} + } + } + }, + "risk_score": 99, + "to": "now", + "from": "now-120s", + "severity": "high", + "type": "eql", + "language": "eql", + "threat": [ + { + "framework": "MITRE ATT&CK", + "tactic": { + "id": "TA0040", + "name": "impact", + "reference": "https://attack.mitre.org/tactics/TA0040/" + }, + "technique": [ + { + "id": "T1499", + "name": "endpoint denial of service", + "reference": "https://attack.mitre.org/techniques/T1499/" + } + ] + }, + { + "framework": "Some other Framework you want", + "tactic": { + "id": "some-other-id", + "name": "Some other name", + "reference": "https://example.com" + }, + "technique": [ + { + "id": "some-other-id", + "name": "some other technique name", + "reference": "https://example.com" + } + ] + } + ], + "references": ["http://www.example.com/some-article-about-attack"], + "alert_suppression": { + "group_by": ["agent.name"], + "missing_fields_strategy": "suppress" + }, + "version": 1 +} diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 87a26687ca8ce..641fe748bc9cc 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -37836,8 +37836,6 @@ "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.customThreatQueryFieldRequiredError": "Au moins une correspondance d'indicateur est requise.", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.EqlQueryBarLabel": "Requête EQL", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlQueryFieldRequiredError": "Une requête EQL est requise.", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionDisableText": "La suppression n'est pas prise en charge pour les requêtes de séquence EQL.", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionValidationText": "{EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP} Remplacez la requête EQL par une requête non séquentielle ou supprimez les champs de suppression.", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldAnomalyThresholdLabel": "Seuil de score d'anomalie", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldMachineLearningJobIdLabel": "Tâche de Machine Learning", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldQuerBarLabel": "Requête personnalisée", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index ece294b3b9e3e..8ee66aeaeeeee 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -37693,8 +37693,6 @@ "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.customThreatQueryFieldRequiredError": "1 つ以上のインジケーター一致が必要です。", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.EqlQueryBarLabel": "EQL クエリ", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlQueryFieldRequiredError": "EQLクエリは必須です。", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionDisableText": "EQLシーケンスクエリでは抑制はサポートされていません。", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionValidationText": "{EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP} EQLクエリを非シーケンスクエリに変更するか、抑制フィールドを削除してください。", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldAnomalyThresholdLabel": "異常スコアしきい値", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldMachineLearningJobIdLabel": "機械学習ジョブ", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldQuerBarLabel": "カスタムクエリー", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 77c7998778edf..b6ac70304497b 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -37120,8 +37120,6 @@ "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.customThreatQueryFieldRequiredError": "至少需要一个指标匹配。", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.EqlQueryBarLabel": "EQL 查询", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlQueryFieldRequiredError": "EQL 查询必填。", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionDisableText": "EQL 序列查询不支持阻止。", - "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.eqlSequenceSuppressionValidationText": "{EQL_SEQUENCE_SUPPRESSION_DISABLE_TOOLTIP} 将 EQL 查询更改为非序列查询,或移除阻止字段。", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldAnomalyThresholdLabel": "异常分数阈值", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldMachineLearningJobIdLabel": "Machine Learning 作业", "xpack.securitySolution.detectionEngine.createRule.stepDefineRule.fieldQuerBarLabel": "定制查询", diff --git a/x-pack/test/security_solution_api_integration/config/ess/config.base.ts b/x-pack/test/security_solution_api_integration/config/ess/config.base.ts index a0d2ee79a7b46..25b7a40c9701e 100644 --- a/x-pack/test/security_solution_api_integration/config/ess/config.base.ts +++ b/x-pack/test/security_solution_api_integration/config/ess/config.base.ts @@ -84,6 +84,7 @@ export function createTestConfig(options: CreateTestConfigOptions, testFiles?: s 'previewTelemetryUrlEnabled', 'riskScoringPersistence', 'riskScoringRoutesEnabled', + 'alertSuppressionForSequenceEqlRuleEnabled', ])}`, '--xpack.task_manager.poll_interval=1000', `--xpack.actions.preconfigured=${JSON.stringify(PRECONFIGURED_ACTION_CONNECTORS)}`, diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts index 0c3069b3c3b62..d933b1b7274d5 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts @@ -8,8 +8,12 @@ import expect from 'expect'; import { v4 as uuidv4 } from 'uuid'; import sortBy from 'lodash/sortBy'; +import partition from 'lodash/partition'; -import { EqlRuleCreateProps } from '@kbn/security-solution-plugin/common/api/detection_engine'; +import { + DetectionAlert, + EqlRuleCreateProps, +} from '@kbn/security-solution-plugin/common/api/detection_engine'; import { ALERT_SUPPRESSION_START, ALERT_SUPPRESSION_END, @@ -23,6 +27,8 @@ import { DETECTION_ENGINE_SIGNALS_STATUS_URL as DETECTION_ENGINE_ALERTS_STATUS_U import { getSuppressionMaxSignalsWarning as getSuppressionMaxAlertsWarning } from '@kbn/security-solution-plugin/server/lib/detection_engine/rule_types/utils/utils'; import { RuleExecutionStatusEnum } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_monitoring'; import { ALERT_ORIGINAL_TIME } from '@kbn/security-solution-plugin/common/field_maps/field_names'; +import { RiskEnrichmentFields } from '@kbn/security-solution-plugin/server/lib/detection_engine/rule_types/utils/enrichments/types'; +import { SearchHit } from '@elastic/elasticsearch/lib/api/types'; import { createRule, deleteAllRules, @@ -45,11 +51,13 @@ import { deleteAllExceptions } from '../../../../../lists_and_exception_lists/ut const getQuery = (id: string) => `any where id == "${id}"`; const getSequenceQuery = (id: string) => - `sequence by id [any where id == "${id}"] [any where id == "${id}"]`; + `sequence [any where id == "${id}"] [any where id == "${id}"]`; export default ({ getService }: FtrProviderContext) => { const supertest = getService('supertest'); const esArchiver = getService('esArchiver'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); + const es = getService('es'); const log = getService('log'); const { @@ -61,6 +69,10 @@ export default ({ getService }: FtrProviderContext) => { log, }); + const partitionSequenceBuildingBlocks = ( + alerts: Array> + ) => partition(alerts, (alert) => alert?._source?.['kibana.alert.group.index'] == null); + // NOTE: Add to second quality gate after feature is GA describe('@ess @serverless Alert Suppression for EQL rules', () => { before(async () => { @@ -69,10 +81,14 @@ export default ({ getService }: FtrProviderContext) => { after(async () => { await esArchiver.unload('x-pack/test/functional/es_archives/security_solution/ecs_compliant'); + await esDeleteAllIndices('.preview.alerts*'); }); afterEach(async () => { - await deleteAllAlerts(supertest, log, es); + await deleteAllAlerts(supertest, log, es, [ + '.preview.alerts-security.alerts-*', + '.alerts-security.alerts-*', + ]); await deleteAllRules(supertest, log); }); @@ -1778,40 +1794,1507 @@ export default ({ getService }: FtrProviderContext) => { }); }); - describe('sequence queries', () => { - it('logs a warning if suppression is configured', async () => { + describe('@skipInServerless sequence queries with suppression "per rule execution"', () => { + it('suppresses alerts in a given rule execution', async () => { const id = uuidv4(); - await indexGeneratedSourceDocuments({ - docsCount: 10, - seed: () => ({ id }), + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + }; + + const doc2WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp2, + }; + + // sequence alert 1 is made up of doc1 and doc1WithLaterTimestamp, + // sequence alert 2 is made up of doc1WithLaterTimestamp and doc2WithLaterTimestamp + // sequence alert 2 is suppressed because it shares the same + // host.name value as sequence alert 1 + + await indexListOfSourceDocuments([doc1, doc1WithLaterTimestamp, doc2WithLaterTimestamp]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + // we expect one created alert and one suppressed alert + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('suppresses alerts when the rule is a building block type rule', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + }; + + const doc2WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp2, + }; + + // sequence alert 1 is made up of doc1 and doc1WithLaterTimestamp, + // sequence alert 2 is made up of doc1WithLaterTimestamp and doc2WithLaterTimestamp + // sequence alert 2 is suppressed because it shares the same + // host.name value as sequence alert 1 + + await indexListOfSourceDocuments([doc1, doc1WithLaterTimestamp, doc2WithLaterTimestamp]); + + const buildingBlockRuleType: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + building_block_type: 'default', + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule: buildingBlockRuleType, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], }); + // we expect one created alert and one suppressed alert + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partition( + previewAlerts, + (alert) => alert?._source?.[ALERT_SUPPRESSION_DOCS_COUNT] != null + ); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('suppresses alerts in a given rule execution when a subsequent event for a sequence has the suppression field undefined', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + }; + + const doc2WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp2, + host: undefined, + }; + + // sequence alert 1 will be doc1 and doc1WithLaterTimestamp + // sequence alert 2 will be doc1WithLaterTimestamp and doc2WithNoHost + // the second sequence alert will have null as the value for + // suppression field host.name because of logic defined in the + // objectPairIntersection function defined in + // x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts + + await indexListOfSourceDocuments([ + doc1, + doc1WithLaterTimestamp, + doc2WithNoHost, + { ...doc2WithNoHost, '@timestamp': '2020-10-28T06:53:01.000Z' }, + ]); const rule: EqlRuleCreateProps = { ...getEqlRuleForAlertTesting(['ecs_compliant']), query: getSequenceQuery(id), alert_suppression: { - group_by: ['agent.name'], - duration: { - value: 300, - unit: 'm', + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + // we expect two sequence alerts + // each sequence alert having two building block alerts + expect(previewAlerts.length).toEqual(6); + const [sequenceAlerts, buildingBlockAlerts] = + partitionSequenceBuildingBlocks(previewAlerts); + expect(buildingBlockAlerts.length).toEqual(4); + expect(sequenceAlerts.length).toEqual(2); + + expect(sequenceAlerts[0]?._source).toEqual({ + ...sequenceAlerts[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }); + expect(sequenceAlerts[1]?._source).toEqual({ + ...sequenceAlerts[1]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: null, + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('does not suppress alerts in a given rule execution when doNotSuppress is set and more than one sequence has the suppression field undefined', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const laterTimestamp3 = '2020-10-28T06:53:01.000Z'; + + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + }; + + const doc2WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp2, + host: undefined, + }; + + const doc3WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp3, + host: undefined, + }; + + // this should generate three sequence alerts + // sequence alert 1 will be doc1 and doc1WithLaterTimestamp + // sequence alert 2 will be doc1WithLaterTimestamp and doc2WithNoHost + // sequence alert 3 will be doc2WithNoHost and doc3WithNoHost + // This logic is defined in objectPairIntersection + // x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts + // Any sequence comprised of events where one field contains a value, followed by any number of + // events in the sequence where the value is null or undefined will have that field + // stripped from the sequence alert. So given that, we expect three alerts here + // The sequence comprised of [doc1, doc1WithLaterTimestamp] will have + // host.name and 'host-a' as the suppression values + // the other two sequence alerts comprised of [doc1WithLaterTimestamp, doc2WithNoHost] + // and [doc2WithNoHost, doc3WithNoHost] will have no suppression values set because + // of the logic outlined above + await indexListOfSourceDocuments([ + doc1, + doc1WithLaterTimestamp, + doc2WithNoHost, + doc3WithNoHost, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'doNotSuppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [TIMESTAMP], + }); + // we expect one alert and one suppressed alert + // and two building block alerts per shell alert, let's confirm that + const [sequenceAlerts, buildingBlockAlerts] = + partitionSequenceBuildingBlocks(previewAlerts); + expect(buildingBlockAlerts.length).toEqual(6); + expect(sequenceAlerts.length).toEqual(3); + const [suppressedSequenceAlerts] = partition( + sequenceAlerts, + (alert) => (alert?._source?.['kibana.alert.suppression.docs_count'] as number) >= 0 + ); + expect(suppressedSequenceAlerts.length).toEqual(1); + + expect(suppressedSequenceAlerts[0]._source).toEqual({ + ...suppressedSequenceAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }); + }); + + it('does not suppress alerts when suppression field value is undefined for a sequence alert in a given rule execution', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp, + host: undefined, + }; + + const doc2WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp2, + host: undefined, + }; + + await indexListOfSourceDocuments([doc1, doc1WithNoHost, doc2WithNoHost]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'doNotSuppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_SUPPRESSION_START], // sorting on null fields was preventing the alerts from yielding + }); + // we expect one alert and two suppressed alerts + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(6); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + const [suppressedSequenceAlerts] = partition( + sequenceAlert, + (alert) => (alert?._source?.['kibana.alert.suppression.docs_count'] as number) >= 0 + ); + expect(buildingBlockAlerts.length).toEqual(4); + expect(sequenceAlert.length).toEqual(2); + expect(suppressedSequenceAlerts.length).toEqual(0); + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: undefined, + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: undefined, + }); + }); + + it('suppresses alerts when suppression field value is undefined for a sequence alert in a given rule execution', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const laterTimestamp3 = '2020-10-28T06:53:01.000Z'; + + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp, + host: undefined, + }; + + const doc2WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp2, + host: undefined, + }; + + const doc3WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp3, + host: undefined, + }; + + await indexListOfSourceDocuments([doc1, doc1WithNoHost, doc2WithNoHost, doc3WithNoHost]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], missing_fields_strategy: 'suppress', }, from: 'now-35m', interval: '30m', }; - const { logs } = await previewRule({ + const { previewId } = await previewRule({ supertest, rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), invocationCount: 1, }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + // we expect one alert and two suppressed alerts + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + const [suppressedSequenceAlerts] = partition( + sequenceAlert, + (alert) => (alert?._source?.['kibana.alert.suppression.docs_count'] as number) >= 0 + ); + expect(suppressedSequenceAlerts.length).toEqual(1); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: null, + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + }); + + it('does not suppress alerts when "doNotSuppress" is set and suppression field value is undefined for a sequence alert in a given rule execution', async () => { + // This logic should be understood within the confines of the + // objectPairIntersection function defined in + // x-pack/plugins/security_solution/server/lib/detection_engine/rule_types/eql/build_alert_group_from_sequence.ts + // Any sequence comprised of events where one field contains a value, followed by any number of + // events in the sequence where the value is null or undefined will have that field + // stripped from the sequence alert. So given that, we expect three alerts here + // all with the suppression value as undefined + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:51:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:53:00.000Z'; + const laterTimestamp3 = '2020-10-28T06:53:01.000Z'; + + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp, + host: { name: undefined }, + }; + + const doc2WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp2, + host: { name: undefined }, + }; + + const doc3WithNoHost = { + ...doc1, + '@timestamp': laterTimestamp3, + host: { name: undefined }, + }; + + await indexListOfSourceDocuments([doc1, doc1WithNoHost, doc2WithNoHost, doc3WithNoHost]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'doNotSuppress', + }, + from: 'now-35m', + interval: '30m', + }; - const [{ warnings }] = logs; + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); - expect(warnings).toContain( - 'Suppression is not supported for EQL sequence queries. The rule will proceed without suppression.' + expect(previewAlerts.length).toEqual(9); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + const [suppressedSequenceAlerts] = partition( + sequenceAlert, + (alert) => (alert?._source?.['kibana.alert.suppression.docs_count'] as number) >= 0 ); + // no alerts should be suppressed because doNotSuppress is set + expect(suppressedSequenceAlerts.length).toEqual(0); + expect(buildingBlockAlerts.length).toEqual(6); + // 3 sequence alerts comprised of + // (doc1 + doc1WithNoHost), (doc1WithNoHost + doc2WithNoHost), (doc2WithNoHost + doc3WithNoHost) + expect(sequenceAlert.length).toEqual(3); + + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: undefined, + [ALERT_SUPPRESSION_DOCS_COUNT]: undefined, + }); + }); + + it('does not suppress alerts outside of the current rule execution search range', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:05:00.000Z'; // this should not count towards events + const laterTimestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp2 = '2020-10-28T06:51:00.000Z'; + const laterTimestamp3 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + }; + const doc2WithLaterTimestamp = { ...doc1WithLaterTimestamp, '@timestamp': laterTimestamp2 }; + const doc3WithLaterTimestamp = { ...doc2WithLaterTimestamp, '@timestamp': laterTimestamp3 }; + + await indexListOfSourceDocuments([ + doc1, + doc1WithLaterTimestamp, + doc2WithLaterTimestamp, + doc3WithLaterTimestamp, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + // we expect one alert and two suppressed alerts + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]?._source).toEqual({ + ...sequenceAlert[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('suppresses sequence alert with suppression value of "null" when all events have unique values for suppression field', async () => { + /* + Sequence alerts only contain values which make up the intersection of + a given field in all events for that sequence. + + So for a sequence alert where the two events contain host name values of + host-a and host-b, the sequence alert will have 'null' for that value and will + suppress on null values if missing_fields_strategy is set to 'suppress' + */ + const id = uuidv4(); + const timestamp = '2020-10-28T06:50:00.000Z'; + const laterTimestamp = '2020-10-28T06:50:01.000Z'; + const laterTimestamp2 = '2020-10-28T06:51:00.000Z'; + const laterTimestamp3 = '2020-10-28T06:53:00.000Z'; + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + }; + const doc1WithLaterTimestamp = { + ...doc1, + '@timestamp': laterTimestamp, + host: { name: 'host-b' }, + }; + const doc2WithLaterTimestamp = { + ...doc1WithLaterTimestamp, + '@timestamp': laterTimestamp2, + host: { name: 'host-c' }, + }; + const doc3WithLaterTimestamp = { + ...doc2WithLaterTimestamp, + '@timestamp': laterTimestamp3, + host: { name: 'host-d' }, + }; + await indexListOfSourceDocuments([ + doc1, + doc1WithLaterTimestamp, + doc2WithLaterTimestamp, + doc3WithLaterTimestamp, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + // we expect one alert and two suppressed alerts + // and two building block alerts, let's confirm that + expect(previewAlerts.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: null, + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + }); + + it('suppresses alerts on a field with array values', async () => { + const id = uuidv4(); + + const timestamp = '2020-10-28T06:45:00.000Z'; + const timestamp2 = '2020-10-28T06:46:00.000Z'; + const timestamp3 = '2020-10-28T06:47:00.000Z'; + + const doc1 = { + id, + '@timestamp': timestamp, + host: { name: ['host-a', 'host-b'] }, + }; + + await indexListOfSourceDocuments([ + doc1, + { ...doc1, '@timestamp': timestamp2 }, + { ...doc1, '@timestamp': timestamp3 }, + ]); + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: [ALERT_ORIGINAL_TIME], + }); + const [sequenceAlert] = partitionSequenceBuildingBlocks(previewAlerts); + expect(previewAlerts.length).toEqual(3); // one sequence, two building block + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: ['host-a', 'host-b'], + }, + ], + [TIMESTAMP]: '2020-10-28T07:00:00.000Z', + [ALERT_LAST_DETECTED]: '2020-10-28T07:00:00.000Z', + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('suppresses alerts with missing fields and multiple suppress by fields', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:45:00.000Z'; + const timestamp2 = '2020-10-28T06:45:01.000Z'; + const timestamp3 = '2020-10-28T06:45:02.000Z'; + const timestamp4 = '2020-10-28T06:45:03.000Z'; + const timestamp5 = '2020-10-28T06:45:04.000Z'; + const timestamp6 = '2020-10-28T06:45:05.000Z'; + const timestamp7 = '2020-10-28T06:45:06.000Z'; + const timestamp8 = '2020-10-28T06:45:07.000Z'; + const timestamp9 = '2020-10-28T06:45:08.000Z'; + const timestamp10 = '2020-10-28T06:45:09.000Z'; + const timestamp11 = '2020-10-28T06:45:10.000Z'; + const timestamp12 = '2020-10-28T06:45:11.000Z'; + + const noMissingFieldsDoc = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + agent: { name: 'agent-a', version: 10 }, + }; + + const missingNameFieldsDoc = { + ...noMissingFieldsDoc, + agent: { version: 10 }, + }; + + const missingVersionFieldsDoc = { + ...noMissingFieldsDoc, + agent: { name: 'agent-a' }, + }; + + const missingAgentFieldsDoc = { + ...noMissingFieldsDoc, + agent: undefined, + }; + + // 4 alerts should be suppressed: 1 for each pair of documents + await indexListOfSourceDocuments([ + noMissingFieldsDoc, + { ...noMissingFieldsDoc, '@timestamp': timestamp2 }, + { ...noMissingFieldsDoc, '@timestamp': timestamp3 }, + + { ...missingNameFieldsDoc, '@timestamp': timestamp4 }, + { ...missingNameFieldsDoc, '@timestamp': timestamp5 }, + { ...missingNameFieldsDoc, '@timestamp': timestamp6 }, + + { ...missingVersionFieldsDoc, '@timestamp': timestamp7 }, + { ...missingVersionFieldsDoc, '@timestamp': timestamp8 }, + { ...missingVersionFieldsDoc, '@timestamp': timestamp9 }, + + { ...missingAgentFieldsDoc, '@timestamp': timestamp10 }, + { ...missingAgentFieldsDoc, '@timestamp': timestamp11 }, + { ...missingAgentFieldsDoc, '@timestamp': timestamp12 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['agent.name', 'agent.version'], + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + size: 100, + sort: [ALERT_SUPPRESSION_START], // sorting on null fields was preventing the alerts from yielding + }); + const [sequenceAlert] = partitionSequenceBuildingBlocks(previewAlerts); + + // for sequence alerts if neither of the fields are there, we cannot suppress + expect(sequenceAlert.length).toEqual(4); + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: 'agent-a', + }, + { + field: 'agent.version', + value: 10, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + + expect(sequenceAlert[1]._source).toEqual({ + ...sequenceAlert[1]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: null, + }, + { + field: 'agent.version', + value: 10, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 2, + }); + + expect(sequenceAlert[2]._source).toEqual({ + ...sequenceAlert[2]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: null, + }, + { + field: 'agent.version', + value: null, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 3, + }); + + expect(sequenceAlert[3]._source).toEqual({ + ...sequenceAlert[3]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: 'agent-a', + }, + { + field: 'agent.version', + value: null, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('does not suppress alerts when "doNotSuppress" is set and we have alerts with missing fields and multiple suppress by fields', async () => { + const id = uuidv4(); + const timestamp = '2020-10-28T06:45:00.000Z'; + const timestamp2 = '2020-10-28T06:45:01.000Z'; + const timestamp3 = '2020-10-28T06:45:02.000Z'; + const timestamp4 = '2020-10-28T06:45:03.000Z'; + const timestamp5 = '2020-10-28T06:45:04.000Z'; + const timestamp6 = '2020-10-28T06:45:05.000Z'; + const timestamp7 = '2020-10-28T06:45:06.000Z'; + const timestamp8 = '2020-10-28T06:45:07.000Z'; + const timestamp9 = '2020-10-28T06:45:08.000Z'; + const timestamp10 = '2020-10-28T06:45:09.000Z'; + const timestamp11 = '2020-10-28T06:45:10.000Z'; + const timestamp12 = '2020-10-28T06:45:11.000Z'; + + const noMissingFieldsDoc = { + id, + '@timestamp': timestamp, + host: { name: 'host-a' }, + agent: { name: 'agent-a', version: 10 }, + }; + + const missingNameFieldsDoc = { + ...noMissingFieldsDoc, + agent: { version: 10 }, + }; + + const missingVersionFieldsDoc = { + ...noMissingFieldsDoc, + agent: { name: 'agent-a' }, + }; + + const missingAgentFieldsDoc = { + ...noMissingFieldsDoc, + agent: undefined, + }; + + // 4 alerts should be suppressed: 1 for each pair of documents + await indexListOfSourceDocuments([ + noMissingFieldsDoc, + { ...noMissingFieldsDoc, '@timestamp': timestamp2 }, + { ...noMissingFieldsDoc, '@timestamp': timestamp3 }, + + { ...missingNameFieldsDoc, '@timestamp': timestamp4 }, + { ...missingNameFieldsDoc, '@timestamp': timestamp5 }, + { ...missingNameFieldsDoc, '@timestamp': timestamp6 }, + + { ...missingVersionFieldsDoc, '@timestamp': timestamp7 }, + { ...missingVersionFieldsDoc, '@timestamp': timestamp8 }, + { ...missingVersionFieldsDoc, '@timestamp': timestamp9 }, + + { ...missingAgentFieldsDoc, '@timestamp': timestamp10 }, + { ...missingAgentFieldsDoc, '@timestamp': timestamp11 }, + { ...missingAgentFieldsDoc, '@timestamp': timestamp12 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['agent.name', 'agent.version'], + missing_fields_strategy: 'doNotSuppress', + }, + from: 'now-35m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T07:00:00.000Z'), + invocationCount: 1, + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + size: 100, + }); + const [sequenceAlert] = partitionSequenceBuildingBlocks(previewAlerts); + + // for sequence alerts if neither of the fields are there, we cannot suppress + const [suppressedSequenceAlerts] = partition( + sequenceAlert, + (alert) => (alert?._source?.['kibana.alert.suppression.docs_count'] as number) >= 0 + ); + expect(suppressedSequenceAlerts.length).toEqual(1); + expect(suppressedSequenceAlerts[0]._source).toEqual({ + ...suppressedSequenceAlerts[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'agent.name', + value: 'agent-a', + }, + { + field: 'agent.version', + value: 10, + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, + }); + }); + + it('deduplicates multiple alerts while suppressing on rule interval only', async () => { + const id = uuidv4(); + const firstTimestamp = '2020-10-28T05:45:00.000Z'; + const secondTimestamp = '2020-10-28T06:10:00.000Z'; + const secondTimestamp2 = '2020-10-28T06:10:01.000Z'; + const secondTimestamp3 = '2020-10-28T06:10:02.000Z'; + const secondTimestamp4 = '2020-10-28T06:10:03.000Z'; + const secondTimestamp5 = '2020-10-28T06:10:04.000Z'; + const secondTimestamp6 = '2020-10-28T06:10:05.000Z'; + + const doc1 = { + id, + '@timestamp': firstTimestamp, + host: { name: 'host-a' }, + }; + + // 4 alert should be suppressed + await indexListOfSourceDocuments([ + doc1, + { ...doc1, '@timestamp': secondTimestamp }, + { ...doc1, '@timestamp': secondTimestamp2 }, + { ...doc1, '@timestamp': secondTimestamp3 }, + { ...doc1, '@timestamp': secondTimestamp4 }, + { ...doc1, '@timestamp': secondTimestamp5 }, + { ...doc1, '@timestamp': secondTimestamp6 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + missing_fields_strategy: 'suppress', + }, + // large look-back time covers all docs + from: 'now-50m', + interval: '30m', + }; + + const { previewId } = await previewRule({ + supertest, + rule, + timeframeEnd: new Date('2020-10-28T06:30:00.000Z'), + invocationCount: 2, // 2 invocations so we can see that the same sequences are not generated / suppressed again. + }); + const previewAlerts = await getPreviewAlerts({ + es, + previewId, + sort: ['host.name', ALERT_ORIGINAL_TIME], + }); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks(previewAlerts); + + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 5, // if deduplication failed this would 12, or the previewAlerts count would be double + }); + }); + }); + + describe('@skipInServerless sequence queries with suppression duration', () => { + it('suppresses alerts across two rule executions when the suppression duration exceeds the rule interval', async () => { + const id = uuidv4(); + const firstTimestamp = new Date(Date.now() - 1000).toISOString(); + const firstTimestamp2 = new Date().toISOString(); + + const firstDocument = { + id, + '@timestamp': firstTimestamp, + host: { + name: 'host-a', + }, + }; + await indexListOfSourceDocuments([ + firstDocument, + { ...firstDocument, '@timestamp': firstTimestamp2 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 300, + unit: 'm', + }, + missing_fields_strategy: 'suppress', + }, + from: 'now-35m', + interval: '30m', + }; + const createdRule = await createRule(supertest, log, rule); + const alerts = await getOpenAlerts(supertest, log, es, createdRule); + + expect(alerts.hits.hits.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks( + alerts.hits.hits + ); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + // suppression start equal to alert timestamp + const suppressionStart = sequenceAlert[0]._source?.[TIMESTAMP]; + + expect(sequenceAlert[0]._source).toEqual( + expect.objectContaining({ + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + // suppression boundaries equal to original event time, since no alert been suppressed + [ALERT_SUPPRESSION_START]: suppressionStart, + [ALERT_SUPPRESSION_END]: suppressionStart, + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }) + ); + + // index an event that happened 1 second before the next event in the sequence + const secondTimestamp = new Date(Date.now() - 1000).toISOString(); + const secondDocument = { + id, + '@timestamp': secondTimestamp, + host: { + name: 'host-a', + }, + }; + + // Add a new document, then disable and re-enable to trigger another rule run. The second doc should + // trigger an update to the existing alert without changing the timestamp + await indexListOfSourceDocuments([secondDocument]); + await patchRule(supertest, log, { id: createdRule.id, enabled: false }); + await patchRule(supertest, log, { id: createdRule.id, enabled: true }); + const afterTimestamp = new Date(); + const secondAlerts = await getOpenAlerts( + supertest, + log, + es, + createdRule, + RuleExecutionStatusEnum.succeeded, + undefined, + afterTimestamp + ); + + const [sequenceAlert2] = partitionSequenceBuildingBlocks(secondAlerts.hits.hits); + + expect(sequenceAlert2.length).toEqual(1); + expect(sequenceAlert2[0]._source).toEqual({ + ...sequenceAlert2[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 1, // 1 alert from second rule run, that's why 1 suppressed + }); + // suppression end value should be greater than second document timestamp, but lesser than current time + const suppressionEnd = new Date( + sequenceAlert2[0]._source?.[ALERT_SUPPRESSION_END] as string + ).getTime(); + expect(suppressionEnd).toBeLessThan(new Date().getTime()); + expect(suppressionEnd).toBeGreaterThan(new Date(secondTimestamp).getDate()); + }); + + it('does not suppress alerts outside of duration', async () => { + const id = uuidv4(); + // this timestamp is 1 minute in the past + const firstTimestamp = new Date(Date.now() - 5000).toISOString(); + const firstTimestamp2 = new Date(Date.now() - 5500).toISOString(); + + const firstDocument = { + id, + '@timestamp': firstTimestamp, + host: { + name: 'host-a', + }, + }; + await indexListOfSourceDocuments([ + firstDocument, + { ...firstDocument, '@timestamp': firstTimestamp2 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: getSequenceQuery(id), + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 7, + unit: 's', + }, + missing_fields_strategy: 'suppress', + }, + from: 'now-10s', + interval: '5s', + }; + const createdRule = await createRule(supertest, log, rule); + const alerts = await getOpenAlerts(supertest, log, es, createdRule); + + expect(alerts.hits.hits.length).toEqual(3); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks( + alerts.hits.hits + ); + expect(buildingBlockAlerts.length).toEqual(2); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }); + + const secondTimestamp = new Date(Date.now() - 1000).toISOString(); + const secondTimestamp2 = new Date(Date.now()).toISOString(); + const secondDocument = { + id, + '@timestamp': secondTimestamp, + host: { + name: 'host-a', + }, + }; + + // Add a new document, then disable and re-enable to trigger another rule run. + // the second rule run should generate a new alert + await patchRule(supertest, log, { id: createdRule.id, enabled: false }); + + await indexListOfSourceDocuments([ + secondDocument, + { ...secondDocument, '@timestamp': secondTimestamp2 }, + ]); + await patchRule(supertest, log, { id: createdRule.id, enabled: true }); + const afterTimestamp = new Date(Date.now() + 5000); + const secondAlerts = await getOpenAlerts( + supertest, + log, + es, + createdRule, + RuleExecutionStatusEnum.succeeded, + undefined, + afterTimestamp + ); + + const [sequenceAlert2] = partitionSequenceBuildingBlocks(secondAlerts.hits.hits); + + expect(sequenceAlert2.length).toEqual(2); + expect(sequenceAlert2[0]._source).toEqual({ + ...sequenceAlert2[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, // 1 alert from second rule run, that's why 1 suppressed + }); + expect(sequenceAlert2[1]._source).toEqual({ + ...sequenceAlert2[1]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, // 1 alert from second rule run, that's why 1 suppressed + }); + }); + + it('suppresses alerts when query has 3 sequences', async () => { + // the first sequence alert is comprised of events [timestamp1, ...2, ...3] + // the other suppressed alerts will be made up of the following sequences + // [timestamp2, timestamp3, timestamp4] + // [timestamp3, timestamp4, timestamp5] + // [timestamp4, timestamp5, timestamp6] + const id = uuidv4(); + const dateNow = Date.now(); + const timestamp1 = new Date(dateNow - 5000).toISOString(); + const timestamp2 = new Date(dateNow - 5500).toISOString(); + const timestamp3 = new Date(dateNow - 5800).toISOString(); + const timestamp4 = new Date(dateNow - 6000).toISOString(); + const timestamp5 = new Date(dateNow - 6100).toISOString(); + const timestamp6 = new Date(dateNow - 6200).toISOString(); + + const firstSequenceEvent = { + id, + '@timestamp': timestamp1, + host: { + name: 'host-a', + }, + }; + await indexListOfSourceDocuments([ + firstSequenceEvent, + { ...firstSequenceEvent, '@timestamp': timestamp2 }, + { ...firstSequenceEvent, '@timestamp': timestamp3 }, + ]); + + const secondSequenceEvent = { + id, + '@timestamp': timestamp4, + host: { + name: 'host-a', + }, + }; + + await indexListOfSourceDocuments([ + secondSequenceEvent, + { ...secondSequenceEvent, '@timestamp': timestamp5 }, + { ...secondSequenceEvent, '@timestamp': timestamp6 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: `sequence [any where id == "${id}"] [any where id == "${id}"] [any where id == "${id}"]`, + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 10, + unit: 's', + }, + missing_fields_strategy: 'suppress', + }, + from: 'now-30s', + interval: '10s', + }; + const createdRule = await createRule(supertest, log, rule); + const alerts = await getOpenAlerts(supertest, log, es, createdRule); + + // we expect one shell alert + // and three building block alerts + expect(alerts.hits.hits.length).toEqual(4); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks( + alerts.hits.hits + ); + expect(buildingBlockAlerts.length).toEqual(3); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 3, + }); + }); + + it('does not suppress alerts outside of duration when query with 3 sequences', async () => { + const id = uuidv4(); + const dateNow = Date.now(); + const timestampSequenceEvent1 = new Date(dateNow - 5000).toISOString(); + const timestampSequenceEvent2 = new Date(dateNow - 5500).toISOString(); + const timestampSequenceEvent3 = new Date(dateNow - 5800).toISOString(); + + const firstSequenceEvent = { + id, + '@timestamp': timestampSequenceEvent1, + host: { + name: 'host-a', + }, + }; + await indexListOfSourceDocuments([ + firstSequenceEvent, + { ...firstSequenceEvent, '@timestamp': timestampSequenceEvent2 }, + { ...firstSequenceEvent, '@timestamp': timestampSequenceEvent3 }, + ]); + + const rule: EqlRuleCreateProps = { + ...getEqlRuleForAlertTesting(['ecs_compliant']), + query: `sequence [any where id == "${id}"] [any where id == "${id}"] [any where id == "${id}"]`, + alert_suppression: { + group_by: ['host.name'], + duration: { + value: 7, + unit: 's', + }, + missing_fields_strategy: 'suppress', + }, + from: 'now-10s', + interval: '5s', + }; + const createdRule = await createRule(supertest, log, rule); + const alerts = await getOpenAlerts(supertest, log, es, createdRule); + + // we expect one shell alert + // and three building block alerts + expect(alerts.hits.hits.length).toEqual(4); + const [sequenceAlert, buildingBlockAlerts] = partitionSequenceBuildingBlocks( + alerts.hits.hits + ); + expect(buildingBlockAlerts.length).toEqual(3); + expect(sequenceAlert.length).toEqual(1); + + expect(sequenceAlert[0]._source).toEqual({ + ...sequenceAlert[0]._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, + }); + + const dateNow2 = Date.now(); + const secondTimestampEventSequence = new Date(dateNow2 - 2000).toISOString(); + const secondTimestampEventSequence2 = new Date(dateNow2 - 1000).toISOString(); + const secondTimestampEventSequence3 = new Date(dateNow2).toISOString(); + + const secondSequenceEvent = { + id, + '@timestamp': secondTimestampEventSequence, + host: { + name: 'host-a', + }, + }; + + // Add a new document, then disable and re-enable to trigger another rule run. + // the second rule run should generate a new alert + await patchRule(supertest, log, { id: createdRule.id, enabled: false }); + + await indexListOfSourceDocuments([ + secondSequenceEvent, + { ...secondSequenceEvent, '@timestamp': secondTimestampEventSequence2 }, + { ...secondSequenceEvent, '@timestamp': secondTimestampEventSequence3 }, + ]); + await patchRule(supertest, log, { id: createdRule.id, enabled: true }); + const afterTimestamp2 = new Date(dateNow2 + 55000); + const secondAlerts = await getOpenAlerts( + supertest, + log, + es, + createdRule, + RuleExecutionStatusEnum.succeeded, + undefined, + afterTimestamp2 + ); + + const [sequenceAlert2, buildingBlockAlerts2] = partitionSequenceBuildingBlocks( + secondAlerts.hits.hits + ); + + // two sequence alerts because the second one happened + // outside of the rule's suppression duration + expect(sequenceAlert2.length).toEqual(2); + expect(buildingBlockAlerts2.length).toEqual(6); + // timestamps should be different for two alerts, showing they were + // created in different rule executions + expect(sequenceAlert2[0]?._source?.[TIMESTAMP]).not.toEqual( + sequenceAlert2[1]?._source?.[TIMESTAMP] + ); + + expect(sequenceAlert2[0]._source).toEqual({ + ...sequenceAlert2[0]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, // only one alert created, so zero documents are suppressed + }); + expect(sequenceAlert2[1]._source).toEqual({ + ...sequenceAlert2[1]?._source, + [ALERT_SUPPRESSION_TERMS]: [ + { + field: 'host.name', + value: 'host-a', + }, + ], + [ALERT_SUPPRESSION_DOCS_COUNT]: 0, // only one alert created, so zero documents are suppressed + }); }); }); }); diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/general_logic/trial_license_complete_tier/configs/serverless.config.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/general_logic/trial_license_complete_tier/configs/serverless.config.ts index db3ad04b3d1b9..987b9c5004add 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/general_logic/trial_license_complete_tier/configs/serverless.config.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/general_logic/trial_license_complete_tier/configs/serverless.config.ts @@ -17,5 +17,8 @@ export default createTestConfig({ 'testing_ignored.constant', '/testing_regex*/', ])}`, // See tests within the file "ignore_fields.ts" which use these values in "alertIgnoreFields" + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'alertSuppressionForSequenceEqlRuleEnabled', + ])}`, ], }); diff --git a/x-pack/test/security_solution_cypress/config.ts b/x-pack/test/security_solution_cypress/config.ts index f02968945087d..6b10122213ca7 100644 --- a/x-pack/test/security_solution_cypress/config.ts +++ b/x-pack/test/security_solution_cypress/config.ts @@ -44,6 +44,9 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { // See https://github.com/elastic/kibana/pull/125396 for details '--xpack.alerting.rules.minimumScheduleInterval.value=1s', '--xpack.ruleRegistry.unsafe.legacyMultiTenancy.enabled=true', + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'alertSuppressionForSequenceEqlRuleEnabled', + ])}`, // mock cloud to enable the guided onboarding tour in e2e tests '--xpack.cloud.id=test', `--home.disableWelcomeScreen=true`, diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression.cy.ts index 31855c3efff15..8f4b6a10faeb8 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression.cy.ts @@ -38,7 +38,7 @@ const SUPPRESS_BY_FIELDS = ['agent.type']; describe( 'Detection Rule Creation - EQL Rules - With Alert Suppression', { - tags: ['@ess', '@serverless', '@skipInServerlessMKI'], + tags: ['@ess', '@skipInServerlessMKI'], }, () => { describe('with non-sequence queries', () => { diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_sequence.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_sequence.cy.ts index 8f07781b7732c..2cf8526a2f9c3 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_sequence.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/eql_rule_suppression_sequence.cy.ts @@ -8,20 +8,45 @@ import { getEqlSequenceRule } from '../../../../objects/rule'; import { login } from '../../../../tasks/login'; import { visit } from '../../../../tasks/navigation'; +import { getDetails } from '../../../../tasks/rule_details'; import { CREATE_RULE_URL } from '../../../../urls/navigation'; import { deleteAlertsAndRules } from '../../../../tasks/api_calls/common'; -import { fillDefineEqlRule, selectEqlRuleType } from '../../../../tasks/create_new_rule'; +import { + fillAlertSuppressionFields, + fillAboutRuleMinimumAndContinue, + createRuleWithoutEnabling, + skipScheduleRuleAction, + continueFromDefineStep, + selectAlertSuppressionPerInterval, + setAlertSuppressionDuration, + selectDoNotSuppressForMissingFields, + fillDefineEqlRule, + selectEqlRuleType, +} from '../../../../tasks/create_new_rule'; -import { TOOLTIP } from '../../../../screens/common'; import { - ALERT_SUPPRESSION_FIELDS, - ALERT_SUPPRESSION_FIELDS_INPUT, -} from '../../../../screens/create_new_rule'; + DEFINITION_DETAILS, + SUPPRESS_FOR_DETAILS, + SUPPRESS_BY_DETAILS, + SUPPRESS_MISSING_FIELD, + DETAILS_TITLE, +} from '../../../../screens/rule_details'; + +const SUPPRESS_BY_FIELDS = ['agent.type']; describe( 'Detection Rule Creation - EQL Rules - With Alert Suppression', { - tags: ['@ess', '@serverless'], + // skipped in MKI as it depends on feature flag alertSuppressionForEsqlRuleEnabled + // alertSuppressionForEsqlRuleEnabled feature flag is also enabled in a global config + tags: ['@ess', '@skipInServerlessMKI'], + env: { + kbnServerArgs: [ + `--xpack.securitySolution.enableExperimental=${JSON.stringify([ + 'alertSuppressionForSequenceEqlRuleEnabled', + ])}`, + ], + }, }, () => { describe('with sequence queries ', () => { @@ -36,11 +61,70 @@ describe( fillDefineEqlRule(rule); }); - it('disables the suppression fields and presents an informative tooltip', () => { - cy.get(ALERT_SUPPRESSION_FIELDS_INPUT).should('be.disabled'); + it('creates a rule with a "per rule execution" suppression duration', () => { + // selecting only suppression fields, the rest options would be default + fillAlertSuppressionFields(SUPPRESS_BY_FIELDS); + continueFromDefineStep(); + + // ensures details preview works correctly + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', SUPPRESS_BY_FIELDS.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', 'One rule execution'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Suppress and group alerts for events with missing fields' + ); + + // suppression functionality should be under Tech Preview + cy.contains(DETAILS_TITLE, SUPPRESS_FOR_DETAILS).contains('Technical Preview'); + }); + + fillAboutRuleMinimumAndContinue(rule); + skipScheduleRuleAction(); + createRuleWithoutEnabling(); + + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', SUPPRESS_BY_FIELDS.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', 'One rule execution'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Suppress and group alerts for events with missing fields' + ); + }); + }); + + it('creates a rule with a "per time interval" suppression duration', () => { + const expectedSuppressByFields = SUPPRESS_BY_FIELDS.slice(0, 1); + + // fill suppress by fields and select non-default suppression options + fillAlertSuppressionFields(expectedSuppressByFields); + selectAlertSuppressionPerInterval(); + setAlertSuppressionDuration(45, 'm'); + selectDoNotSuppressForMissingFields(); + continueFromDefineStep(); + + // ensures details preview works correctly + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', expectedSuppressByFields.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', '45m'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Do not suppress alerts for events with missing fields' + ); + }); + + fillAboutRuleMinimumAndContinue(rule); + skipScheduleRuleAction(); + createRuleWithoutEnabling(); - cy.get(ALERT_SUPPRESSION_FIELDS).trigger('mouseover'); - cy.get(TOOLTIP).contains('Suppression is not supported for EQL sequence queries.'); + cy.get(DEFINITION_DETAILS).within(() => { + getDetails(SUPPRESS_BY_DETAILS).should('have.text', expectedSuppressByFields.join('')); + getDetails(SUPPRESS_FOR_DETAILS).should('have.text', '45m'); + getDetails(SUPPRESS_MISSING_FIELD).should( + 'have.text', + 'Do not suppress alerts for events with missing fields' + ); + }); }); }); } From 8bdbfdc16fddc309aba8485e95f781bd67d524b2 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Wed, 4 Dec 2024 13:39:45 +0100 Subject: [PATCH 018/141] Add base FTR test coverage for inference APIs (#198000) ## Summary Part of https://github.com/elastic/kibana-team/issues/1271 This PR introduces the first set of end to end integration test for the inference APIs, and the tooling required to do so (see issue for more context) - Add a dedicated pipeline for ai-infra GenAI tests. pipeline is triggered when: - genAI stack connectors, or ai-infra owned code is changed - when the `ci:all-gen-ai-suites` label is present on a PR - on merge - adapt the `ftr_configs.sh` script to load GenAI connector configuration from vault when a specific var env is set - create the `@kbn/gen-ai-functional-testing` package, which for now only contains utilities to load the GenAI connector configuration in FTR tests - Add FTR integration tests for the `chatComplete` API of the `inference` plugin --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .buildkite/ftr_platform_stateful_configs.yml | 3 + .buildkite/pipelines/on_merge.yml | 19 ++ .../pull_request/ai_infra_gen_ai.yml | 30 ++ .buildkite/scripts/common/setup_job_env.sh | 8 + .../pipelines/pull_request/pipeline.ts | 14 + .github/CODEOWNERS | 4 +- package.json | 1 + .../kbn-gen-ai-functional-testing/.gitignore | 2 + .../kbn-gen-ai-functional-testing/README.md | 49 ++++ .../kbn-gen-ai-functional-testing/index.ts | 16 ++ .../jest.config.js | 14 + .../kibana.jsonc | 6 + .../package.json | 6 + .../scripts/format_connector_config.js | 11 + .../scripts/retrieve_connector_config.js | 11 + .../scripts/upload_connector_config.js | 11 + .../src/connectors.ts | 91 ++++++ .../src/manage_connector_config.ts | 59 ++++ .../tsconfig.json | 20 ++ packages/kbn-sse-utils-server/index.ts | 1 + .../src/supertest_to_observable.ts | 68 +++++ tsconfig.base.json | 2 + .../gemini/process_vertex_stream.test.ts | 10 +- .../adapters/gemini/process_vertex_stream.ts | 24 +- .../inference/server/routes/chat_complete.ts | 32 ++- .../functional_gen_ai/inference/config.ts | 32 +++ .../inference/ftr_provider_context.ts | 14 + .../inference/tests/chat_complete.ts | 263 ++++++++++++++++++ .../inference/tests/index.ts | 21 ++ x-pack/test/tsconfig.json | 2 + yarn.lock | 4 + 31 files changed, 823 insertions(+), 25 deletions(-) create mode 100644 .buildkite/pipelines/pull_request/ai_infra_gen_ai.yml create mode 100644 packages/kbn-gen-ai-functional-testing/.gitignore create mode 100644 packages/kbn-gen-ai-functional-testing/README.md create mode 100644 packages/kbn-gen-ai-functional-testing/index.ts create mode 100644 packages/kbn-gen-ai-functional-testing/jest.config.js create mode 100644 packages/kbn-gen-ai-functional-testing/kibana.jsonc create mode 100644 packages/kbn-gen-ai-functional-testing/package.json create mode 100644 packages/kbn-gen-ai-functional-testing/scripts/format_connector_config.js create mode 100644 packages/kbn-gen-ai-functional-testing/scripts/retrieve_connector_config.js create mode 100644 packages/kbn-gen-ai-functional-testing/scripts/upload_connector_config.js create mode 100644 packages/kbn-gen-ai-functional-testing/src/connectors.ts create mode 100644 packages/kbn-gen-ai-functional-testing/src/manage_connector_config.ts create mode 100644 packages/kbn-gen-ai-functional-testing/tsconfig.json create mode 100644 packages/kbn-sse-utils-server/src/supertest_to_observable.ts create mode 100644 x-pack/test/functional_gen_ai/inference/config.ts create mode 100644 x-pack/test/functional_gen_ai/inference/ftr_provider_context.ts create mode 100644 x-pack/test/functional_gen_ai/inference/tests/chat_complete.ts create mode 100644 x-pack/test/functional_gen_ai/inference/tests/index.ts diff --git a/.buildkite/ftr_platform_stateful_configs.yml b/.buildkite/ftr_platform_stateful_configs.yml index c1236a04685fb..f7d27afe15204 100644 --- a/.buildkite/ftr_platform_stateful_configs.yml +++ b/.buildkite/ftr_platform_stateful_configs.yml @@ -42,6 +42,9 @@ disabled: # Default http2 config to use for performance journeys - x-pack/performance/configs/http2_config.ts + # Gen AI suites, running with their own pipeline + - x-pack/test/functional_gen_ai/inference/config.ts + defaultQueue: 'n2-4-spot' enabled: - test/accessibility/config.ts diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml index 66cc3f9f33042..adcd7ef37e6ac 100644 --- a/.buildkite/pipelines/on_merge.yml +++ b/.buildkite/pipelines/on_merge.yml @@ -169,6 +169,25 @@ steps: - exit_status: '*' limit: 1 + - command: .buildkite/scripts/steps/test/ftr_configs.sh + env: + FTR_CONFIG: "x-pack/test/functional_gen_ai/inference/config.ts" + FTR_CONFIG_GROUP_KEY: 'ftr-ai-infra-gen-ai-inference-api' + FTR_GEN_AI: "1" + label: AppEx AI-Infra Inference APIs FTR tests + key: ai-infra-gen-ai-inference-api + timeout_in_minutes: 50 + parallelism: 1 + agents: + machineType: n2-standard-4 + preemptible: true + retry: + automatic: + - exit_status: '-1' + limit: 3 + - exit_status: '*' + limit: 1 + - command: .buildkite/scripts/steps/functional/security_serverless_entity_analytics.sh label: 'Serverless Entity Analytics - Security Cypress Tests' agents: diff --git a/.buildkite/pipelines/pull_request/ai_infra_gen_ai.yml b/.buildkite/pipelines/pull_request/ai_infra_gen_ai.yml new file mode 100644 index 0000000000000..650039b278d52 --- /dev/null +++ b/.buildkite/pipelines/pull_request/ai_infra_gen_ai.yml @@ -0,0 +1,30 @@ +steps: + - group: AppEx AI-Infra genAI tests + key: ai-infra-gen-ai + depends_on: + - build + - quick_checks + - checks + - linting + - linting_with_types + - check_types + - check_oas_snapshot + steps: + - command: .buildkite/scripts/steps/test/ftr_configs.sh + env: + FTR_CONFIG: "x-pack/test/functional_gen_ai/inference/config.ts" + FTR_CONFIG_GROUP_KEY: 'ftr-ai-infra-gen-ai-inference-api' + FTR_GEN_AI: "1" + label: AppEx AI-Infra Inference APIs FTR tests + key: ai-infra-gen-ai-inference-api + timeout_in_minutes: 50 + parallelism: 1 + agents: + machineType: n2-standard-4 + preemptible: true + retry: + automatic: + - exit_status: '-1' + limit: 3 + - exit_status: '*' + limit: 1 diff --git a/.buildkite/scripts/common/setup_job_env.sh b/.buildkite/scripts/common/setup_job_env.sh index b2e3bfdd024d3..d05719cbbbb32 100644 --- a/.buildkite/scripts/common/setup_job_env.sh +++ b/.buildkite/scripts/common/setup_job_env.sh @@ -132,6 +132,14 @@ EOF export ELASTIC_APM_API_KEY } +# Set up GenAI keys +{ + if [[ "${FTR_GEN_AI:-}" =~ ^(1|true)$ ]]; then + echo "FTR_GEN_AI was set - exposing LLM connectors" + export KIBANA_TESTING_AI_CONNECTORS="$(vault_get ai-infra-ci-connectors connectors-config)" + fi +} + # Set up GCS Service Account for CDN { GCS_SA_CDN_KEY="$(vault_get gcs-sa-cdn-prod key)" diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index 6b805d540c254..638f4d5ed7a8e 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -140,6 +140,20 @@ const getPipeline = (filename: string, removeSteps = true) => { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/slo_plugin_e2e.yml')); } + if ( + (await doAnyChangesMatch([ + /^x-pack\/packages\/ai-infra/, + /^x-pack\/plugins\/ai_infra/, + /^x-pack\/plugins\/inference/, + /^x-pack\/plugins\/stack_connectors\/server\/connector_types\/bedrock/, + /^x-pack\/plugins\/stack_connectors\/server\/connector_types\/gemini/, + /^x-pack\/plugins\/stack_connectors\/server\/connector_types\/openai/, + ])) || + GITHUB_PR_LABELS.includes('ci:all-gen-ai-suites') + ) { + pipeline.push(getPipeline('.buildkite/pipelines/pull_request/ai_infra_gen_ai.yml')); + } + if ( GITHUB_PR_LABELS.includes('ci:deploy-cloud') || GITHUB_PR_LABELS.includes('ci:cloud-deploy') || diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 6c70346b65ced..2f64a12a39581 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -370,6 +370,7 @@ packages/kbn-formatters @elastic/obs-ux-logs-team packages/kbn-ftr-common-functional-services @elastic/kibana-operations @elastic/appex-qa packages/kbn-ftr-common-functional-ui-services @elastic/appex-qa packages/kbn-ftr-screenshot-filename @elastic/kibana-operations @elastic/appex-qa +packages/kbn-gen-ai-functional-testing @elastic/appex-ai-infra packages/kbn-generate @elastic/kibana-operations packages/kbn-generate-console-definitions @elastic/kibana-management packages/kbn-generate-csv @elastic/appex-sharedux @@ -1819,6 +1820,7 @@ packages/kbn-monaco/src/esql @elastic/kibana-esql # AppEx AI Infra /x-pack/plugins/inference @elastic/appex-ai-infra @elastic/obs-ai-assistant @elastic/security-generative-ai +/x-pack/test/functional_gen_ai/inference @elastic/appex-ai-infra # AppEx Platform Services Security //x-pack/test_serverless/api_integration/test_suites/common/security_response_headers.ts @elastic/kibana-security @@ -2104,7 +2106,7 @@ x-pack/test/api_integration/apis/management/index_management/inference_endpoints /x-pack/test/api_integration/services/security_solution_*.gen.ts @elastic/security-solution /x-pack/test/accessibility/apps/group3/security_solution.ts @elastic/security-solution /x-pack/test_serverless/functional/test_suites/security/config.ts @elastic/security-solution @elastic/appex-qa -x-pack/test_serverless/functional/test_suites/security/config.mki_only.ts @elastic/security-solution @elastic/appex-qa +x-pack/test_serverless/functional/test_suites/security/config.mki_only.ts @elastic/security-solution @elastic/appex-qa x-pack/test_serverless/functional/test_suites/security/index.mki_only.ts @elastic/security-solution @elastic/appex-qa @elastic/kibana-cloud-security-posture /x-pack/test_serverless/functional/test_suites/security/config.feature_flags.ts @elastic/security-solution @elastic/kibana-cloud-security-posture /x-pack/test_serverless/api_integration/test_suites/observability/config.feature_flags.ts @elastic/security-solution diff --git a/package.json b/package.json index e96dae9d0bd64..627970605a3b3 100644 --- a/package.json +++ b/package.json @@ -1454,6 +1454,7 @@ "@kbn/ftr-common-functional-services": "link:packages/kbn-ftr-common-functional-services", "@kbn/ftr-common-functional-ui-services": "link:packages/kbn-ftr-common-functional-ui-services", "@kbn/ftr-screenshot-filename": "link:packages/kbn-ftr-screenshot-filename", + "@kbn/gen-ai-functional-testing": "link:packages/kbn-gen-ai-functional-testing", "@kbn/generate": "link:packages/kbn-generate", "@kbn/get-repo-files": "link:packages/kbn-get-repo-files", "@kbn/import-locator": "link:packages/kbn-import-locator", diff --git a/packages/kbn-gen-ai-functional-testing/.gitignore b/packages/kbn-gen-ai-functional-testing/.gitignore new file mode 100644 index 0000000000000..fea551a7bacc7 --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/.gitignore @@ -0,0 +1,2 @@ +## local version of the connector config +connector_config.json diff --git a/packages/kbn-gen-ai-functional-testing/README.md b/packages/kbn-gen-ai-functional-testing/README.md new file mode 100644 index 0000000000000..df33821142e1d --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/README.md @@ -0,0 +1,49 @@ +# @kbn/gen-ai-functional-testing + +Package exposing various utilities for GenAI/LLM related functional testing. + +## Features + +### LLM connectors + +Utilizing LLM connectors on FTR tests can be done via the `getPreconfiguredConnectorConfig` and `getAvailableConnectors` tools. + +`getPreconfiguredConnectorConfig` should be used to define the list of connectors when creating the FTR test's configuration. + +```ts +import { getPreconfiguredConnectorConfig } from '@kbn/gen-ai-functional-testing' + +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const xpackFunctionalConfig = {...}; + const preconfiguredConnectors = getPreconfiguredConnectorConfig(); + + return { + ...xpackFunctionalConfig.getAll(), + kbnTestServer: { + ...xpackFunctionalConfig.get('kbnTestServer'), + serverArgs: [ + ...xpackFunctionalConfig.get('kbnTestServer.serverArgs'), + `--xpack.actions.preconfigured=${JSON.stringify(preconfiguredConnectors)}`, + ], + }, + }; +} +``` + +then the `getAvailableConnectors` can be used during the test suite to retrieve the list of LLM connectors. + +For example to run some predefined test suite against all exposed LLM connectors: + +```ts +import { getAvailableConnectors } from '@kbn/gen-ai-functional-testing'; + +export default function (providerContext: FtrProviderContext) { + describe('Some GenAI FTR test suite', async () => { + getAvailableConnectors().forEach((connector) => { + describe(`Using connector ${connector.id}`, () => { + myTestSuite(connector, providerContext); + }); + }); + }); +} +``` diff --git a/packages/kbn-gen-ai-functional-testing/index.ts b/packages/kbn-gen-ai-functional-testing/index.ts new file mode 100644 index 0000000000000..b0fc5fe6ab3ba --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export { + AI_CONNECTORS_VAR_ENV, + getPreconfiguredConnectorConfig, + getAvailableConnectors, + type AvailableConnector, + type AvailableConnectorWithId, +} from './src/connectors'; diff --git a/packages/kbn-gen-ai-functional-testing/jest.config.js b/packages/kbn-gen-ai-functional-testing/jest.config.js new file mode 100644 index 0000000000000..624ab023e16a1 --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/jest.config.js @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-gen-ai-functional-testing'], +}; diff --git a/packages/kbn-gen-ai-functional-testing/kibana.jsonc b/packages/kbn-gen-ai-functional-testing/kibana.jsonc new file mode 100644 index 0000000000000..dfc83f235de1f --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/kibana.jsonc @@ -0,0 +1,6 @@ +{ + "type": "shared-common", + "id": "@kbn/gen-ai-functional-testing", + "owner": "@elastic/appex-ai-infra", + "devOnly": true +} diff --git a/packages/kbn-gen-ai-functional-testing/package.json b/packages/kbn-gen-ai-functional-testing/package.json new file mode 100644 index 0000000000000..a687a7c9ec94b --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/package.json @@ -0,0 +1,6 @@ +{ + "name": "@kbn/gen-ai-functional-testing", + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0" +} \ No newline at end of file diff --git a/packages/kbn-gen-ai-functional-testing/scripts/format_connector_config.js b/packages/kbn-gen-ai-functional-testing/scripts/format_connector_config.js new file mode 100644 index 0000000000000..d8ac404413bbb --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/scripts/format_connector_config.js @@ -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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +require('@kbn/babel-register').install(); +require('../src/manage_connector_config').formatCurrentConfig(); diff --git a/packages/kbn-gen-ai-functional-testing/scripts/retrieve_connector_config.js b/packages/kbn-gen-ai-functional-testing/scripts/retrieve_connector_config.js new file mode 100644 index 0000000000000..e9b3c9b196920 --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/scripts/retrieve_connector_config.js @@ -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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +require('@kbn/babel-register').install(); +require('../src/manage_connector_config').retrieveFromVault(); diff --git a/packages/kbn-gen-ai-functional-testing/scripts/upload_connector_config.js b/packages/kbn-gen-ai-functional-testing/scripts/upload_connector_config.js new file mode 100644 index 0000000000000..e9cc8d9738c1a --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/scripts/upload_connector_config.js @@ -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", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +require('@kbn/babel-register').install(); +require('../src/manage_connector_config').uploadToVault(); diff --git a/packages/kbn-gen-ai-functional-testing/src/connectors.ts b/packages/kbn-gen-ai-functional-testing/src/connectors.ts new file mode 100644 index 0000000000000..6bfe3f7030484 --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/src/connectors.ts @@ -0,0 +1,91 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { schema } from '@kbn/config-schema'; + +/** + * The environment variable that is used by the CI to load the connectors configuration + */ +export const AI_CONNECTORS_VAR_ENV = 'KIBANA_TESTING_AI_CONNECTORS'; + +const connectorsSchema = schema.recordOf( + schema.string(), + schema.object({ + name: schema.string(), + actionTypeId: schema.string(), + config: schema.recordOf(schema.string(), schema.any()), + secrets: schema.recordOf(schema.string(), schema.any()), + }) +); + +export interface AvailableConnector { + name: string; + actionTypeId: string; + config: Record; + secrets: Record; +} + +export interface AvailableConnectorWithId extends AvailableConnector { + id: string; +} + +const loadConnectors = (): Record => { + const envValue = process.env[AI_CONNECTORS_VAR_ENV]; + if (!envValue) { + return {}; + } + + let connectors: Record; + try { + connectors = JSON.parse(Buffer.from(envValue, 'base64').toString('utf-8')); + } catch (e) { + throw new Error( + `Error trying to parse value from KIBANA_AI_CONNECTORS environment variable: ${e.message}` + ); + } + return connectorsSchema.validate(connectors); +}; + +/** + * Retrieve the list of preconfigured connectors that should be used when defining the + * FTR configuration of suites using the connectors. + * + * @example + * ```ts + * import { getPreconfiguredConnectorConfig } from '@kbn/gen-ai-functional-testing' + * + * export default async function ({ readConfigFile }: FtrConfigProviderContext) { + * const xpackFunctionalConfig = {...}; + * const preconfiguredConnectors = getPreconfiguredConnectorConfig(); + * + * return { + * ...xpackFunctionalConfig.getAll(), + * kbnTestServer: { + * ...xpackFunctionalConfig.get('kbnTestServer'), + * serverArgs: [ + * ...xpackFunctionalConfig.get('kbnTestServer.serverArgs'), + * `--xpack.actions.preconfigured=${JSON.stringify(preconfiguredConnectors)}`, + * ], + * }, + * }; + * } + * ``` + */ +export const getPreconfiguredConnectorConfig = () => { + return loadConnectors(); +}; + +export const getAvailableConnectors = (): AvailableConnectorWithId[] => { + return Object.entries(loadConnectors()).map(([id, connector]) => { + return { + id, + ...connector, + }; + }); +}; diff --git a/packages/kbn-gen-ai-functional-testing/src/manage_connector_config.ts b/packages/kbn-gen-ai-functional-testing/src/manage_connector_config.ts new file mode 100644 index 0000000000000..484ff9d4bc48a --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/src/manage_connector_config.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import execa from 'execa'; +import Path from 'path'; +import { writeFile, readFile } from 'fs/promises'; +import { REPO_ROOT } from '@kbn/repo-info'; + +const LOCAL_FILE = Path.join( + REPO_ROOT, + 'packages', + 'kbn-gen-ai-functional-testing', + 'connector_config.json' +); + +export const retrieveFromVault = async () => { + const { stdout } = await execa( + 'vault', + ['read', '-field=connectors-config', 'secret/ci/elastic-kibana/ai-infra-ci-connectors'], + { + cwd: REPO_ROOT, + buffer: true, + } + ); + + const config = JSON.parse(Buffer.from(stdout, 'base64').toString('utf-8')); + + await writeFile(LOCAL_FILE, JSON.stringify(config, undefined, 2)); + + // eslint-disable-next-line no-console + console.log(`Config dumped into ${LOCAL_FILE}`); +}; + +export const formatCurrentConfig = async () => { + const config = await readFile(LOCAL_FILE, 'utf-8'); + const asB64 = Buffer.from(config).toString('base64'); + // eslint-disable-next-line no-console + console.log(asB64); +}; + +export const uploadToVault = async () => { + const config = await readFile(LOCAL_FILE, 'utf-8'); + const asB64 = Buffer.from(config).toString('base64'); + + await execa( + 'vault', + ['write', 'secret/ci/elastic-kibana/ai-infra-ci-connectors', `connectors-config=${asB64}`], + { + cwd: REPO_ROOT, + buffer: true, + } + ); +}; diff --git a/packages/kbn-gen-ai-functional-testing/tsconfig.json b/packages/kbn-gen-ai-functional-testing/tsconfig.json new file mode 100644 index 0000000000000..7ad2ded097a42 --- /dev/null +++ b/packages/kbn-gen-ai-functional-testing/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "**/*.ts", + ], + "exclude": [ + "target/**/*" + ], + "kbn_references": [ + "@kbn/config-schema", + "@kbn/repo-info", + ] +} diff --git a/packages/kbn-sse-utils-server/index.ts b/packages/kbn-sse-utils-server/index.ts index ec2c60a2fe81b..bf2718738f4f7 100644 --- a/packages/kbn-sse-utils-server/index.ts +++ b/packages/kbn-sse-utils-server/index.ts @@ -8,3 +8,4 @@ */ export { observableIntoEventSourceStream } from './src/observable_into_event_source_stream'; +export { supertestToObservable } from './src/supertest_to_observable'; diff --git a/packages/kbn-sse-utils-server/src/supertest_to_observable.ts b/packages/kbn-sse-utils-server/src/supertest_to_observable.ts new file mode 100644 index 0000000000000..f2dfce24c1d1b --- /dev/null +++ b/packages/kbn-sse-utils-server/src/supertest_to_observable.ts @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import type supertest from 'supertest'; +import { PassThrough } from 'stream'; +import { createParser } from 'eventsource-parser'; +import { Observable } from 'rxjs'; + +/** + * Convert a supertest response to an SSE observable. + * + * Note: the supertest response should *NOT* be awaited when using that utility, + * or at least not before calling it. + * + * @example + * ```ts + * const response = supertest + * .post(`/some/sse/endpoint`) + * .set('kbn-xsrf', 'kibana') + * .send({ + * some: 'thing' + * }); + * const events = supertestIntoObservable(response); + * ``` + */ +export function supertestToObservable(response: supertest.Test): Observable { + const stream = new PassThrough(); + response.pipe(stream); + + return new Observable((subscriber) => { + const parser = createParser({ + onEvent: (event) => { + subscriber.next(JSON.parse(event.data)); + }, + }); + + const readStream = async () => { + return new Promise((resolve, reject) => { + const decoder = new TextDecoder(); + + const processChunk = (value: BufferSource) => { + parser.feed(decoder.decode(value, { stream: true })); + }; + + stream.on('data', (chunk) => { + processChunk(chunk); + }); + + stream.on('end', () => resolve()); + stream.on('error', (err) => reject(err)); + }); + }; + + readStream() + .then(() => { + subscriber.complete(); + }) + .catch((error) => { + subscriber.error(error); + }); + }); +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 4e4fd087b3f38..c73ebc1e6b599 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -982,6 +982,8 @@ "@kbn/ftr-screenshot-filename/*": ["packages/kbn-ftr-screenshot-filename/*"], "@kbn/functional-with-es-ssl-cases-test-plugin": ["x-pack/test/functional_with_es_ssl/plugins/cases"], "@kbn/functional-with-es-ssl-cases-test-plugin/*": ["x-pack/test/functional_with_es_ssl/plugins/cases/*"], + "@kbn/gen-ai-functional-testing": ["packages/kbn-gen-ai-functional-testing"], + "@kbn/gen-ai-functional-testing/*": ["packages/kbn-gen-ai-functional-testing/*"], "@kbn/gen-ai-streaming-response-example-plugin": ["x-pack/examples/gen_ai_streaming_response_example"], "@kbn/gen-ai-streaming-response-example-plugin/*": ["x-pack/examples/gen_ai_streaming_response_example/*"], "@kbn/generate": ["packages/kbn-generate"], diff --git a/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.test.ts b/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.test.ts index 8613799846e3b..01c93107a199a 100644 --- a/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.test.ts +++ b/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.test.ts @@ -97,6 +97,11 @@ describe('processVertexStream', () => { expectObservable(processed$).toBe('--(ab)', { a: { + content: 'last chunk', + tool_calls: [], + type: ChatCompletionEventType.ChatCompletionChunk, + }, + b: { tokens: { completion: 1, prompt: 2, @@ -104,11 +109,6 @@ describe('processVertexStream', () => { }, type: ChatCompletionEventType.ChatCompletionTokenCount, }, - b: { - content: 'last chunk', - tool_calls: [], - type: ChatCompletionEventType.ChatCompletionChunk, - }, }); }); }); diff --git a/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.ts b/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.ts index 3081317882c65..7b2ed2869c21d 100644 --- a/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.ts +++ b/x-pack/plugins/inference/server/chat_complete/adapters/gemini/process_vertex_stream.ts @@ -18,18 +18,6 @@ export function processVertexStream() { return (source: Observable) => new Observable((subscriber) => { function handleNext(value: GenerateContentResponseChunk) { - // completion: only present on last chunk - if (value.usageMetadata) { - subscriber.next({ - type: ChatCompletionEventType.ChatCompletionTokenCount, - tokens: { - prompt: value.usageMetadata.promptTokenCount, - completion: value.usageMetadata.candidatesTokenCount, - total: value.usageMetadata.totalTokenCount, - }, - }); - } - const contentPart = value.candidates?.[0].content.parts[0]; const completion = contentPart?.text; const toolCall = contentPart?.functionCall; @@ -49,6 +37,18 @@ export function processVertexStream() { : [], }); } + + // completion: only present on last chunk + if (value.usageMetadata) { + subscriber.next({ + type: ChatCompletionEventType.ChatCompletionTokenCount, + tokens: { + prompt: value.usageMetadata.promptTokenCount, + completion: value.usageMetadata.candidatesTokenCount, + total: value.usageMetadata.totalTokenCount, + }, + }); + } } source.subscribe({ diff --git a/x-pack/plugins/inference/server/routes/chat_complete.ts b/x-pack/plugins/inference/server/routes/chat_complete.ts index b363c88352994..8b4cc49dfaa46 100644 --- a/x-pack/plugins/inference/server/routes/chat_complete.ts +++ b/x-pack/plugins/inference/server/routes/chat_complete.ts @@ -13,7 +13,13 @@ import type { RequestHandlerContext, KibanaRequest, } from '@kbn/core/server'; -import { MessageRole, ToolCall, ToolChoiceType } from '@kbn/inference-common'; +import { + MessageRole, + ToolCall, + ToolChoiceType, + InferenceTaskEventType, + isInferenceError, +} from '@kbn/inference-common'; import type { ChatCompleteRequestBody } from '../../common/http_apis'; import { createClient as createInferenceClient } from '../inference_client'; import { InferenceServerStart, InferenceStartDependencies } from '../types'; @@ -130,10 +136,22 @@ export function registerChatCompleteRoute({ }, }, async (context, request, response) => { - const chatCompleteResponse = await callChatComplete({ request, stream: false }); - return response.ok({ - body: chatCompleteResponse, - }); + try { + const chatCompleteResponse = await callChatComplete({ request, stream: false }); + return response.ok({ + body: chatCompleteResponse, + }); + } catch (e) { + return response.custom({ + statusCode: isInferenceError(e) ? e.meta?.status ?? 500 : 500, + bypassErrorFormat: true, + body: { + type: InferenceTaskEventType.error, + code: e.code ?? 'unknown', + message: e.message, + }, + }); + } } ); @@ -145,9 +163,9 @@ export function registerChatCompleteRoute({ }, }, async (context, request, response) => { - const chatCompleteResponse = await callChatComplete({ request, stream: true }); + const chatCompleteEvents$ = await callChatComplete({ request, stream: true }); return response.ok({ - body: observableIntoEventSourceStream(chatCompleteResponse, logger), + body: observableIntoEventSourceStream(chatCompleteEvents$, logger), }); } ); diff --git a/x-pack/test/functional_gen_ai/inference/config.ts b/x-pack/test/functional_gen_ai/inference/config.ts new file mode 100644 index 0000000000000..b7f1429dc38a0 --- /dev/null +++ b/x-pack/test/functional_gen_ai/inference/config.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { FtrConfigProviderContext } from '@kbn/test'; +import { getPreconfiguredConnectorConfig } from '@kbn/gen-ai-functional-testing'; +import { services } from './ftr_provider_context'; + +// eslint-disable-next-line import/no-default-export +export default async function ({ readConfigFile }: FtrConfigProviderContext) { + const xpackFunctionalConfig = await readConfigFile( + require.resolve('../../functional/config.base.js') + ); + + const preconfiguredConnectors = getPreconfiguredConnectorConfig(); + + return { + ...xpackFunctionalConfig.getAll(), + services, + testFiles: [require.resolve('./tests')], + kbnTestServer: { + ...xpackFunctionalConfig.get('kbnTestServer'), + serverArgs: [ + ...xpackFunctionalConfig.get('kbnTestServer.serverArgs'), + `--xpack.actions.preconfigured=${JSON.stringify(preconfiguredConnectors)}`, + ], + }, + }; +} diff --git a/x-pack/test/functional_gen_ai/inference/ftr_provider_context.ts b/x-pack/test/functional_gen_ai/inference/ftr_provider_context.ts new file mode 100644 index 0000000000000..de0b9d3f8118f --- /dev/null +++ b/x-pack/test/functional_gen_ai/inference/ftr_provider_context.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 type { GenericFtrProviderContext } from '@kbn/test'; +import { services } from '../../functional/services'; +import { pageObjects } from '../../functional/page_objects'; + +export type FtrProviderContext = GenericFtrProviderContext; + +export { services, pageObjects }; diff --git a/x-pack/test/functional_gen_ai/inference/tests/chat_complete.ts b/x-pack/test/functional_gen_ai/inference/tests/chat_complete.ts new file mode 100644 index 0000000000000..35bf7bf2b3e07 --- /dev/null +++ b/x-pack/test/functional_gen_ai/inference/tests/chat_complete.ts @@ -0,0 +1,263 @@ +/* + * 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 { lastValueFrom, toArray } from 'rxjs'; +import expect from '@kbn/expect'; +import { supertestToObservable } from '@kbn/sse-utils-server'; +import type { AvailableConnectorWithId } from '@kbn/gen-ai-functional-testing'; +import type { FtrProviderContext } from '../ftr_provider_context'; + +export const chatCompleteSuite = ( + { id: connectorId, actionTypeId: connectorType }: AvailableConnectorWithId, + { getService }: FtrProviderContext +) => { + const supertest = getService('supertest'); + + describe('chatComplete API', () => { + describe('streaming disabled', () => { + it('returns a chat completion message for a simple prompt', async () => { + const response = await supertest + .post(`/internal/inference/chat_complete`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(200); + + const message = response.body; + + expect(message.toolCalls.length).to.eql(0); + expect(message.content).to.contain('4'); + }); + + it('executes a tool with native function calling', async () => { + const response = await supertest + .post(`/internal/inference/chat_complete`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: + 'Please answer the user question. You can use the available tools if you think it can help', + messages: [{ role: 'user', content: 'What is the result of 2*4*6*8*10*123 ?' }], + toolChoice: 'required', + tools: { + calculator: { + description: 'The calculator can be used to resolve mathematical calculations', + schema: { + type: 'object', + properties: { + formula: { + type: 'string', + description: `The input for the calculator, in plain text, e.g. "2+(4*8)"`, + }, + }, + }, + }, + }, + }) + .expect(200); + + const message = response.body; + + expect(message.toolCalls.length).to.eql(1); + expect(message.toolCalls[0].function.name).to.eql('calculator'); + expect(message.toolCalls[0].function.arguments.formula).to.contain('123'); + }); + + // simulated FC is only for openAI + if (connectorType === '.gen-ai') { + it('executes a tool with simulated function calling', async () => { + const response = await supertest + .post(`/internal/inference/chat_complete`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: + 'Please answer the user question. You can use the available tools if you think it can help', + messages: [{ role: 'user', content: 'What is the result of 2*4*6*8*10*123 ?' }], + functionCalling: 'simulated', + toolChoice: 'required', + tools: { + calculator: { + description: 'The calculator can be used to resolve mathematical calculations', + schema: { + type: 'object', + properties: { + formula: { + type: 'string', + description: `The input for the calculator, in plain text, e.g. "2+(4*8)"`, + }, + }, + }, + }, + }, + }) + .expect(200); + + const message = response.body; + + expect(message.toolCalls.length).to.eql(1); + expect(message.toolCalls[0].function.name).to.eql('calculator'); + expect(message.toolCalls[0].function.arguments.formula).to.contain('123'); + }); + } + + it('returns token counts', async () => { + const response = await supertest + .post(`/internal/inference/chat_complete`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(200); + + const { tokens } = response.body; + + expect(tokens.prompt).to.be.greaterThan(0); + expect(tokens.completion).to.be.greaterThan(0); + expect(tokens.total).eql(tokens.prompt + tokens.completion); + }); + + it('returns an error with the expected shape in case of error', async () => { + const response = await supertest + .post(`/internal/inference/chat_complete`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId: 'do-not-exist', + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(400); + + const message = response.body; + + expect(message).to.eql({ + type: 'error', + code: 'requestError', + message: "No connector found for id 'do-not-exist'", + }); + }); + }); + + describe('streaming enabled', () => { + it('returns a chat completion message for a simple prompt', async () => { + const response = supertest + .post(`/internal/inference/chat_complete/stream`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(200); + + const observable = supertestToObservable(response); + + const message = await lastValueFrom(observable); + + expect({ + ...message, + content: '', + }).to.eql({ type: 'chatCompletionMessage', content: '', toolCalls: [] }); + expect(message.content).to.contain('4'); + }); + + it('executes a tool when explicitly requested', async () => { + const response = supertest + .post(`/internal/inference/chat_complete/stream`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: + 'Please answer the user question. You can use the available tools if you think it can help', + messages: [{ role: 'user', content: 'What is the result of 2*4*6*8*10*123 ?' }], + toolChoice: 'required', + tools: { + calculator: { + description: 'The calculator can be used to resolve mathematical calculations', + schema: { + type: 'object', + properties: { + formula: { + type: 'string', + description: `The input for the calculator, in plain text, e.g. "2+(4*8)"`, + }, + }, + }, + }, + }, + }) + .expect(200); + + const observable = supertestToObservable(response); + + const message = await lastValueFrom(observable); + + expect(message.toolCalls.length).to.eql(1); + expect(message.toolCalls[0].function.name).to.eql('calculator'); + expect(message.toolCalls[0].function.arguments.formula).to.contain('123'); + }); + + it('returns a token count event', async () => { + const response = supertest + .post(`/internal/inference/chat_complete/stream`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId, + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(200); + + const observable = supertestToObservable(response); + + const events = await lastValueFrom(observable.pipe(toArray())); + const tokenEvent = events[events.length - 2]; + + expect(tokenEvent.type).to.eql('chatCompletionTokenCount'); + expect(tokenEvent.tokens.prompt).to.be.greaterThan(0); + expect(tokenEvent.tokens.completion).to.be.greaterThan(0); + expect(tokenEvent.tokens.total).to.be( + tokenEvent.tokens.prompt + tokenEvent.tokens.completion + ); + }); + + it('returns an error with the expected shape in case of error', async () => { + const response = supertest + .post(`/internal/inference/chat_complete/stream`) + .set('kbn-xsrf', 'kibana') + .send({ + connectorId: 'do-not-exist', + system: 'Please answer the user question', + messages: [{ role: 'user', content: '2+2 ?' }], + }) + .expect(200); + + const observable = supertestToObservable(response); + + const events = await lastValueFrom(observable.pipe(toArray())); + + expect(events).to.eql([ + { + type: 'error', + error: { + code: 'requestError', + message: "No connector found for id 'do-not-exist'", + meta: { + status: 400, + }, + }, + }, + ]); + }); + }); + }); +}; diff --git a/x-pack/test/functional_gen_ai/inference/tests/index.ts b/x-pack/test/functional_gen_ai/inference/tests/index.ts new file mode 100644 index 0000000000000..36cf2bbaffa14 --- /dev/null +++ b/x-pack/test/functional_gen_ai/inference/tests/index.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 { getAvailableConnectors } from '@kbn/gen-ai-functional-testing'; +import { FtrProviderContext } from '../ftr_provider_context'; +import { chatCompleteSuite } from './chat_complete'; + +// eslint-disable-next-line import/no-default-export +export default function (providerContext: FtrProviderContext) { + describe('Inference plugin - API integration tests', async () => { + getAvailableConnectors().forEach((connector) => { + describe(`Connector ${connector.id}`, () => { + chatCompleteSuite(connector, providerContext); + }); + }); + }); +} diff --git a/x-pack/test/tsconfig.json b/x-pack/test/tsconfig.json index 350ac68698acc..95178eca83172 100644 --- a/x-pack/test/tsconfig.json +++ b/x-pack/test/tsconfig.json @@ -188,6 +188,8 @@ "@kbn/ai-assistant-common", "@kbn/core-deprecations-common", "@kbn/usage-collection-plugin", + "@kbn/sse-utils-server", + "@kbn/gen-ai-functional-testing", "@kbn/integration-assistant-plugin" ] } diff --git a/yarn.lock b/yarn.lock index 622f1b7fa0092..1ab064efad6df 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5781,6 +5781,10 @@ version "0.0.0" uid "" +"@kbn/gen-ai-functional-testing@link:packages/kbn-gen-ai-functional-testing": + version "0.0.0" + uid "" + "@kbn/gen-ai-streaming-response-example-plugin@link:x-pack/examples/gen_ai_streaming_response_example": version "0.0.0" uid "" From 7eced3fef6d095835af796c9e5cccc11665846ac Mon Sep 17 00:00:00 2001 From: Faisal Kanout Date: Wed, 4 Dec 2024 13:59:14 +0100 Subject: [PATCH 019/141] [ALERTING][APM] Fix service names with spaces are not being URL encoded properly for {{context.viewInAppUrl}} (#202890) ## Summary It fixes #184381 by encoding correctly the service name and adding tests --- .../common/utils/formatters/alert_url.test.ts | 44 +++++++++++++++++++ .../apm/common/utils/formatters/alert_url.ts | 4 +- 2 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.test.ts diff --git a/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.test.ts b/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.test.ts new file mode 100644 index 0000000000000..6094b0083f39d --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.test.ts @@ -0,0 +1,44 @@ +/* + * 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 { getAlertUrlErrorCount, getAlertUrlTransaction } from './alert_url'; +describe('alert_url', () => { + describe('getAlertUrlErrorCount', () => { + it('return the URL where the service name is camelcase', () => { + const url = getAlertUrlErrorCount('serviceName', 'serviceEnv'); + expect(url).toBe('/app/apm/services/serviceName/errors?environment=serviceEnv'); + }); + it('return the URL where the service name is sneak case', () => { + const url = getAlertUrlErrorCount('service_name', 'serviceEnv'); + expect(url).toBe('/app/apm/services/service_name/errors?environment=serviceEnv'); + }); + it('return the URL encoded correctly where the service name has spaces', () => { + const url = getAlertUrlErrorCount('service name', 'serviceEnv'); + expect(url).toBe('/app/apm/services/service%20name/errors?environment=serviceEnv'); + }); + }); + describe('getAlertUrlTransaction', () => { + it('return the URL where the service name is camelcase', () => { + const url = getAlertUrlTransaction('serviceName', 'serviceEnv', 'transactionType'); + expect(url).toBe( + '/app/apm/services/serviceName?transactionType=transactionType&environment=serviceEnv' + ); + }); + it('return the URL where the service name is sneak case', () => { + const url = getAlertUrlTransaction('service_name', 'serviceEnv', 'transactionType'); + expect(url).toBe( + '/app/apm/services/service_name?transactionType=transactionType&environment=serviceEnv' + ); + }); + it('return the URL encoded correctly where the service name has spaces', () => { + const url = getAlertUrlTransaction('service name', 'serviceEnv', 'transactionType'); + expect(url).toBe( + '/app/apm/services/service%20name?transactionType=transactionType&environment=serviceEnv' + ); + }); + }); +}); diff --git a/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.ts b/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.ts index 318413cc44cf9..61ea3b9bc2fb6 100644 --- a/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.ts +++ b/x-pack/plugins/observability_solution/apm/common/utils/formatters/alert_url.ts @@ -13,7 +13,7 @@ const format = ({ pathname, query }: { pathname: string; query: Record format({ - pathname: `/app/apm/services/${serviceName}/errors`, + pathname: `/app/apm/services/${encodeURIComponent(serviceName)}/errors`, query: { environment: serviceEnv ?? ENVIRONMENT_ALL.value, }, @@ -25,7 +25,7 @@ export const getAlertUrlTransaction = ( transactionType: string ) => format({ - pathname: `/app/apm/services/${serviceName}`, + pathname: `/app/apm/services/${encodeURIComponent(serviceName)}`, query: { transactionType, environment: serviceEnv ?? ENVIRONMENT_ALL.value, From 5e60d0f522f4f42ffe5df5d884307c96768937cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Wed, 4 Dec 2024 13:12:22 +0000 Subject: [PATCH 020/141] [Profiling] fixing broken tests (#202895) closes https://github.com/elastic/kibana/issues/192697 Screenshot 2024-12-04 at 11 03 06 --- .buildkite/pipelines/flaky_tests/groups.json | 4 + .../differential_functions.cy.ts | 28 ++-- .../e2e/profiling_views/functions.cy.ts | 120 +++--------------- .../profiling_views/storage_explorer.cy.ts | 42 +----- .../public/views/storage_explorer/index.tsx | 2 + 5 files changed, 43 insertions(+), 153 deletions(-) diff --git a/.buildkite/pipelines/flaky_tests/groups.json b/.buildkite/pipelines/flaky_tests/groups.json index 77c3d23714d6f..2e92f82a4d958 100644 --- a/.buildkite/pipelines/flaky_tests/groups.json +++ b/.buildkite/pipelines/flaky_tests/groups.json @@ -88,6 +88,10 @@ "key": "cypress/apm_cypress", "name": "APM - Cypress" }, + { + "key": "cypress/profiling_cypress", + "name": "Profiling - Cypress" + }, { "key": "cypress/inventory_cypress", "name": "Inventory - Cypress" diff --git a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/differential_functions.cy.ts b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/differential_functions.cy.ts index 2b6d99b0207a4..4b6a2da0c2503 100644 --- a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/differential_functions.cy.ts +++ b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/differential_functions.cy.ts @@ -26,13 +26,12 @@ describe('Differential Functions page', () => { it('shows only the baseline values when comparison data is not available', () => { cy.intercept('GET', '/internal/profiling/topn/functions?*').as('getTopNFunctions'); cy.visitKibana('/app/profiling/functions/differential', { rangeFrom, rangeTo }); - // wait for both apis to finisto move on cy.wait('@getTopNFunctions'); cy.wait('@getTopNFunctions'); [ { id: 'overallPerformance', value: '0%' }, - { id: 'annualizedCo2', value: '74.52 lbs / 33.8 kg' }, - { id: 'annualizedCost', value: '$318.32' }, + { id: 'annualizedCo2', value: '78.48 lbs / 35.6 kg' }, + { id: 'annualizedCost', value: '$335.07' }, { id: 'totalNumberOfSamples', value: '513' }, ].forEach((item) => { cy.get(`[data-test-subj="${item.id}_value"]`).contains(item.value); @@ -50,8 +49,8 @@ describe('Differential Functions page', () => { cy.wait('@getTopNFunctions'); [ { id: 'overallPerformance', value: '0%' }, - { id: 'annualizedCo2', value: '0 lbs / 0 kg', comparisonValue: '74.52 lbs / 33.8 kg' }, - { id: 'annualizedCost', value: '$0', comparisonValue: '$318.32' }, + { id: 'annualizedCo2', value: '0 lbs / 0 kg', comparisonValue: '78.48 lbs / 35.6 kg' }, + { id: 'annualizedCost', value: '$0', comparisonValue: '$335.07' }, { id: 'totalNumberOfSamples', value: '0', comparisonValue: '15,390' }, ].forEach((item) => { cy.get(`[data-test-subj="${item.id}_value"]`).contains(item.value); @@ -69,21 +68,20 @@ describe('Differential Functions page', () => { comparisonRangeFrom, comparisonRangeTo, }); - // wait for both apis to finisto move on cy.wait('@getTopNFunctions'); cy.wait('@getTopNFunctions'); [ { id: 'overallPerformance', value: '65.89%', icon: 'sortUp_success' }, { id: 'annualizedCo2', - value: '74.52 lbs / 33.8 kg', - comparisonValue: '25.35 lbs / 11.5 kg (65.98%)', + value: '78.48 lbs / 35.6 kg', + comparisonValue: '26.68 lbs / 12.1 kg (66.01%)', icon: 'comparison_sortUp_success', }, { id: 'annualizedCost', - value: '$318.32', - comparisonValue: '$108.59 (65.89%)', + value: '$335.07', + comparisonValue: '$114.3 (65.89%)', icon: 'comparison_sortUp_success', }, { @@ -109,21 +107,20 @@ describe('Differential Functions page', () => { comparisonRangeFrom: rangeFrom, comparisonRangeTo: rangeTo, }); - // wait for both apis to finisto move on cy.wait('@getTopNFunctions'); cy.wait('@getTopNFunctions'); [ { id: 'overallPerformance', value: '193.14%', icon: 'sortDown_danger' }, { id: 'annualizedCo2', - value: '25.35 lbs / 11.5 kg', - comparisonValue: '74.52 lbs / 33.8 kg (193.91%)', + value: '26.68 lbs / 12.1 kg', + comparisonValue: '78.48 lbs / 35.6 kg (194.21%)', icon: 'comparison_sortDown_danger', }, { id: 'annualizedCost', - value: '$108.59', - comparisonValue: '$318.32 (193.14%)', + value: '$114.3', + comparisonValue: '$335.07 (193.14%)', icon: 'comparison_sortDown_danger', }, { @@ -143,7 +140,6 @@ describe('Differential Functions page', () => { it('show empty summary when no data is availble', () => { cy.intercept('GET', '/internal/profiling/topn/functions?*').as('getTopNFunctions'); cy.visitKibana('/app/profiling/functions/differential'); - // wait for both apis to finisto move on cy.wait('@getTopNFunctions'); cy.wait('@getTopNFunctions'); [ diff --git a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts index 0f006e80bb940..c4350f574c2a8 100644 --- a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts +++ b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/functions.cy.ts @@ -10,8 +10,7 @@ import { profilingPervCPUWattX86, } from '@kbn/observability-plugin/common'; -// Failing: See https://github.com/elastic/kibana/issues/192697 -describe.skip('Functions page', () => { +describe('Functions page', () => { const rangeFrom = '2023-04-18T00:00:00.000Z'; const rangeTo = '2023-04-18T00:00:30.000Z'; @@ -39,8 +38,8 @@ describe.skip('Functions page', () => { cy.get(firstRowSelector).eq(2).contains('vmlinux'); cy.get(firstRowSelector).eq(3).contains('5.46%'); cy.get(firstRowSelector).eq(4).contains('5.46%'); - cy.get(firstRowSelector).eq(5).contains('3.97 lbs / 1.8 kg'); - cy.get(firstRowSelector).eq(6).contains('$17.37'); + cy.get(firstRowSelector).eq(5).contains('4.19 lbs / 1.9 kg'); + cy.get(firstRowSelector).eq(6).contains('$18.29'); cy.get(firstRowSelector).eq(7).contains('28'); }); @@ -61,22 +60,22 @@ describe.skip('Functions page', () => { { parentKey: 'impactEstimates', key: 'selfCPU', value: '5.46%' }, { parentKey: 'impactEstimates', key: 'samples', value: '28' }, { parentKey: 'impactEstimates', key: 'selfSamples', value: '28' }, - { parentKey: 'impactEstimates', key: 'coreSeconds', value: '1.4 seconds' }, - { parentKey: 'impactEstimates', key: 'selfCoreSeconds', value: '1.4 seconds' }, - { parentKey: 'impactEstimates', key: 'annualizedCoreSeconds', value: '17.03 days' }, - { parentKey: 'impactEstimates', key: 'annualizedSelfCoreSeconds', value: '17.03 days' }, + { parentKey: 'impactEstimates', key: 'coreSeconds', value: '1.47 seconds' }, + { parentKey: 'impactEstimates', key: 'selfCoreSeconds', value: '1.47 seconds' }, + { parentKey: 'impactEstimates', key: 'annualizedCoreSeconds', value: '17.93 days' }, + { parentKey: 'impactEstimates', key: 'annualizedSelfCoreSeconds', value: '17.93 days' }, { parentKey: 'impactEstimates', key: 'co2Emission', value: '~0.00 lbs / ~0.00 kg' }, { parentKey: 'impactEstimates', key: 'selfCo2Emission', value: '~0.00 lbs / ~0.00 kg' }, - { parentKey: 'impactEstimates', key: 'annualizedCo2Emission', value: '3.97 lbs / 1.8 kg' }, + { parentKey: 'impactEstimates', key: 'annualizedCo2Emission', value: '4.19 lbs / 1.9 kg' }, { parentKey: 'impactEstimates', key: 'annualizedSelfCo2Emission', - value: '3.97 lbs / 1.8 kg', + value: '4.19 lbs / 1.9 kg', }, { parentKey: 'impactEstimates', key: 'dollarCost', value: '$~0.00' }, { parentKey: 'impactEstimates', key: 'selfDollarCost', value: '$~0.00' }, - { parentKey: 'impactEstimates', key: 'annualizedDollarCost', value: '$17.37' }, - { parentKey: 'impactEstimates', key: 'annualizedSelfDollarCost', value: '$17.37' }, + { parentKey: 'impactEstimates', key: 'annualizedDollarCost', value: '$18.29' }, + { parentKey: 'impactEstimates', key: 'annualizedSelfDollarCost', value: '$18.29' }, ].forEach(({ parentKey, key, value }) => { cy.get(`[data-test-subj="${parentKey}_${key}"]`).contains(value); }); @@ -93,96 +92,17 @@ describe.skip('Functions page', () => { cy.get(firstRowSelector).eq(2).contains('libjvm.so'); }); - it('Sorting grid', () => { - cy.intercept('GET', '/internal/profiling/topn/functions?*').as('getTopNFunctions'); - cy.visitKibana('/app/profiling/functions', { rangeFrom, rangeTo }); - cy.wait('@getTopNFunctions'); - [ - { - columnKey: 'rank', - columnIndex: 1, - highRank: 4481, - lowRank: 1, - highValue: 4481, - lowValue: 1, - }, - { - columnKey: 'samples', - columnIndex: 7, - highRank: 1, - lowRank: 389, - highValue: 28, - lowValue: 0, - }, - { - columnKey: 'selfCPU', - columnIndex: 3, - highRank: 1, - lowRank: 389, - highValue: '5.46%', - lowValue: '0.00%', - }, - { - columnKey: 'totalCPU', - columnIndex: 4, - highRank: 693, - lowRank: 44, - highValue: '60.43%', - lowValue: '0.19%', - }, - { - columnKey: 'annualizedCo2', - columnIndex: 5, - highRank: 693, - lowRank: 44, - highValue: '44.97 lbs / 20.4 kg', - lowValue: '0 lbs / 0 kg', - }, - { - columnKey: 'annualizedDollarCost', - columnIndex: 6, - highRank: 693, - lowRank: 44, - highValue: '$192.36', - lowValue: '$0.62', - }, - ].forEach(({ columnKey, columnIndex, highRank, highValue, lowRank, lowValue }) => { - cy.get(`[data-test-subj="dataGridHeaderCell-${columnKey}"]`).click(); - cy.contains('Sort High-Low').click(); - const firstRowSelector = '[data-grid-row-index="0"] [data-test-subj="dataGridRowCell"]'; - cy.get(firstRowSelector).eq(1).contains(highRank); - cy.get(firstRowSelector).eq(columnIndex).contains(highValue); - - cy.get(`[data-test-subj="dataGridHeaderCell-${columnKey}"]`).click(); - cy.contains('Sort Low-High').click(); - cy.get(firstRowSelector).eq(1).contains(lowRank); - if (lowValue !== undefined) { - cy.get(firstRowSelector).eq(columnIndex).contains(lowValue); - } else { - cy.get(firstRowSelector).eq(columnIndex).should('not.have.value'); - } - }); - - cy.get(`[data-test-subj="dataGridHeaderCell-frame"]`).click(); - cy.contains('Sort Z-A').click(); - const firstRowSelector = '[data-grid-row-index="0"] [data-test-subj="dataGridRowCell"]'; - cy.get(firstRowSelector).eq(1).contains('1'); - cy.get(firstRowSelector).eq(2).contains('vmlinux'); - - cy.get('[data-test-subj="dataGridHeaderCell-frame"]').click(); - cy.contains('Sort A-Z').click(); - cy.get(firstRowSelector).eq(1).contains('88'); - cy.get(firstRowSelector).eq(2).contains('/'); - }); - describe('Test changing CO2 settings', () => { - after(() => { + function resetSettings() { cy.updateAdvancedSettings({ [profilingCo2PerKWH]: 0.000379069, [profilingDatacenterPUE]: 1.7, [profilingPervCPUWattX86]: 7, }); - }); + } + beforeEach(resetSettings); + afterEach(resetSettings); + it('changes CO2 settings and validate values in the table', () => { cy.intercept('GET', '/internal/profiling/topn/functions?*').as('getTopNFunctions'); cy.visitKibana('/app/profiling/functions', { rangeFrom, rangeTo }); @@ -190,7 +110,7 @@ describe.skip('Functions page', () => { const firstRowSelector = '[data-grid-row-index="0"] [data-test-subj="dataGridRowCell"]'; cy.get(firstRowSelector).eq(1).contains('1'); cy.get(firstRowSelector).eq(2).contains('vmlinux'); - cy.get(firstRowSelector).eq(5).contains('3.97 lbs / 1.8 kg'); + cy.get(firstRowSelector).eq(5).contains('4.19 lbs / 1.9 kg'); cy.contains('Settings').click(); cy.contains('Advanced Settings'); cy.get(`[data-test-subj="management-settings-editField-${profilingCo2PerKWH}"]`) @@ -209,7 +129,7 @@ describe.skip('Functions page', () => { }); cy.go('back'); cy.wait('@getTopNFunctions'); - cy.get(firstRowSelector).eq(5).contains('1.87k lbs / 847.8 kg'); + cy.get(firstRowSelector).eq(5).contains('1.97k lbs / 892.5 kg'); const firstRowSelectorActionButton = '[data-grid-row-index="0"] [data-test-subj="dataGridRowCell"] .euiButtonIcon'; cy.get(firstRowSelectorActionButton).click(); @@ -219,12 +139,12 @@ describe.skip('Functions page', () => { { parentKey: 'impactEstimates', key: 'annualizedCo2Emission', - value: '1.87k lbs / 847.8 kg', + value: '1.97k lbs / 892.5 kg', }, { parentKey: 'impactEstimates', key: 'annualizedSelfCo2Emission', - value: '1.87k lbs / 847.8 kg', + value: '1.97k lbs / 892.5 kg', }, ].forEach(({ parentKey, key, value }) => { cy.get(`[data-test-subj="${parentKey}_${key}"]`).contains(value); diff --git a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/storage_explorer.cy.ts b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/storage_explorer.cy.ts index db752969f14dd..2efb71201301e 100644 --- a/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/storage_explorer.cy.ts +++ b/x-pack/plugins/observability_solution/profiling/e2e/cypress/e2e/profiling_views/storage_explorer.cy.ts @@ -95,13 +95,16 @@ describe('Storage explorer page', () => { }); describe('Data breakdown', () => { - it('displays correct values per index', () => { + beforeEach(() => { cy.intercept('GET', '/internal/profiling/storage_explorer/indices_storage_details?*').as( 'indicesDetails' ); + }); + it('displays correct values per index', () => { cy.visitKibana('/app/profiling/storage-explorer', { rangeFrom, rangeTo }); cy.contains('Storage Explorer'); - cy.contains('Data breakdown').click(); + cy.get('[data-test-subj="storageExplorer_dataBreakdownTab"]').click(); + cy.contains('Indices breakdown'); cy.wait('@indicesDetails'); [ { indexName: 'stackframes', docSize: '7,616' }, @@ -113,40 +116,5 @@ describe('Storage explorer page', () => { cy.get(`[data-test-subj="${indexName}_docSize"]`).contains(docSize); }); }); - - it('displays top 10 indices in the table', () => { - cy.intercept('GET', '/internal/profiling/storage_explorer/indices_storage_details?*').as( - 'indicesDetails' - ); - cy.visitKibana('/app/profiling/storage-explorer', { rangeFrom, rangeTo }); - cy.contains('Storage Explorer'); - cy.contains('Data breakdown').click(); - cy.wait('@indicesDetails'); - cy.get('table > tbody tr.euiTableRow').should('have.length', 10); - }); - // Skipping it we should not rely on dom elements from third-level libraries to write our tests - it.skip('displays a chart with percentage of each index', () => { - cy.intercept('GET', '/internal/profiling/storage_explorer/indices_storage_details?*').as( - 'indicesDetails' - ); - cy.visitKibana('/app/profiling/storage-explorer', { rangeFrom, rangeTo }); - cy.contains('Storage Explorer'); - cy.contains('Data breakdown').click(); - cy.wait('@indicesDetails'); - - const indices = [ - { index: 'Stackframes', perc: '32%' }, - { index: 'Samples', perc: '15%' }, - { index: 'Executables', perc: '1%' }, - { index: 'Metrics', perc: '0%' }, - { index: 'Stacktraces', perc: '52%' }, - ]; - - cy.get('.echChartPointerContainer table tbody tr').each(($row, idx) => { - // These are no longer valid elements on charts - cy.wrap($row).find('th').contains(indices[idx].index); - cy.wrap($row).find('td').contains(indices[idx].perc); - }); - }); }); }); diff --git a/x-pack/plugins/observability_solution/profiling/public/views/storage_explorer/index.tsx b/x-pack/plugins/observability_solution/profiling/public/views/storage_explorer/index.tsx index ff111c4bebcd0..5603f19099c7e 100644 --- a/x-pack/plugins/observability_solution/profiling/public/views/storage_explorer/index.tsx +++ b/x-pack/plugins/observability_solution/profiling/public/views/storage_explorer/index.tsx @@ -97,6 +97,7 @@ export function StorageExplorerView() { { setSelectedTab('host_breakdown'); }} @@ -107,6 +108,7 @@ export function StorageExplorerView() { })} { setSelectedTab('data_breakdown'); }} From 4befc6f813bdea1ccfbd1de4989742129ad3c521 Mon Sep 17 00:00:00 2001 From: kosabogi <105062005+kosabogi@users.noreply.github.com> Date: Wed, 4 Dec 2024 14:25:44 +0100 Subject: [PATCH 021/141] Updates 'Create and manage rules' page (#202648) ### Overview This PR updates the [Create and manage rules](http://localhost:8000/guide/create-and-manage-rules.html) page: - by adding a new screenshot showing how to navigate to the Rules page. - updating the instructions based on this [issue's](https://github.com/elastic/docs-content/issues/96 ) suggestion. ### Related issue https://github.com/elastic/docs-content/issues/96 (Based on my discussion with @tatianafinamor, this issue suggests updating the [Kibana guide > Create and manage rules](https://www.elastic.co/guide/en/kibana/master/create-and-manage-rules.html) page, not the Serverless guide. Users need clearer guidance on how to navigate to the **Rules** section. --- .../alerting/create-and-manage-rules.asciidoc | 16 ++++++++++------ docs/user/images/stack-management-rules.png | Bin 0 -> 175498 bytes 2 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 docs/user/images/stack-management-rules.png diff --git a/docs/user/alerting/create-and-manage-rules.asciidoc b/docs/user/alerting/create-and-manage-rules.asciidoc index 1caae10ead421..28c31c6844d42 100644 --- a/docs/user/alerting/create-and-manage-rules.asciidoc +++ b/docs/user/alerting/create-and-manage-rules.asciidoc @@ -8,17 +8,21 @@ The *{stack-manage-app}* > *{rules-ui}* UI provides a cross-app view of alerting. Different {kib} apps like {observability-guide}/create-alerts.html[*{observability}*], {security-guide}/prebuilt-rules.html[*Security*], <> and -<> can offer their own rules. *{rules-ui}* provides a +<> can offer their own rules. + +You can find **Rules** in *Stack Management* > *Alerts and insights* > *Rules* in {kib} or by using +the <>. + +[role="screenshot"] +image:images/stack-management-rules.png[Rules page navigation] + +*{rules-ui}* provides a central place to: * <> rules * <> including enabling/disabling, muting/unmuting, and deleting * Drill down to <> -* Configure settings that apply to all rules in the space - -[role="screenshot"] -image:images/rules-ui.png[Example rule listing in {rules-ui}] -// NOTE: This is an autogenerated screenshot. Do not edit it directly. +* Configure rule settings For more information on alerting concepts and the types of rules and connectors available, go to <>. diff --git a/docs/user/images/stack-management-rules.png b/docs/user/images/stack-management-rules.png new file mode 100644 index 0000000000000000000000000000000000000000..2cab8200ee6d80bbdb0cdf042509eb45cfa0a94d GIT binary patch literal 175498 zcmb5VbySsY(>^TSjetmZZc4hlyIV@iO?M+~y1S8*PU%z{1Yt{ecXz{Y`*^?K`>rSM zXMKOMyl^pdP8{bsGslFhC`qFs6C%HQ^$JZ^Mndh?D+J)HSI{ho@Q^RsBO;lQA5hL} z(qgZweiH4ydPVk1Rzg(6!{{&@&LCM9zn^pu4+d5OPE|wW+wt-7q9Omxv|-!pwl?ph z|H0v48Gm3*1?>)mFI5{KS%g4a$E2{ay@?zopVyqpc|xpV-X|c z;=*~~xrlIr{$YljkB_+sEAbn1d zVL&QPAY(wHnxyQIn%U|z_N3Tj7C)wS=N;of4XMoT7E-| z#Gb&RZKRRhYa}}ux35Ba*-^og?yZe&Lfr&-(qHDK<@GLlu(dttMd?Wxr))WOaWS8{ zeP(ZByGU&z^?Vr$2It;9Q>OZKKPTebZ>_xO=}~p}_o6hqMEB~>dHLcf>0`TXtk;FX zkk*Yw=txNRi41(xsQ=nDnzx?+%q^r<)PwWV-*K1ow-$%^B8~?N59k?cjtrgPP|kEO zW2fB;AXU@FHncuJ&u4hjcRCyn4Hd(*!UK-NH9toL9p$>wJE zKS^bd4o%fKEc^BRB`%Y!rAsy~nMIA{!`^%~#r%gD*A3nOoPq!N4LdC)A~<$h&ny09 zDVZuX)BHKS$$!%#N*t01QD5-{u>Y9u)*9l%C+m_sssG|?nm8(m#6*eS*MAAT_ zO8T*|zd;L#uBQjs@4?qIhWsSFe@ky-=CMqR_#a&d zZy~yl-rDw3n*aSVAKejatR7Z$ZFA`Vi0s9A4^H8R`8RO(f5ZhKnG->b_#vxdHU7`% zZ_1S4@{g3oN4fv2cd34>N<~ri7iy-*Le7|Ouju(-%o=E%3i*#+$Ma`{f2=_^1v#T4 zC!gKmzlY!d)pt(`;z<|jVPf`wV6{j;EhN_ajVVdU|NfY(UB5%%<)_|-!e1hDAS$%K z`L}5Qzv2|gHZUO$->86#4gTYBKSD@A_!HW6V*S0q03<3|h(szZN4UTI==0l;KDNUg z|HZ72t-piQbtXpo=O1g7(m>8w26p@_ApY}JCF2h9r; zZ(Z_aTmW<O1id zV6MB0W|}_+Fem&SJ{d)u;s3{M|9qDQl8UU>The9NT}qfM5Uu-(yewL5)2_xDVibGf zeKO?gFjq{GTrf9Tm-~~DaV?No&TN@ZwCwqti1-!z?TUM?r1{YL-gQv$$r354k+WO) z=%V1g(i7F2|No&$b_8qJ`SeLnK9?-ysKGjPNDvX47u9u@;|mX}OFcGqcRsT{!Cwf1 z@jJhTn|B2){(ShiUWua$#74mFK$YgJ`e_&0ZaqjO#eI`6d z{hLG)xyKnN^yGiy-y(UrfOV;_BeT(y#RI-v@CQQu5gvdI2}Do%f2+y=81AzS89NPn zh}j7%9?hvZqEDu3gyaILSPK7NMlw!=sA6r{euhJ{@oS55@Dmf_9nmKuUMDgt9$2q? zFV^uH>D6N8^@eKWE(#hx_z$|Hm;|>-AR?4}nRqce<4z)*=@N7x@TeZ0+Hj%iSq1te?Bie9#lj`1xG}7;~QH|_Ax6+Rtwk; zas0W20$m{B3Di@)esX?=PQsV)#qJUfmDO_EC5he;+4Fq%OKJ6`jX}PKr_b%FXc51y zE#qRVBWH(Q&(nW4j=2c5qhkOUyN}SYJObw| zH8NeNn7Z{(ApF?SXIq?R{}-t1L&1QsFvNG(i-^gL+P4j~y#16ThUkNnu6^(c8E;v3Do zMjSZmt-RNJtqnTd4BLpnwR91H@PTxY={yApC$#5!5XTM`t$>ko<6ql>b<*uEM}<@W9Iw_9k% zQO*^P?NVM7i`gB|1BR@9gE4`A^ZSOfHp~}~%-H-140=1mLfgbxHSiw+>l6h$EG9bWIgP(-b36RbnZ8WaP$=CG4CchyBoVKW1tSmW@2Sg8^UCiMMDCk({(MIEK3^v5e5 zNP>bLE+_n@=zH#o$jN2j2X-puH1Bo&da@xE3BkGRe*(J4VOZ17K2iI35ZE~<{IFST zsRO>g`-;B{F0Yny({Hj103I(AR$FR-8*Li+kj?C-%HZJ99yusa;{Aai({<~k!@?vk z@PKDqKT}r&WGdN%By()B6gbMI`kPv3(=!A&b7(c)?RmNfHC@+*U|L+LC?BU5EFTHyjB zKp@b$=V`uZ)1^R-mW=EbE;!(RFo9aW>|UkUO7Ei|#fxo|(*t<$UyQmU7P+WB_UDF|bj(?PllaImL3{4!ltYeg0DLx+Wb-IM+>Gu58s^4boxGoFihD5 zo`VkdcOkt3LcRI&hFm6>EkWfYQC^m zOdo%S9T8FC7EZ6#3TOe+=f>#<+qUL)y&xP4J0LDJo`|TZU<&!8OKNB&l~h$$qES*( z&d%x-I29pVf!p86B{?X9)qEZa0!r13HyT4j({P^n+1b@DMSp(4F*7s&k%I<*55GHI z$uZw(eN`Qtp#(1cpHlFD@4Hf(Q)U2qS9NQM_|0;jJhgX}y&e(XmwTHBlsjzZtmf=# z1M#K&X&rFsyNWu(FZauftY%ovr-wlf8VhL`88ns_Bo86qhG@t+vt(Bc3FgL;%rbGK z?S)Kd3_mtMB0r<(hs~_72MqX;(=p5dcyESfT=UJk)-EaiHQYv!)M1vQ-qoXW;PEZy z3!b}W3~-brP{V82c8~W6@mx|7un}g}x6bRb=4ZTy*Q)C+@B zg!S$?Sy<3ImT8rLTJOuky+=hw#WlO|-HE(;eh#}Ogkof5)X~+?liQM`Q~4$|)poE} zK-=v16q0uFaPwR~$N- zjpM~MF)S?nxBhGBig;VC)Z=_RE9jiI8rp4LYG2b6Dccizv=YM@SNztxTL=$| zK73r<*8W{{>1kKL1dz`*8T%?N3}6T*jD-8{U%qkKn^!+#Wza4QCSKqkFpdll7j;bi zb^CbtRnGUmV*abX^JdJ>n4oHbmSDq8x}Y;5pPNG1zNpf|`RnraqXl<{tG%6G#T&+O z(>9koQjY7~~OBf|zKdYh>Va@d((WTY-e?aJ>_>COpLO&X;drPu_5Hn3qh z`2T!yvg1QxIwO&I%L@aQvDKouKwMLZ({O9va^}!Dnp|L3X3y+Bq^PY1KF9<3x2>iOeGn64B z+3(X6?|tI%m`B>!(j~?FKvbg2ga2Hit5RWT6H!mP`@XH+GY8#e+&ife=?K5{W6O55 zu$FPpXFgEPXYrxQMfQm%+1RW`#fUVs0sA}EkI$6ts7b_)sS(MgfKOfh6cpQ;-3KrX zJKa%UTy#7Sv5>NVyvV7Ik=i`lQ1xzGVf8w2lunRA0?=q{~i0RAO# z$p&Dp>`e8Ro_NX^u^#vc43}Kt8?o3NU)(Z)Zr!UynwGVVf!MQZo>ZWGDYR3mT@p}#O*&WKHWu()1_oys?v$p$sy1GUg4Lskh z?YpflP%Uu~1@R42yie?p9xqXax!hYY1{zz)rFPHOQpPdsb0r@jpp$%GY(bf9EY~ci z8BPI!_9iSD4OZ$riO;u36L$?{d4LN_j>eY{U%BTSY?5GHJd%o>gGEK zqTU30x!RUz_ndE)YoOx}YEzl`9j2)|xVVJ*>n;&|QO^7%mpsh4NXaHe6*g0%^?HL= zN!9AB-_pLvnRd3-LWjP#%h4AjM0%qNIvNE6G@J{6d2?3vrM}oKQXxWwnlZMD- z8>G_M9x+6;Kbaw10Fy`Mi6i9OW$VdaXKTRGE7$WCSG1EcUL|S>;@KrqJR7(C{GF*@ zr*U01wl_u%O9Jiw`bT4Mcf%wk?%?LqL(6=pydauX7HT3Ya%t;uwJl8CLc+WPF_6=2 zhjV8Co`B~$Zo>hWhPQ9)g1O87rS~JJ*Q`p5jbcNtePavcY0`RsIyh-}*c?9FY#r(G zKK|GGrUt=44ACUP{Ov@sa*1ji6!fOwi_D%N9w04fx^nVD$=cW;_fHSz|EnVdqeNE& z2KejsypX7V%J@grGbH1?ulRIlDjSQ$@L@a3jId2kNxkTSSU0S?FT}(Jfl)vM+=92X zJSd47Z?0O)VZL*0P(2Vp zyT=9<-1w*p#PSj`DX{L`s*ebs;R-otl9!vDXO~q&cdrRN)5#!e0jSE9?6*FdT%iyqlR)xw$GQD7~u6nKFSYFZL~sPnAt^zP=^dvagS?@N%sZ4<>Bu}Q4k zHKr$AWHI1n;6jHt`-Mkx_oRdWZuu6v$){UW#)n|%Q}#{J_{+Dq$+nsonWowUk2Seh zuZ;6?C6_kIrhY=V6K_Nr(CpuAKa3M3>0J`|<(1-t5;@Sf_(EFsPTy{za=-vJ49`$g zJ9^Y66kD6pSEw*#ny*l!B=Y7kCOZ6Gi9hgwxge9NXu>89%nV-ny zs#1XZ+-0LLDMaAw)(1sYQXxLw&)(O&A;QnQn8w=KyHcN0>o7C)z;4~Wr9AG(Vs-se zH`)B|AL_CqH>Z!L%Kh{6inr|LOnG?~i}IPEQ<(J$$8x)5>V>iKX%&geSyRmhl*y&5qkaLwc0h^fMK@@Lna#)V%peU^7}) zGpY3$dM}LI`+NE*ayIbvP-)ovvPG#*80`6-pUEI%#Zs$>$2pYC-6?Keg_4AYr0^28 z2DQ2aM(retxx!!_ zbFC5#rBq?i;YAFbch%4@Qp(n2AdfvFMji-#lVY#Ys9=4#(5Ajoxf>u`#K1XeWZZ5g zq}OQm#i26IS+-%lCRr1(*y*VV6n=t7?SFoXP{mRkZt}V+o2|3%m|yXvQFiPZ*0fch zFOu_JmuPSP-^buz{XbqrjT}Ehq1?{*+ADJ1oE~G+ZsQFVzUT@zszgCG-xJC(6bW%%N?j7Ha#7Uzr7)}qrM`UealkmjeT1ETCS za4jx&dVO=rh}s{}zs3lL6qQ0Pv&4Z+lS{YN_ZBy1vD$49rU;&{uL64iodZ}xy z!s0V^kp$GzYEXWsZZzQ2({<=DHc1*`_NLi!yA}j^hf+Z1v5FDqlGSy1tl*h$a51@6 z`&yr}p(ipF@g9w{+l;{#(T;J*^W=kV>s*=E-FSh5lE4!IRB=m&V%#3@EGq4M8BVy@ z)nUkr|4G1W#u?KCtv<}qa&3URV-WV|LWzY343a$mm+uTr#Kb5f($e^`q_mF-6qP@Uv^I9c3=)n2mEWZ8o%LE?TBFnKVt6$CJ0)ob$y)iV`B4O3k)zuB! zwyV|;iTK^j>kJ|}EPwXJ7Yt~I$oUHU-0Bn=6D}Mt=}X!PGYsbgowy4G_=neK^2|~t zmP#}3pHv~=wneM9b-$Y1*&~b3)$6`Z=EY@DlL=1ibbW~FhJvvXkJ-fP3AI@iK3CFr zQgnT+v@Ii`rkSU)%+avCKHQ_zZmf40jUndNJ?f-Ze81~B zP$(*K45Y_Uezg6)Lm!!ZYDzPM!yamT%($@8cLtEn>N?zeYkQe)P^JLaU=qrxMHg$x z|9axhpu3##$-$&;;kA&RI!#`rfdq!rkXEJ9TNdL^wNiWA%(urg8rhAPo~*w3MWEyL9BXVy$`Y zJtBei62=O$`pf@t0Ty%q`QplzC!-S}oI^P5PX@cH)QTuAdb|m9Qdf@f$x_$jDJLEg zjdizbyrq!hbm^|22Hc+VLTd%xn5d5--*$Yu$8{Yhj+Y<5R8F6`{+<*yY7bKBoyUdQ$5qRGn{+OuhB#x$z4DE#jhwJ;Q%c-2 z)8l6M;2VpM!+t4dAuSgpiN7~8lHk!PCGMcbCqGW&z5`o;*V5cqQ#Vhl*b~PIU#KLsb3OLxcv;7Luc(B-Ifn8H9L@`r zU$xa>qB-osz=0uF__$rc8affX5@e7{)tp*81~_jd97Jk65vO3i*fn#E-j;Hvj_*=p zW4x^1Lv%8?Oc6UcWL?JuM3+Sm!!c`okvs`^`%%66Gm{LfH7(eXgVS!_7jp4l{rW*M z160Df;w?<(uNJyMr8}v)%t@}ASgv_^AQK9aTs??zL$v5aIV(01qsi6gGK6NzIhc`-6X4CRSy!LU? zdD5{?iW2{=zzs%UgmaEq?^8!U@wIn*&vf~6iP|7^&s&~wmECiY7{VCuHEe2*e?T?} z>AA{SqWL~G`$_^XG|Nh#>$`>Wh2Yt^^5LD+-Pet=3{c!kH&2g!@n9McL5yPd#I%eu z3OSCUs%3PslnML$c9g~y^^1}5(e3N4Fsf}W1tkxIeKQ+=l9!|L(n zsd>yMgdwrrgV;{Ah@b5ho<J2jJ}OP0(+A7j`ZjRj{oJASGk4cjW}s`hCVF~q zj3xY*rJu2opMFtR>!E+p`Nf3cl(DfQ{K+A(1 zxW=~IaKmZW@j$V^Yi;?xG3J^MX#44OP)C9HAoS=)h?;OX9d_4Qkhss|OU_l#7q@G= zICWAt4wBUy>^X2#1)Nm2N9e{F&acWVhEyEiVZHZb1(?m*SAFgMjRXd~sSy(?65CUi z=Yd&cpD$r{9&3)>KKHlx((9H$VESiH$16xtubS5LCHmmKWvVn{sqa0yM)P#18UN#4 zTj+3BA~w+fp@Y%KXSu(L($VQSYmZJx1#kW8Dzk}z&9wd#Wvx~vVH&H^_Q({~e1gbS zrM~56?P$gc!J$gVasxYerY zn!^{gCn*{`A2dV6TD;$KsiFGnG}u@uWU)#G8$4bgz3o>{%g3hh*a&H;X-f4?E5q3e zTRQCu`Sw$YrOLo{;AghC2J8>fp!)(%`E-5jm1l7VjP=skQgzz=5_OYt7`u6dnI#KP zn9U!txIkGA;7S!IG)z!0iGcHV*6sy1tXpph@LH_j-HzooG ziPpmC#K282Ih89&LO#N@#$!mWx3{;f@~h9B={sNoS-o0P427g27D*MMTF80-$r2^M zW?7YoX9uoWMJv1iF;hK|5v7tPS*?gMjOb#xZ+;%R$<9F2gZJG#jbL?jL`01R|1G)K zY`}SQ9ev&KT(l&dr*4ou!SxMd!_`;IA0hlr)sa~TYUy0QG${c6(nh~Ic8eO59-FlE zjELvGoyRu!&Jx|W&UtaskdP3M=S$IqJLid3?q?Y@K)0F;L&(L?36ch795+Nt!d@(}jIDszl!CAdAYq{k=0q$6W~LDrjF^+|dg5Q?%e83Px2 zVQEpR(6PeDSLGG(tcM-yVfyD5a?X}fKs}A9z;2R6Rwm;?B-yGF+0jUpkd13W72V>& zsiRXGRw6iQ5Sv`0io9yLLP3SaM37 zrqcODE8Xg6_rEx4se=Tnhvwnu~+Cm@n=KwKwSm)T;~xq$i{kYM=KP0-orcBjx{^w) zkvqd*bn{pf5b4hn{ml7Vor~t}x^kHesXAYQUGcu1+uY@;lZ4}LOeZC}Z3*L=y4)&h ztg=|WhISpHRgbs1qj{zWx16dR@@z|q7!Y)G5G3*kvqB3kJ}q`kB5dtx0*VEM z3zqeiQA-n0oZk)!*>B1(RI=1Q_+e)7rknZd^QXO~Bf-pLo#IkIS)0(l8pA+yX*jiz zL;9Yc6A6CYRS6v8!5FczVuamYY3%B5Y|CA@_imOKeaG}M#B5A#-0BI1$vz&xM4aG{rvx-20I!u6R= zR^_Yrlu$M=ox}_n1UNXrDPCR6(TtGutzkNccFzm+kf);C)yv*9an^V5R2W<1Z5<{; zrdYYaK7>@f`IW6T&6`|yE1in%w^!Fo{641`0pYc5Q3|N>Qf^M*!NKbn zJ7c#*=WnPDvQ1K^nEaM$m9jz>>eG>lwnsBTzl!9-W+uZMdqOcJH>A+k7fOEMES6a~ zqY_RkPreb@v|nr~xDBjx`2G>@2J;9GIkfUn;aL?T-FLE6oc1-F^U3njU^*p2dwaX) zd3VAqA*WuIw6sA#nRuD!%Q+N+H-zDWCLcf2&8x}E)oTt|f%82bTxEHPOTtyv@+<4e zN&yNUORWuTZVKJY%2ihK$7Xk&1vkCxlFp)`Z%X0_oDWhEP@_@d@Nsa&*BT4NVd$B| z!y7a1{@ox^kLMBw2iVF3D{@1Wf%+5$_aj-JXl}w0;sJQ<1)p{Lx zkeP?VyPNWdhRB)*#aoLQ3H{>yD#V93`M`8!j~5}&{K~cmwEB-rM$E$@X!}Uo<(-}T z;rjQ2pNm6OE)HfY#g_PxD4cfyOOAS@h{Ola?3l#ETR3-4oZ*ejfonB0 zWb@nX9N!|8EJQX)J9auT9q4E5Q-|-^@0+T?vPox z$z=CrJ($H|;<-{l)W;}(CjwsFj+4;0S!i(bTXSi@rg+ukwkUd%<;rZ$F0|VTt>ds-N(-pZJ#iWW{iC3 zd!HV8qt|!~!f(9|v4OI?M>;>z3kZ3UzE|HRM2exlnJJ{Bv30PgwVg1pk)w)A6j9-mMWCvq48bKI+W0Utj+k>p^w%?7;tsI1wv=hd^azPu29X`CJXLRs&f-GvYzR zu|7CHhifDnJ8Qud13skS+hC6v?!sh&fDP^tNS_4;>@!4NO9L?tt{6kh4`ApKzV9-D zG5$5Lf=Ipq?^$ZLZ%pmOapcWv!is#PPlrpjdhDZ$`?2S1aLT=v76msA7o;g2SH0VE z2JaKpX*xt&G+rGt(xL>|%;sMCEYbOK{p*){L-fa%JDNeDk|Z{8$rvvGF)4AKdw?!P~;GQMh59(|wQF^~9=J__q2l|#lao+R3Y#q?Nm!RGB9vK9vH8$3% znf{_qP|b@fYl^{Bz-o1EceHX9IP|28;?bLAVWuF0a>ZpzoG_ei;i3&j50?YK#VOS= z5mW|2_k8A-$XH>N@5j=jrx?+J$}+ge7*5cugqGhIAPPuX_&Oqx9_$pMs^AoJ!}6-KP6l9{l;s%TOTYj z`k`KTc;4@Q^O&hdAQSKuhR0hX&{H-FS!#HU1DKD+qj1_$-qT6;Rq^_3f^cS%z;3p- z4Li(jE~Ol+whBq3OI2(jDLOMUtvt-)%|pbSot2Hw6?`@ly&u)!mG@lF0MjCgb6F@Y zXF>7s#+j;CvtGKs#o|r9BZ{3{{Zi3LjO7_;q)7UZiv zNE!QnPwY08Wwu?Ht#EyN^dO$4x>65ZX`h?(n{blm;rK1R1^`Va+sgZPl>}~$ zn~4b(?Ja#jgpg89LlZ?zy5?6V*+yQq)?gsOK3t5`^2yR%Y(eGB=2e zejUh$Hx8QwT9Zyz6%Y_=2;siF$}|AGZC7~OIP0W1xCTa+a}c56ieMFs4W1dcEA?4w z`6MQ_nr^}AyYd1{&G3K|brk89%)h&i;NEUZTWf2i8CqZJH5Fux3i@|7k2)1jy6e-U zw#c+S{yH9;rHSK3&fQ}hNg>iC{B{)6_HixGTPVDGg2&B0lf4p@+wjpD;h0y$MS4>V zv-e~Dx2bI|M}g|aV`WD>W1SsrAL_kk>?9fiSQK2ZPt;Lt(II*iC zYGL_UL8{uvVhKrX?Aqlw_k@v*wOa!7>(L6^nQ+Etj>QA;1I~3RtYQ9kg+1Z z9RtQ!yL#DblVhqXsbY^TkIFmD3tgj$);db77B~R1?)34%HT@MFJTI3pN~q<5t&)|! zwg-SNi5u5riXFh#a*^2BN<*tX&Pt+u>SC(}O>V$ICfV(%JvxedkcZHw-=psoC)S5F zgKny*7Gf{hwyb_r5;bzsEGIPi7%4B`IbP+<1s{}+Ogx-p-O}-=jomJLOfjZp2q~rJ zO{?){37Xz7xppa~L4%;1@Y8;i9}B%rsS^6-6`MkKAqXd8t9)x|&By%JAjEiiP_GO2 zc!yAMU*!HV3yg~2KD~x(eJ>~;iM(=XO8(errhRUet=6yZdZ1d(dTq}VLSpC~+)-F3 z2W@igcEGUN;$nR8e*+l5}cM zm}NP-^Ku?r+bp=zSt?@k(r^u{Zd=_{N1Zzk+y^l^+DR}=^!9cajseIwy+%KNdc;E- zBd4Qs%T?qC*BS^tPPCc&kUkvWe%?y>arWT80wk?B@X|HFFkY4-Li{X7{#hT;60B8p z9>xm(<(<2@BIKMAc%5LKVWz^o4bHV-aj%mb8eUmi8%;8YRF)6!jWl)AQAvD<8rb;SP@!n5)F!gA0zq^j|mA&OZ8AL<|03t&$E zMu;NgGdeoT9SBY{YHU*zVyA`J`7bt%xk#egE#@4Pc)oryQIgl;?&S6#jeaq)JXgFY zUmUTuqpIPVpTfFANjIGdBCCJcDU$Qptbo@;%+L`-Jfv!u_9w*{WwXj>96_xIoA;m) zc@ictb?!4*(1G2`78J4sJoQYn1Y6xjzeCr>^=TY?ENWr_^&370iU#3|qtepM+buT3 z+0IZ4oGKs*4jq*!xj1LCV`(OJ_c7dL6M<9aQ3)^c1&){HU952JQWv=dyuGOd zht+fV9cTvf@aC-4hKz4tpO1dgs_*c90ED1E@eeg=oS903I}J0bR#?JalXQgix7-pK zQ;lY*X61ltzw8rmwvfA6Aq3coR*#PROLgxsO6Dg$J)QSGA)F45O1C|l`(w*_HS_JY z7C(~uJ3II}m!}sVI2knKL49ffdAw2SNW8l7XEpk518h;z?+mV$6;5l{5Nxcr#Wtef z@9t>h#*t)mnRQ5BaW4rB68AF@$USZQrP1_8r_(gKzmx74oFqnxS_}5!;W>S8@s6KwdkkJ+Vy6^n%X& zferhu_k)tBYV^b4GyFx`?5irz*FBVpwE86CcaHh-9vgN`?3c9Z^FvW_QSGL z&-+R+BuzgNVDJ(Q9CyS@63h2Rg7^EK4m(*00nGu6kcwRkAW-+NiBCz3=T1<-sl#)} z@jNeA?0Ko+#use$9nKM>HC5w0HV%X>#8ZQu(L5jF)AgK7IbP;Mf<>;j`6W71Ttb5> zM(`A;YD6>phw19{f{xEUFJH=7sJ|C=m{|g)hk_Zc0+1dBs^ibdhhy20Nw|x@S~wi@ z>!yMq{-tKHT;~gy4v#r?U`n_0gkEA0n?|%%d2s<~Q1i%P`^R{KHP)<)*T9FG=~`dD`Q)x}H}Njp*fbnnyS z%5473mC#!?>IUwQw>CoE&+ZV&iR43(8jWuH?aQl>Qn`3fi^Oh9cioT`4V^c>eJhJY z*B!swka!n(-{me!O;A%9k{vgIQ>WyGzF zFGY#XT2R1e3Bgx>M{757sW$7t_)74)1S3|#M@Z2@@>-T2CDy0iTQokk@rRQA$JPR& z}a9og0 zjl!_Sft3&3$zGnV_#ouM?B+$^jutLvM6G@PNaM*0;d;$~^b8lo2wE@pt#KB82QUqp zU=b=fCRDDlNyZQy-t3)-#d64aK+Klg`4%$mMlo`pJY!-?^o}IMe{WHW%-#M%(TL|( z=W5Qx>Bcn#3)tlsEz)s66nh2`7R6?XC0Z_D<%1NQhP6)2jdn{p22#jZAAUNBgODu} zQSHl1FE%3@Rl#7L&X1hehfArOJVT{?qd>X3^G^W%7WjoGo1aI;#~&c2>^1uJY_rmp zNiAe`O^ju_A{kRI{kWJYLYuIsC{mmC!=eO;{0RcN_x1E88uV+SI7{#7!CZWN@R?lp znvO8GdaRx%JP>^A_L(jz_25%nE@fJI0imR_**#K$^l513ZS<-yv4PfPE_Ck~Z|NC4 zqo*A2j+)SS=L*UZ8xnpcU^{A-WhT9sHTH z^=8d+j5kIfUe@@8$HYiM*cOu!rLP&129C2MR5>;mg#JOcD8snm90juTxyucnC?dqt zNi!pL4EJ%l+cg_^6`neUCv2Ur71%VtxtIL;>z7(HDA}<8mu=EYwjaI~OZUgP`4e<9$$FhC8L%97j7xG~c9t9t!% zoMilf)})1WXEKF$dMarAo0#Eup-&_A<;awiHnT#ab7!R;`(_rgwBr9 zdlvB8sW0PZfwGtChRs!VnjC>hiU=FfzJRlzXD%c;@CK=X3KoIMCOjO0)bxH$nj(sA z>uFMhN>pvmS{^!cVwSQ*mj_>IfFC%v{;2N1NN9{vbZCAfti`3ie!Q%nnd_>AtXn{t|B=q9H~Bu1 zC_3l>xBC&Dy;jU=Udc)i6=y4}anq-$R^3h?nNsl+6p}O5FTw+A#QM$gdZK#mf{B!F z#)qHwF}_VJ`B!y6&d7_lbkUdH5Kxo_an^F&uPdY8Rzs`W4a?RuB_nv>Q>PiZHFrrp zBx`FDjSkJxzG?YMxq_LL=3uaC1T<1h5eh>`$0c$_9F^bxJ~9np4}8|oa`2m&U(8Tp z@sq=CyuX>6k*HeFmnBM&K@a^gCX~OO^_Aiy6H;xGdRnk21C<=OvtWFUD&bf2?o+~) z41O+N6E;AkV3{8jq&H{Xw!Vm>;$dk~eB>9~WL0~M{nxm0)_Vb=GQ~)X7uIp_PFf?| zQO~D}h*Xc*lH{S_I_vBB%oJXXfoD_2=KfPbezu3Q${9wuNIE@jaDe==ffI*%rY}s{ z=WzMs&Cho;`*8~s??|)ds+*<$9YzPa{bn zX`?xI7O#|sZ+zIn?&bKwidPMogm;QzCH4MP#g*->a_Dp8Lv=Mh^-Xl64LM495>h|r zaWJ;AYeOG;6vYlCU zJXwYj@OqS>cB$2DB;!`1cCNpXUbP)Hw9sBfqP2pZv8Jxmb zwemT=TOcbt(rjqmlfi7|uQAN2mlQUzDA4!u7Hg(zr57?#a(sCfPZnrD$Ki3lCvb6f zO;{8jj>^i4c;9y}$q?msJReCdpTgMwY#-V9F733&p?Rep?&g5|>=aCSd)q$M%&lFe z6G0(qp68{emhhH@w^X3<{ATlXkX|=%#3)sAp}xxD1uCf4{^fhU8|D1OSn*O@W8h-N zJ~A;P!?Bv)rmZ#rm-qdc-6%psj<;97)M&79)#k!j4lf!pKTWU@MPP$ZUzx|lb@s6D z?yD&Xqw}ml-gCj`72vs4vkT}TG7#+*U3CIx&aLyZ9f+N>NTZ6 zVKax_Kd+mMgiwgwX+wx4WWj_CZT1~lAof^cZctEeTGZP zy}-2-MCNZREmpYA6ZFQ zijc#e&@rs;4q09qdSzx%-Iww9clJZpZy%|VdEpOVf2wLd9i-~@H<-kp>3~+Xo~PHz zeA}%J2!6LzGnht67U-?Vh#%jTLeyDAlO5)+At%t-)+H61tZkA!B@*_So+ohj6oriw z8~!xas9*%5@3^~^r9(Buuew`;<0Mt}_FCYM z5aRjuq~*gNai`O-3+t>HTa5i#>_bO8u$Pq+CVX59@*QlqqLv^%yU}w-h;?3%#g+&> zy(7eH>W?R%TEi!T%FKHRKD~D|kq7arG&>>dFL!*_3Fx^eXq8?%f5s@q5G+Xc9if|q@>eY$kq-HyDZK8^<1%0eaE$> zNjrLs*h3|YdT^criJ8HHwhm&p1->vS^aLMtjSGJ_N@wXP^3Cqvw;d@wWNdeR5cmb* zZhT~t&Pz|WcAClqUGPy0F_o%4p+>Ho$@e%!vVVQ3CZEpSBmf68^{{+-d+Qg2_i(l0 zfv;)|>9syS3e0KxgiPz)5#e`+N*gUxuz00@#cc7F-HmzlBSluNtb}6=86VVX-~}pP zmW*M0T+w5rf5nwt@QensH9G+mc(x+xEg#o;eTa5G5%u%^=I4)cd5IzyDBQWCjClq# zxY0C^7ssVZ*Lucck}zjBVa9cd2D_t&hbe+v>9l{c<{!;ECOVwuGjVy@$Q4MTv6|kF z-+qCB-9GGkr9O9n0s9cM>=xD3q_R_XrJJ*$w8WW! zF>+}?ccW6!aQ+ih}=B5=nc9 zN^;@nlGj@D3?ry2`G)QZ^LXw+8C26hNk$pgIIPea?Ef9YC9JhLa9it5W*PP@PkbOz z2)Am3Y+yAfIf&i>%3AWbPG~`@N->n&EgPF&T@3%IDxG}quLtsaq$lRlvLf+&0-xG& zT!Yp83)B5-+9SG$r9(XK~qEM3Ry!^PE+m zpl$k>otzbFOp-T|L@;h9h|q~A_WGMVeY z9jo{CXZM!3-PF#BxT@8qiE3>3otlnu#*gNX8_7<+yVF6)d=tmSN_GU0qQ8wS~pSXxH`iiwv^*2Q5h`zL8N{Bf@mI_Q2 zKc&`(r01c3Aoc#V)^>~x<*$DdF;0H9|Dx0j_C6-xl&|-&ALoSFPYv+Fnn`}lEB_@$ zzeHk4pRSyQrpQljH!TXrC(TfrICpC&Ox9LY^ac zr+;DIs_(cxgkiv~5xFV50}V?5Kla}IAL_P^8^2PCBuSDzDTR=1*^5y2eP5F7hGbuc z6bjiw_C33?8~X@ZvhTwT#=Z<=FpOmk&qvpF-_LzN_jUaN-`DH=%e*WzpE=L-*pK6V z9A`R(*C`@$mT%}ztPee5amh<16cbsi`nuActBrlc6H)g@;q>xNo2t2sQbp7Uccv6W z-!@B*1uFF071bT(zG7SA_ z8n1?idTbX`L@K*X47IR;j4LSkg=&ysU*hS&HLgWvNSfKQcB*%WTA;JA$Y{rh9@a;@ zWs&(>598T3uex8KF9X0bZTKRim*sT%EMs|JJB_JI_Fl1O`@ zu6r$-Ih49{W?okROSh&HTl~veXnN+sL(tQEN)H{rUgDFM%NjbO+q&}kDN)A2xi;)! zXxpDfZW?aGopohGA17l;zOs)N7wFG4BSL<=gEx zE^fA8VLNL-$}(qfuial>UcM#l8r9*YoX&650(r^ym5OD8_EcSje+ci=Wi9Afc+0fh zbXx3|(!$;Yu9x*!IQvIy0AKs(++qLg>_&sK3nvl=Db_8ifY7Cw@YvRKwXuO=ngS zki1sYwZEV{jNaH8*=W7(o_N03sOvF*^%QJlxAJpH}j-t_)X_eR~RFJ^C-et9iU{*?UJ_M|A52kdi09NJ$rbP;o0(gb_}H>D=Gz# zX`itL#VNI4UMlB~-s-y1o>daO)f!s_Q;JvJHtF7}fCs~s+GT~bTgHV&rb_Ptb7;)t zFU;)n=5la&9xcKUjw^infub&S-;ciaB@49--=ol)PGkIY*2Vvw8xmDcR%PZa_qm!v zEcQ9vZFBo$wsCbEny$rZ3D?rydu^T9$GpG%zUQgv-0h7GXvv+8^-vt&HE32iSxa)t z^_$e}@4Pv5AADLyI4-rH_u;xLh`2I&|2gA3gJ|Tp9Z$_w^LLNFW+aU~=a6!Q9bE?c z@90QqLK>-1L7$y96KA?FvNMW?VC{P)KH>)6P!WGozg+kl8q26Xn(QXO$lJsZW9jy# ziflaXH&Ry}+0N!bhbHr67U#q>EgRaCR7-*Exu5~Gh(yEuwG~U`GCs``U(G)Xt zpE_m3TT{5_v$Nu-k;XWxe<~j`xhX=CCYKd)G z=8`%@mx>K}F|u3O4|M0E-=<{SxY}s`WV$3KZZjp+z;YpTTAGhd^j!|no%0IJDDHY9 zmFB@VL>BQmASNf%Gm=_*!I`Di3y5yno+D}QtF`rka$A{z*1%6Nu(wSLyf@Lsd2!V_ zXk8#rO)e<3LV^--16{#?c6NM_@wv=D_1&3$6}>h;l-)T|W?tFqcHRDTvci-stbi6Y zR;O$~njgF|SuqzWEq2=nzX4?1DWM>(UU4Ni1`)f@4#0m}+CC*noAGP&hKzScZ0cQ0 zjhic=A$fVLRHKRO^=peVr&IIlLxT~cznVz3Xcsvzl!b)}NL}##nW$wwRsxo%29=t) zb$-^cpzT;))&HZ}W8=NAySwKS@$y|&t<^V&6@Em!CyO;o?@m4c#5~&3PfRWWC>>Uz z;O-M3^ZEA0qaUvlAy{9d9}DT!)CvxIqje1tmma(?{78% zkjHN_(swt$sz(jqVa4medt{IPi2m9pTF`pv5OZhOtp0biRf9)50FQp&H1aJaYw;Ff zE_O<^bAmh6(KkBw(>hhcr59c(^USUWekPk_?bykAL$1dpR;#z*nkEGfHgvn;0#S;i z<4L(BrhmsQ#YB-^J^YDsX0j7X`HAwq4(&m5>gYlXF3s9UK+gfkRg0jYPZT$YG&DYk zga?&JQ@6IZzIyc{0{-N=Z}|I=5c1ZxwoG6$0T>Jx1aVPl<(3RuZ}%nFIG@hRrilBn zcwnb5iAKk0t?nl?Bcbp8Sm#^+p8*X&O4VkUI^T{acrn}<*Wp^sXRo;(@>%UzD(n#~ z2lFn&@}&`g=D0S$`LU*=%Q=^{zO}$`=2_*-=ZV*skl&e-fH?6pbn?q!Ms4-mCSmUA zYa|AR`}_~DgN0{)%pl1*p==lNtP2MJtNy0>Uw zMHcPbW8_|2Q(*6Stke9ttA&&A@mQ+I)jSqhXLbSQ+#7Zm1WVIOnEYZD1oK%A)voQ` zw6)6ai9Zpzo5#~6A2G&3!5i9Gs_6`%(d*v!EXO-DR$;E*O!W?yw!e9!-?|{hbM?~^ zuAiclUo^5HO5oj|9N(4c<#U&*ctmMzrQEF2+xxIM{^1dMR8oZg+ns`I9N(%{7nfnx10^$e_*EyJ8qccMs|b=a`QF*m>(I~UNw1fT>GNzv@(}{l|>uq z#?Dxs$hKK@_}I3iinO0O0PP7a{&EZyaY-T`IVE5PZYu}`z2GqKx~C?5KpJhs@X1k! zX|V2VQ?~@?DIa;Np`l@yZPxu6y~Pqqk;ZR^bR`_>i!V+)i9#KlO`kmG(<)?S)>k{^ zhH{ln6BzC?rETp}wI2|vo~r5>45l%nzTaY~oA?O?{S@Ay+H>#RwI-!ALOrRzes&*R z;1MgS=aK;>Gp>b5)Y7F9vO9V!w+Zi%ZceVoZj^^S%JXdyEomULpx%OsJ=mBSX%1aY zzQBF`kaKsZC~~e$aD;Bt?=`~xFz%qS>&=U-ZFNu3Wg(TIt9t6NwI%=902SyL){DyA zl&VHar8yzI?!<4b`^U|#m@llyF>kHJ3>aP+bsit=-Xj&#lh$Lr`lQZDMvqbUSZC}q zGvIb+MqegA+}a|BcC4F`v1xOC9f1B}X_iurZQ@a=m zdOAwVg)!oOja6{o#>=uJlxbvPnx|7?ek{*bxXG~@4;J;hPnD#(>c91Kwz6uyu;40k zy6~Al`sqVakRG)6Q<|mAWrcU!hmZ3hqwYFAzS|3#@KWGGpD?9@%Ur6PM{mf6+z+<+ zYd8I5&3k*k@yL{C$qDu^AgUQ}@xS}hx>xUJZ?Ta;JzotV)-Ib9kl1O#%Vuat39DYR z(IO)wV?~IK5-(x_Xq8Kae_4ysD1Uv?vuRfzUJ_c;@%`p5fan;6HD%@JPA%``6y1_^ zm(esSFjjLK`sVn^@%W8#ZPe@w#m$Vzp*Bh-C0Cgn@;_IE^nKjn>QB1YLzj|5taK!D z#C<&9O*GQi&%fNZuG`kqqN>gO=TMX<)6WmXL`sZu9`~|H61V~lzOfc**V$GIGvM}E zM62j>t#Z}fUG7(x+(mCrH&M!Wyj*cthsWQzGdVVPF)Ws8T@(CEQt1@t$<|_9GR4~9 z5Mu~AMYx?+f9KDWUTvQN6UN+et1Zmbm}f9`)2*8jL;*xi;}NgP6AB-KuU)B@s*yGP z@%+~3cg}CSBEweH>{I#=adcZqR+BN)bkR1-=F@Su69)2fT5g?AMpmGjaQGG3K`Jsu zJ0cOwV@8ji`K2n=L)ZD?;@i#QBhr@*hcxnxgMV ze0--^{|CJN?T@9FDpqIp=O7~#gsEP;KYf+5GnK0^u)FdNjH zcq1Uc>5w!6zqb#&VU@U(qUrgX8FPV^X{j2#&2}XS(i=5>mknD`@5i~qS-1A!{@d3< zDbU!qZ&S%Z#l3-^cr(5m!|^E@@<(E=7*PDktxlGMxxNjnF1F6;Q8ryjZ!S?eZe4&@7kL>!FN@N9k8q`+5$h8+lC%gv59J@!jzz=B0U-Ow#or zLl`z4;{M+&y5Pf_dd<7we!rufX|eN+rj=x?vyu9?p}OJef@Z@SnYcJTh9P= z0^^`(-}BWitu!{Wqa^55`RIM}vU@I!bCaLQ0`0E(3!Q_*`#*R`SY@ozTAKylo>fA0 z%I+V*<&3%yU%rm=&Ae1c*vDMU(-Ms9>UuF+P=pqY-l^xfhtO-`xk&xP`CHGB& z5mU#P#Ek2@1~9XCH#Anw4tLm}BY}}mS6GB)?l~15gE`@A^=^!`9bYwod}M5TI;;0S zeL^vSPEEf=g}!7#Gs&0yYf^ggi(#{QnBl&_-m}bVWR-2ukVOagqa$inqxzP=3YFDJ z_3m(GY!5YiXXtVDOWJoFYAKIMq0quS?if36lXwrLUAHVZdBdoDj7_q!Igllr_f8D> z-QC*$?Bi+crX-rVgbItg8OS&juO`#*{ z)r1cYUb|}?V~@AK$>9IvqD!+5|ZI) z-rFkQJ-+XA=tN~@y^Wsnp^%KiCX+W<#Y9~oW4n7Qx{{W>(Jzkeb((plnwFYK*w<;2 zXJ$TVJB3*EqEXojCs(&T%Az&|_GSJ!cj4O8KVJgk>7KY?(q`6cI!M{s(Th4CvraD6 zAR~;+k<+HNUTO_6&b%qkg}UN9-iK*}BqUA|@5u+4RvMEYJ(i8n>5jXTwp@MS6lUY{ ztzvT611@5jdR`zCGLS*+qu=h?uX=?NLinTWz5QcNn7QASpZYzV@sO|fo3PT0PL9J_ zC1XUI64W2t)x;xNCe2^zeoWHIGfKA9-hDv5v^^UFP2W-9nb3%R=>DeNCGt(p1zv%} z&k<&O4avx4$CszX%Z>QK@f1d6o|=Drnog;y4#-f1$`y9xC!%gYUR#pJU-bGiZ8sLH zh>Yu@6PFcGSg=CEy>K^e*M@0Nf}PrxZtA5P3dP-1l8-+*psS|@AnF$>F8KMS*0}>y zv=B`z9`V8|WpIem{T2H>)ztA17sIM;wy#UyIRQZ^vYVLpv$sDJX|H&MBHOI2)9CXcy?SUV|2Rg*z*m9K2hO|hp7;} zzG~(uuK8l{5Ts#+YaK8JVRq$^zv#tCj#3eq4p))#+CBgRBb3i$YAIiU1Rkoro|%gS$J#{=fp;&P#ld48xvN*fW-kq!-qD!wwv zcBP+LyWq8`4>4OI4N+@bY1Nyw;Pk+$710_*u^!{i%KdIJ{&dmwRSSgt4b_HtMoOJa zp$1WnC{ZMJ9%+5CIpD*%5kl|!c?O@bn{cPT8W>?VO0b~6u!E`lU z(QfmrnNOw3@D&4>;Oy`JAR)W`=gZTs%S;U$<~5qB&4k#m?QZaf0-6c+@!~3k2fChj zroOcL5?@!!J_72%(a=;l;Br+KS~Eo%FnE8^7vb1aEmo}T1qba^AlV7luXI6H zYV##kZ=Gd$)B74^Z+=k)COE*1omFL0_dVO?l^=|*bSMI2WFw+X*78Ou52XEmLHAGu%; z3>_MUB(o@fdsv8!N>&oe$<*MjgGrr?@^*zTn5Jly(flAm-{Zrzro^?8i&S(qv1x z))1PGLK&~-xiw&_mQJ-HkL1qou1osy;mlZ8(9DYLGz^R^c?9zqaBH}QOCxWG7n|me zVm+PWv6aec$1$+ANhB(ht}9)Qg09zVa&5)?-})HP%w#zv9xR>+oJgL7cnSD^=`V-G zBtAEirg+}WdjBYu?X2ed=AdBB>-9lTqb^8n`f$BO%HfaoDs##Vzo zwFYu?m0vO3dGA(sPO6g0?Nqku$CI!MUv8m`ak=5iCoryaGRXKiVucrX15JSc(w4OU z11sgz0R#TinZ&VTs|L5zZUr5w!Gt09<3^$7PtIt#zk0@W1fWGF;X)5A5B5J|gm6XpAaVj#6`JET1 z6|&i)4*=cr zA^l+eBoNBCKGA5&NZjes^iMuqne}UrU`C?$l?M%AnzY2d6|)nV(}(`%Q^d;35irHG z`$C~r*z5{tuB40FY4;%8`8{V$Qh$wd)A7a7)hVxLHrtBtFRKY6&F1-&txsIWjd!-T zJkuNxjYOQ%B#tb%CE`t(dc7L^U=H_OO0YfOcGre&M>>S~kXQao$^E77%ynnWKlM*TeNR()1V_*rR57WIjDAo%2x#UDZGXm3}6HAFkzKuEXIDKCm+(DJ}}pBvJ!QzUyb zMXw!F!ixfp7x>U`rINhLXtwe_d3_vWR64*Y=v7i8a#~T~cT0Q*We-~?K+ygtD1!-i zpT+qcw++uhsDis-z4d^pPJ!V<-O*CRyDFQZH&e&r6rNL&G-G*c&GB|9<3_8o$CiCb zOF78Q|4Zn9|8%?fa+%~i{nW`peqI^mAV1YE$vJ6~WhSH)_>v9I3NCP+n9Ze~|6a_) zj_ws12|o#$MC2ct7@W+Ee%3gs3gq@wrnK?sBJ>)2j@@wA!* zfr*vA)PgG85eaP0sKS3ZfPd|@HTCJw(n%K4DHU%r%7j7Tz>GRd5^{N}P-3H+}os0!~YecMf(Zake0 zP)(J{0Y>|D`5xSJFHTTQ^ePON_D<8o$>4lkVJJtFSNbb76%;N)t9KPxWjCL%C zie0?-@`sVUfeCo;!F3L0n}M4m;1HVo5!df};=c_@iQDORq=~s1=BcI+1)TR^1qRyH z`=7$5dDyJ`nG_Qq1yoq}W$Bl{=Cm8lACRQ&I2y`UK={v6F-!YR;SX1bvK3Rss^{Co zii!;$uQ%;q{uKyaX8GIm${?5Uo6qSoAqRcTm4mFD$*n0r`nNw6cpjks+eg2yQ2$$W z{)5Q^R<3XDe7)ml?z6Zell?C0A{pqTvYgx*O#-&qpV~0`Ehk0a`47M9-yYUA!GKF? zrlH$?rjpy24Z(J7*R%sBG}zZVYED=emTlNun+RzV-p^=rSk8R1r?;qYS5dOl{Cf1i zx*J#*neMs$O~URE+{-fPOAE3aUiWjMf<3oxU&!PcApiaOCpUo4e~RgkqW+6V{%bd6 z>OYFhREDrrsm(+(&I=!OUcJa!w9^yh&jghf4&VB71=oNloR8_c_V+7r58%M5*$t<0 zx6JTT2Ac(RQM0c))G#UDY6~9}K9(Z=!gThHKm5Xd#+Q?NF~d zy@`T~q~(q}7w93xHsu-hoeNV;NcKwYy9#w=!nM;`Zhav)a9gwOk}s+C=bcx$yijmNakf;A9p_ z{MXL5PCU~{4@+7oGtbvMa-TDbJeo@DoKMTA?#Qcuc`yUN8#(>}Y;sU(|j3`{pPTNRs{RL6Zrp{XywQJineAC`y@*|zVaZHLj@9vL(yg%L_m=_`HwVK^* zrK;>h4ekpO^&j_~U9`X(zUN<@eLO$gUxRzX*6d`wzYIU!Nok1$L(%oB#1_bJse6wYNYQoMzU%K!=SLAB_+Z+?s*vB0?*>$y?BRtW$$xnKZDVp^ zxkYPMWxt;{b0!kx|M2KPNHP_Gv)JvuDEWJHWc&aXu4OOF|Ks}uE?+~CDn7q>_T>R( z_kmNzFUL~<7U#cNy;BLWw`6gT-QT)rHV9a{SwaNG->SefvHxHKtY+e+?X|Pxy}e5T zY~(~V>(f81=IOziPL_7*d-3~$DQ7#q@(=I*|9ATT8Jc=RGBFrr%_uS1)O%x3UxQsi z_tcMglOZLLtCPNU%d|1%lv$K35?OPD^Y!zk z-Z)%4*EA%U{<-Sd%5r7I|c!7*Y_q@L7AWh z4wWh(qtyO|UiK0myAmLKrc^xH0iA*RY?~GH5A6H&3AHCE6SF3er<3)Q;Fqv}j8C3# zkK9-G1AL>MH;{7=2;$r}K_iHKkpSCtLETAj+H2QAhuHLz&j zMCR3?M+i(n#wKObvu+3b%3VwrGfZ?Q|UP$FWZC9 z8udQ#wsB5_9WVw_t<>x|oomwI-Zd>5Y}KE@p*GOTa729MW1_fr_L(6ll)=V)U@ZLHFosu~1WRr>a@x)fqkDQ`Rc z9UuSr0XK+hLpoys?axaUDSiUg$kdeETOA)$%STsY_+U16vXj4J@}3~yrWg@sTh3el zO5*uZU79INFL`Q?p=LYB~)a` zt#|U{UKx*iMh4|8|5I>jW#7Ze3cI1>i|<^*7Jd7yk>uC!x{?-i6ssglHDx`2Hv+i& zi)(8I!1&O~b@z>_xkkOj;T()T5D#gmOEtyaenvuQ8i+#pIw80X8*8)VBC@L2$Hhvq z(*&cjA|sK9Qr2I{&yL&j%#u3DtX}D}v?I`Uq4V~E?G=|_hv={nzSsN;Bb6!|SW zuAq-KsLmEP8*~<7ehv@&TUI$^AJdShpFcqXP|6@$$bRFMZi#Wum9-JEOIA?65}gJp z5vJRhghn-|r$4)N1M!VltG`5Fi2IGlCQwecm7LNgyt1;|6<1q>aQMCElVe%n4oF_NG+KoB6bzD5hnuLEyG*AGcQi@o zEO%K^P2>qvNql1d0Z1F0H{&PW$0DVMqu4&4AG@Mxv+i=S+_ubd+PlznkKM8-t*@?I zWROwgHz{x5Itvu3V{-rb#58X|mqjKDSfhbJ02HsHj`-Q>RT1H=oFrke4tFX;Mck57 z2BK(p`uR#30NkZosJ%8k&^H9JrxS9R7&N6DNe%NR6_=!Ux2R5 zC7lunFCSjsi)W;}eHS2|tW2U$px-$_mrgf&DLF56kZW425CP`pGOWsfR>-Q$Em>-$ z@Ak_0@2o@1{cBm7pfS6#H~mhOcAOfGwHzu*tC~cE7Ie!;|MfO5oezkrO4DRuDl~w4 zAP|c#gH({fU}{10`MZ5dLOot-B?J9QILFRN#-g(<&i<|1-}+|O3pk>5y@c{5AQVElCa%GocQeKcgJy`PDzPFopiFEhor(Kx%DOePZ~pS@K~+u zl;>osCF~6v{_&MlDA^PEaj_DpxS`rQ^l+8+7;vdHWAgb5+u+^w6wjA5zW={A;~)|Ebgl!mH{Fa7z&y3*7BGY)NfAJ*?+uSnIv+z8yH7Bc2v}Vlxw5_K6n-sRcrZq z%Hmf=9D2l~>}Yp0cgIp`(g#RB$uo+8%5jUEEPXJ1^C_{&I~|;Pj9nf|7?L$UazENN z03l%`_0J<&B%dEKGdR858MOsXR;Y{>`sLr^Zw>y)UNv3o$f@8S*zqYs>VM*trwMdq z(SzfGnL#t$^HVoHQ8SXE%!Ennyu{m;Hs$j-rNQ;ChSliivHWuvi-40H&+SXbxY_HL z`Yr3W0bquBgG8gUSI^qRSO-LZ@zEfXYg@pYG10lQhnqV=Md?|GWUICKJ+W0@9~@YeQI#2K*g&is7+h`B5^(ph$HxCfvUcE z1q=DQVCb{DHC#mJsEF=4$x9K0Bx|$*?q)1Z(kXQ%Q2_-?woeE02H#%{_`$#tJ-);W z3xO3%Y0s^vz?DSaGnrfuG9iae0@Be_R-{k0fl@5l2_<0a*Av z{%nOyiUu_^dBDj3JV=ehnxH&yWRXY?)q^3mC%!-~6s*4_ z>(f!p$^DH_tK$p(c@V*Xd2_TN?B>H1C)A$~){bM3hHj~8_A-y*gcHS$2l;CwxkrcD zi@Wp!qm|ZtM%J@G&J}7jd1pvz|6ZCW{TTsbnMwK7;MF6HnW-E&5!p`F=G+)>1dNeu$xMoXM`rFoN*)CrF9ILKp;G*r`i{+Z zYhpja1m-K(^R0B8PwCtG)M1!#es?-wB--CpkA650H&W_Eu8O;C#*T zhl$!{ul&G8I0AtPI3VPZeq2L2Ij@)YX&_o)Xe!h-71<pIu93i;DV&-{sdHLB^Nc{SHL%J!rPyB7BpcgK5< zE8D97*H!pS*EyVud(23L9kwO#bLo{hWR&5S2jFlskMcd(K~{m72l`d>RR^Jss7zTQ z_u~EWZXhzyMwS|KD=k0t-dfGXZ_GddpbOxaVnK`)w2#@)g4Sjv_Q+;cJ|n0y2xe!G zQcS!PCq*nyBOb*7_-WSneRiLYFJ68kJAXNjtI#*`v0^&g$E!q_7e+N8H~{rXQE|xy zWkizF0=`(ltFv4e{c{Byql~Af;Vk?UsN9HSA7wXbTZfOMd-i_L}4x7tlvI;J_bH@GM_;WpF^#nQhH#_k=z7;lO(MJOe`IBq4HrjRbIy2 z9iEz$wk62azfF#Gl<`uZs<;9&%Ac8b>+2fDO`f~gI8N5fhPR|NbCx3bG@lp|jwyLceTiWRLZZfWv zgN*5sO~Sa-L>3eT)1DR+!horm4z$9Pp+hy24f(Hw9tUU=58={wWA)jTiuYA+@Ar_ubE+yp}JYyhh8`F0i*TzURQTsP=$<-f21c5aX$ zgG6M#jsT&a-B`d(E%o^0^bq^&pJY4qQN%}fpLdpeEY>4$iH?`3_b1=a3%-K3AK(yL z5aD)jUdJ}Y?L|EUYaiRbSktF&a@}^g_i~;&mPKq=8f@5{sJtp{_uc-1lgu;(>0zKy z$u(Mhy~HFhlafBHQSa%;OMBJLrHP)k{T; zVY(-Q2ADOZ)cGnajQqNYFZ0+1l27uS$hNww7r_aN4%YUZgfF=ZPh zPQkQ1z?wC=h^mue%Z;n?N9ki4Vaqek*+-_f_8$m_tRjODWX%{1q@+`1IO%tL$oEwi z4lY>@UU3w1JSa%=8~S02`u>s|bBfDARM}bS;gixqIJVGpAA{}T{nJUJ7Fk5moWCg| zkR9-Cb;}|t*G2MQj^yGutL?_MPfuowj6Y~5i8y7B*^f^Y0?XHgd7vl-tAyP8Sdkpc z3HhATDsE}n>$T~J3zi>A!$-?nto@*>et@@M>;fjTEdtbk0Xxvk9`@OIuXu6_G*!9S(A z*g&8_elOBN05D`axNpp(xa9sq;{xLhZ7_kdJTu>)o56#KZ#bJNzdysBA6ckfVT8SU z=vSpQu~Zwd=CWQYhKzC}loo-?Bs^wbQ?iI@zWjQ3{HvURN&hcqQM<<6zJ!IT4+v}Z zlaWQ%4SX*EfmQ;Y+}Sn#^)TdoCMRw&QBRq=lYC`+}b8tSbk70=|F~KAc-HNu%bJ~Q6*$vKbbV) zpt11)=*Jo%w*y{F5KE26AbCFQ#n##+O+1JmfmM=O$*4Fhg`# z(yb&JchGV`C&pzjPiec{%$;0zLw+0UKMmH+*EaFkoEfPf3rk(;-$Z&mHS?VuKiP-2 ztn8&=60Qvtzn$J$cV|@XPnDD_K)tjaFgK}ih!gX0z+AC9&u|LGi0|n%l%U6RnkWs= zb6NSip@qhWEIL8W+0V(JJQp+)OvXfmolqOKohy6EYgpOSktqYMjl!3eDpjJN#*1Ho z;NwD`Mh%YH_3qeg!1pNO2$%LKxz?Y+2FX2@Xi=-_)BRzkH0$K!rqRAL!~OXZC4HtB z&VOhlF(ytpd_Qyun1oxnnWqwaIz7c8fbelE$*#fDgsVxH?@84C07?gyd(bByL^Ok%FQ~ zZzBApH!k%h379Q(Ue!vQI>k6xln8Mno9*Cotnk7@JjT~4vhk^v{gON-y1-yW9&ZY( zQAm@rh>-unP)fxWKO$bBIhoFbYk7flvDeicNZ?n1J5G&uFX7@IJ@W-2j*Gj$~ zIH`O~luI##P?1OxBQi&(PvZz z-$d=#IZ!YSx}8Ng41$gYGbneRpm#av*GniD9Z~qQg)7BX*oo=jZr}zeZC`(AsN03! zN^50JL{-5O8ME~1u0^%O97AXlBm)>Am8pgv*GwMo19F?C=mR%39YTIZz3+6tn%+$w z!$QCFpKK=v{eWK23~)2naGX20Z6{j26WWom{RZ$`gs?kyG7pFg zi}WJ<3$=%^g>NdSu?l0-8Xu4LMjI17o~)9A!2Olk#5?WXNC9(^Vw3sCmDmD-D)WU> zcchg9XOwg)NC0&>Bu?XyCx`|tRRd)iC&xox zvy#|p(kJx|4PemlqAkPz!i~Ok0i6QPoU&3;0D&lhjqpo+)%*0v8ZcWn4&t3cW?rOsdhaliy1Pi3$6Q?B2@1BH2 z7luJaB%7>)ZGWR2FE@ypa=PA42?;&TEzq)FT?JAyONK(ynw@wE27U^uVum=VMb`7&hSl9WV z2H1@ilmaPmL{zskw2=H^Uv&h;A8cv?H4^H)k^qVU->e+QkAtW{leJTIM|c1n$z@g$ z3~8`ClmKeyBXA;?+py{s`o^TrF4cP%oww+8A4fw9KqS?y#1{{?=Q*8Bu`ce+bJmfY zsk_gXb^mIUE!EX2B9#F0|5qbhWGZ zFn2j+N$ItlJC+#&4x`*RZUSBdCny0-XpsNhg7lTiZkJ-ax zZ=d*E|4g!8Le8AGgqrf2;lX=r)5JuVD(^mTH|%!mW!f%4bCHU#(_6UkRwSOboQLUz zT$jW6ST#7}q|=eY;<^;c@Lm_2i0Ze2X_dKZ+Vy$dmMS(r%NwGgnX=xcL!X1KXvJ?Q zPXU8ouqN%3uG8Q;skpZ(t`B6^U&(5uTh9M1V32k$1ap=Rx{t21?%{SPkDRC8F5#<( z@jn8j$7*dEm-^!XiW9IaqZej#dUVUB_0FZ*u0Nrv(Fx<*oy?m-3K1Rxl_=x>Lm_M; zrr6@=0d@oBvyZhuj?{Xii$5|RVp^r5JiwYM6U9+HzZ}iE!ahq@gTSD9a^9MrL2o1sprN&1Stu=8hqyjLopLM2%#cTy*Ekj-2VDTdL^bKK&Wr>p{!&YHipl@c>mZ3IEM z>ZVMT3vPEtd#|Kwt2UE{8?DZ^$Z{D!Xbz@gd}Wp{V4WF!g^~DW5U=O9IXtq|bTzf! z9`_AXs9j#{?TU36pb)k^4Uonpw&tpRB*p9gnwQ&HNA0l|wl_b7^HEp>hUYH68i+6p z-BU@0Z=lNXbn$`N5= zMStf~m1G4uD7*7>$r$&|3HN$`3*DDaU&#l#^^TkfOVQaK_J}W{T&7iJ!B;kMy`o~? z8-Y?K$U)K*D~i=8∾p*wy+{Yt(_Dw-Qdtumw^4_Mi~B;L&DxmAv~KPvz16`kHU9 z<4j}D@RC%;Io!8!ZU-Y84q`EIzvK5wfxghSQ7AJI=}NiiHai;5?aZBbk;WY-4!U;; zVk?77jq3_8$Juk4Haj3q_^8wef%wDn55u_0m zkp@YT?hfhhZj|os`tAdt`#kqPS6%D(|8K3c&hp?p_MScQn%Oh6%im2f(BX~H6l<>o z6|Ar~cWQUp9E_XM8O6jI7eTH1{qnBQchi+mtJB%Z#KHmT;2eOp#RZo!^>M9 z<-TL$R;J^iv4CT5rQ~lqnP9dWX`Rg>mhp4b@IfH(J#B3GINa|NQ zc%8A87JWWnK78U)#jezcfMOGMv!OyI_ez2OE}Bp65j6Tr3)z~ruat7sOAo%##;20L zdc>8xvTrL5o!rlyoJxM7`la(!JLssr2anA>LvG=%-P#bazUc-BAvPeO3mq*QI&9#1 z%M4X6Z7k=s2W^y29h>nhotVrw@twA+-`S~-bwuQj9)6*Y{+{xxT2P|!ZNb}M>5VeE zRIwaTHdyBU@p3E}k54!(O|sBD{JEksE{N+DU}XY#=3c5qm`I_)Ya0z#tyy{+<)XnS zgBh|z_d5V27>Kf7g7#MHjBzhf4lIp59h;mT-k4xi6^|K;dxb$E*A$=+;wexrx5B0T z>2hbKYA3gBajf?7OZF1c!*ZR$s>`--!L}e?3Zk>3FTyAWz)A5~R0fi^%cD{;?o){$ z8{ji!>Rd`tFvOKIPrhHAR=+z5=W)iaRNn`}y$&(BXV#6c5;x~QeAwDt*?1O?#rKk% zCX!7GokXa2u}gI*(HhMe>Un1?L+i4NbGzkb)Sio!N|lArG^$?5l#kTg)gHd9l7kuX z$R9aktUY4Q`^I22vP+=IheHC{*{~|&zV^ZcSV}+GDS~Kbsw4+++8XKB+L?xM zJN`0?GMvJ!BaZpj}^9? z(wT~DC2sU;>oT9=0)tZH%TYL*^}%&}*0aE%`>WU0x%6#lh-r>yjZU`H!KV3{T-CC( zc-$!gbRu6~^aFljZj?pk{#nz;$Of0q(3fnkjY7!kVn>81*dFU$DO_5IEZ)U8$mxWK z4+zgPYS^o(uKcbxCPxd-din3XH*X~n8QJFC3xcI9{qMH$upypol8|CQsXugECEo=X zi&jnsWPt5j<6(S>DimTfA4`*vzAG>P!o8*{L#Z@vn(Fh+!jnQui}~f9@qFu26xpS& z%U4@fVg18nl}8>1-SOrVyDGdnZ=_IGN950scVg*cvLi;aCsI5GMaG8`(;~yeaG4Bx zJ+_=EEq|59+DZ{Vrqci+X^II8cDE|_x8*LLQ+CHHO>nZh&94W+8RE7V%~Gl~CWFr@ z6^If*3;wU{mcPo1%oW9QR0>~$l0>^2jT*HVQ8nPOtFe>uNyk7Ihh;H$rSa(50^Oyj zw5pTQNFZLG0m6XBSC@QHE^_+JQ(65~=?Ia#@FBf9=C6ouqzLEgiXb*BEwxeu+i(8HA=X%k!$0 zin37F?M&6@kcSAc0x;=v(`A!PF2*%uMkt{}?ynb&E$Lw@~XH8|LIB_`hWV5Cm4o4o6!gC#>LKQo_T z!i=jMKAvrfqB^Yo%rWc0(zQ~+ZX!1mtEt5o3zjjSNUZ;v7HYC2t|~gWSguiSlHJKV zu*hq`0y!`tT=k-yoBlkmtj`_2=ni@kugYDNiNA8p|0XG#h#Qu^?W6~U!2=anfjmCl3Y=~9W-i>#%rRIj#s14{iAm^BTTPqQHPC4i2UW>sYY8zhYnTD#$t$UT@;84cSbUy^saDKdDD z|GXmjsPZ!kL}U*qCuS+h9avQlG|FAxtPFgUT_4TYOgAnJ-U6vU>knRGT;5lZ#Iax9 zSBc}XR($n|yhPi8|K-u1&GN@@-%wPxrmHi7Uw6tO!SWnBRc0yAW5VX6tm~RLIUdX8dN}Er3U*`?hPGaodpgFyj^)-@ z`Va#xx*M&EF&e!z{<$-XaU5%*CeZP)tM)dp5-EHt;Z4-@-*MM%xcUN+>aHBG-t2Ro zFM|xr5k&zBtgd&CHm8&>M7qKmTsaReOEM)yJ2SMb4RXfZ#!UsKewUMrKnT2qpStn5 zWU%;xN8qhQ8Z?mfQ^o5E@~hHK?`=VoB{1o-9xQY`ciLYbuXfJGrhc0QiW5y%=LtWP zNu-U8yxI)YM!Xye@8rpUj76_%?!L32RN-=xf%I-n&bcwq z(}~SIXFIT=^}mzS{|jaAB7>B`wa4^^gbD1H;sCkMV~ohC;YV^nCsW@BP!sq!< za^0X-1X$qs;liT9H3uewnlDzH&b!sWyY%{R^f31c{(syjR{YnTf+GJ0fBzi~3uJ@o zrN=$tyjhS{7<gqQLj3#S>tTa0i*vgF0o?0t z2s0wwXF&x2e#yV#egr6>OCnTc84boT{0OkI-(oENBN-8rz|$Wlre9O$;TJ%ehJI5< z?EiEn{^wn@Qm|al0mIPCo3acKKqsWHmejzV&Jcl~S~7(a`21^@B-JD^|= z<+I;S@};&kp!#~(3z9!keOe6=n$3Q5nFB`0A4s6gqK2N}@gElzt`dwUFRY*Fn(WJf zOeh!DLTLXjFxRyFKV^69fG&3SU7%Yi;Ni2@hHZUG?y}!Z-V~XF%2aq=bkau}&^DT2~h2ks1^=a>ty4T`fFpk3` z2R%D{q;RH$|8qe9LyGz${&ZAm@Og!SqXNBpl~x>_z=YO93ImX>Srkxy;d+-MnD$R9 z4pfsDzc1P2>q_i2Z^_GJ+u|AixmU_!b%D51>C|(tvT-86C<}V26?g0Z^Fz7D=amjI z^VPI+9k~@eZ-a)9HQzec*zSM%q)NIKai5keqeZ$ZcB?jqGpF4^dRgvjkw7|F#l3!^ z7;TSKwq%}R1JZ*rK3%c&ec_C5bv9~((|V((`f|ge?=zPzet5^_7ad`1r0t(&HfxEB z>$P7ols4Da51cDN!QZDAd!=2tP0Bc$L`I5(O^koChhbVrF2?!45*z=uB5>3XL5r7x zp?D-z$npm!+Un_<9iCK)bu-PtG41LO=c#~iauI0#rS;mBw*yzmG8QHq)EV(~-xD~|xT~2R#?Vnloj8B2K@7#yx7PID#Nyoct>tdL zW`#OftzB$%(I4w$wyo|Y(iUx$&TAe_SoP~G@G33%C>T{P^uBo$TgE3=AxM=XKOpyA zZM7ucP9_XZ4Wa)4OTKAnFs*#yDVa{_sywJHaDNmP{;ymBz!ds0Us*A9?GHK$RF+8- zDZDQ^BIJ>Mzh!THv`|S)!abbq_o(TEi6)YNuich^3?-{m2%)}pjoD{0^y0-qDZVWz zBu<(`zPTiqkaI54-gj$P{+odhTmZq86cwuaLE*jqPR_A??dirkw!)(8{NabdXwZbf z|3M@?_?NG%cn(=l!byawL0U`crqk*Sl|8e`kYyL2)sQd+BsP7#uR4!d#7|2T&A+!~ z{s#eVo#l9>EXy}bT74%ca)77GFH>B{?GNG$bAzqOhW(@q#Xa2n!K-7y3i+{!YdvosoHOWd61N*^SZ7)`X7<|U&S*`533To zKV&=zzcTdILEP{_iD3M+RNPK@PL1-*3r~rN(#x&r_N%gdaZ0DpesA;6s(2Ij zN;{klkQPM9M27o9=+jB!Q8%p%-NN$X=}u_RcdWQKVloc?onWjHPm%bHKvNjJ!E}h8R5^~ zyTX$yHJ?*BviU-{cEgRlEo(G8mMpO#)h{)xO_yqIA|KOV*VJo6JM9@zBSg!W@M2m;d04voNl{jT>oZGQm<`r|)v5|Fl%f7X5Azcp-_uYvQYBT9Z1P_< z5G^`CM&Tpjnl4PA4!~;a0h{(k1XaJ%Yo;uIy-$f?Y0rKXH8%kvbZ|1>E+Bc5cVP1s zy6}27=hcBVrC>jf=WyzsYeQ`T@X>u=V(4$xGfZW}h5UdZLG6p$a@SwzjL9OaJ9hRc zHpC%)>t%bxbc~z2)mze3*~Yv**GYST8e5TCPhwwL#d;LBo)Jm)(KUPJGat*`EZNc- zIlsnGj>m;t`=Y!_@xEV2@m!{XLZcu09W1(Nh8m!_?7tg!w@z6s2e@%L2~ND889X_Q zzbuibuojRq`pnepEOS$n!443bm*7X%|7FGh^RIWJL<-&|rJIhFTlN#@aMA8|PSW2o z%6-1BRGQm;H!Q)qtW;tUwmYL!h%3Jcs!?_r6@H$cxRG%;;*IV&A??W1^NLV8vY^ZU zU(!`oHs`yp*`w~V>cjX41JkK)WLP{8d?#y|nNeT_`}aE6-z}TxLktA0#BAJ+6e)@! zgQzu?f&@c}6o!MsN-Y;=ozmgBnuXo*-UloD#(kIptJt!tsG5C`nNUv=J(dPL(!|R# zCf4q}HFlosCL!A@Z%VzO+an+P8dCWDT}V@j#F2(V<$K@Hq#}A`eos|)CP^~w4}!!$ z{!ouIxXP~Wab8|@l~ym?6EmI@9r&eqfh87ziwh8`Zwj3VAbj1P2bYN&ApYm-aZylD*>Y!mGYWo~83} z=1jAM;tLBILDd0^HDh>|lOOjYoFg{^`Dl+zlFEb!Yr;wghepIztZ6sWy0>1)2^r58 zB(D~>9jHzEaD=5RdZvg!qzVAL?LQ64@>b5SPBHBfeFSIb1VUiyAdeW>3`K)amVaVa z?UzJ@-X-^~r_GlJwKn-^b6^%B_KRbj_F~<@Q%ZUrC67aL{wbgqCE}J4p`f5Wz23`? zo9Wi!*5bgL!H}rqr_oZ>gxcgPL3`ejJ%%JJP8Q0KtK~U~j4)yO5eTcDOvfMjvmveJ zPk#U<dj0SMZ)*|QrDLYJ6O^84O^rB`-`)7*2u@20rEjLv6x!?;{X{6bkDkCf)RB|_aZKnDDP zqCZv16FuaHLAD%D3l)~Mi=X{-1khb7=Ky6lk^IFTstncxkB+r}keZqXlVSUzx|at)XVxF>vYq@Qcx+FcJciMJT1oz+X#(WSdX-3&WvM9 zo9gSeCH19q6mz_J$rN&+1X10awV!agt;DC9@nk=nkUlf!f_A1;hBB7aP{xR;d}=|C zA4|c4IX|96uo`jn0FyuP+pRm#h(I^ujZFNOjkEX)hrN%FTKuz=`zAHovO6El2C{9f z?QZxw9gj-9(h-$SV(-Hoq7ew)G|Z`8-Qj<1&O6vZA^n+E+omZPokMIy4pwH!Kl=tK zyP5}Y#)bZXC?7g7c(U;px#nwIUl-c*9|Hq~GPBpS{0GS3*-Hk?I*TM2_RT@}{WU%B zx0SP@K7-W6lL7$~<5z|`##Bsg?Egnc{p+V^9uZi}0E3Uf1D3k4{_>V5J-o)+o-?feKGQR{*1v-rcSAp#g3OdcOSI1 zkb`@LPAn!}mEwm^N=Mh`U6IN}-n;I@5l$pB|G37scBo~)tH6E3RgS`9B;P!++Co+P zXZ;G3!O9x#)WX6-s=Zw5U`cjNeSIFz-QU{hpCGe|RqZvG7c44L4|7i~cyB*NdrGBv zX6wls^-R_#+w?N0pVS7eD90U31j?B@ymysvE*$dcm3)*VxY# z@hE|bQYb2wpf3JzS=O5i_&OGB3&_`w)Q_wSW-5MyrYwd1Tn9&hbM<=IotdI~wzE9tlFoXl13=B(zQ)@)Rvr$3kY?Qa~4fAbw=AUvTJ$2&k z`!L70q1cStl=VtyxyMX+-DGl!=3)e2euPYPUH`?L@IV`HQ$ndf{hOJrqK$J~wymWg z0N=W3ynY)}bB8U9c{eWT76mjZ@Y;FrmUfL5^9oEP&tS_(!%b%zOKEW#pWzlqu2l=L zzMc20U|n|Q+25D*T5(@ltQNHbBtpVllEWxS^+mntzNRjjPW`9=>s|MsadAmiEE z>-4!_4JEHXjmp~AXd*7LcYbLLL{sY@rTJELHb_$$UE1f|c3@ni7qGFpXjpYsX`?jt z1~i`g$2d~ZeM5qtkNO+VX_JoI$_%ci zr7l@Y45_b|bI|dmS2OSVn#QqjnpH5AeZCma+P~0R*MM?3P4$#XI#lJ@@;cwoc|ktO zGC|EXzT^6`Meh57)O+RttS<9jyey---qCfAy}=qm!wESVfeFwbD#Jd(jdA3JcIQ{~ zP~H}NrX;SpygbM(_|B?n+q=nATd80^T$JA&oUrV&G3ZaiS_ICq^UoMb-}qMZeR**) zjWt^}U44SJj@~Nzx7vhg9TuRf=Fk_q76MOLce1ZSJ+gIx4!+LVeOLMR*t4=v)$!bZ zJs^d%r)mn6u%yEbIBIyYiTME2{u_V3z{h@_d*i=0H&N>nl|McteRy=mSGeBXw%N?u z#x!%FjV;K$zgA#@!40LcclHE~D2OxAuk zOmWvc0<+r2yA7xn2P!rl@eAjekoWySlc`6jo zU5hgi?_RfrCkFd^Ovw;KZy|>A!`;Dz&RO#dl@zJ>X3+PKDhKc|l~h*D z9bed696gW`eyb8$=dQt1wTBp_WsFz#^=T)ch7I0W|6$#+N&D2!IZ4RQ1>X}1RZ%=7 zhwdD&xSUO+{Y;UE*lQCQUX)*Du;Cq!?K_jnMUGC}1dWr~3%HnOSb{)fu71Li?KoZqVY7-ERLDHxG|&it-EfYEU^G?1NJC zE;oVB2aPZolsv8S4g{2B*FXd1zxAXq6+?y^+xfl#7i`+~bZ%^K$s(`RcV50IeWg$; z6je9vPgEoY=a^tZIk?3<;J`=j+3kRmow1dVTSdVy%=1m+#@4NoGotWvtM7iaRE~7k z+v2d*GS4o5Jj6u=_W_+6n)xgwkicNm-A`L}D}#M(U~IPb1q;2wlB?wO1wT(_Bn1KM z(ewBFsEQ6t7~Xu{+zs0yJMhDu!3nCE^^H?#^kz%0>R6&fJ-!-mte;7|g?M{=uWk+n zOYFNzj6Hof5y zGTf1L*USU>=f6IrhJY|()?4|TH?$LZ^wkJLT4od`Y!`wrKi!iy$X{Z^x;i(aak~|# zo2OtTmeb<+`M8K}NESNu+m^E*`UG2QD;Fe1P+Hu&}nHI3%0f*)ozWA^Ls{ps?~mo@C1c) ze3E$aTLe^8R7hbI?z$;-NWI>Ask4zS7>^7G%|P<^(go(+76k-se$qLM>zXU?+Dj;P?pYl`@ z-g__~((|*W>W2M)^GziD@T*Y_amB}AqT7$ahd$_*uxf*YE2o{F#01w|Mv|6@Gg-U= zz8k`ptCzxklC_0~&*r@H?xH0{wgl?9!iDS^J+!^sEs3K?7c2`RtYbQd8Y-lIO<8o~ulY&R8!0d4Q`zMLc4{UhR@Dwd-0f`(c-p_0ITc&f6V^i<8cF#6$B6nEY2 zQ0+0TRVzM60l0{)Nn--`()vh-UT`qG0K&c(<2gT%?jkSX4t*D=bMHR6Vy`SbvsPNGJ+?UpKZeZj4yn+Jva* zpC?1+whz!Pm9lKSgvPM!n=vw;WAF^L;6WkG6xhKP|`a})y`}gD* zzP4*u^`VIkd@4<*Duut!%fl#NudxzXoO>^BEx(&osdV3ZjY+E}HYK52{1(dXwo59m zKt)AG_5k8F%wv^Mb2rZxWcKb+hSz%M=F)+7(pk=|M@uS3Lj~n8boHnH4^jU2C($be znIfr2>(rlb$YXp>o=c#hW(bt967-8ku<}n&^PC&$Io;))^xsQK_w)4{PF1O zvsjygcRX(|^ja>kaGyEMnA&W9wEkAwknA7r{Ko5@psYW2DGr`@cDalaXq;N z|A=YA(#g6kuO|`h9|f1h$MWahg|+o@#}chv9t9>;)mMssc+o0+5SWH(tC(ETmp!@$_{6OyfwBYW(!%Y%cKA!t4Up zaKcZF!>tkc1~>eyN<22V=k$+Z%ICKqFZvO(! zHs5Ek8_5}BJyp9fJ-SV7oUDTz9;k1&cM96Qdz!neWAqKOVPyZMm#$FlVO4jwYYmMcw{;Vi*4zdz{fo?0> zX4;;gG%=OzC%?RSY~X)B69&)uOpzLbM!*{Y^4xw6QQ0d`jLsI`Ig!m!c=ee^o)cF_ zAM4fcqzgtcB4Zc}J=vrVzhR+QfQ6*w&Z#Ho5&e!qA^d}~ii%(7CxPrPMuf4k{m+=0 zG2v111(tGn6!7}lIe#5yL&#^IDu(`9gyVn+%Wpj!4!L>3ZP@#6rFSykLl5PGAYoH} z@bI`bL`gwGF*>T;Fy8*8N3%-Cep)ZtK0&y1Mkj;kLn1 zlo@IRn3SBr`O6L52-SoA#C5{{Gx~r%>fw7pI@AX@Q&SKF_J(rZhBfMsqz3CL`32k( zw(&$U=!V)qVbo?X>HO&6QTfoH+CgN$sfIXcY9Mhvg3t<>fKFZX42S&}WdC0f z?_rEC_NdRUjZ;iSOQklUafL9{NSt+9>1 zf%p)?n;{2*A+wb1Js+1VVzFDNC-^g0@pr;KdQ*gjG_eJb+CP*gwKfboJabtsJh1kn z9xesh_6)piohSpWmWlVuEvV z!G824U{>bGcs=s%y2LzY_|98!KDUM!4JfmtaJ974PE>dOX@dvp#QI%2Tk4VN(IP~` z2_7iFrxM*_USt?ybK&S4Dm70H%HZku>yBDesGuCrq2{KD;%hi2EO`kjd`NNcZ%}Hdp!g2=)z+P#<&& zl3z@9FnmT>dnVZ8GI$XBD&*OB{1J1+sx(#`WMlI2M&%wndDIc}SNSz!uDY!$OHyt} zbQLVX|>%aE#Zx;ppKX>`P#Ie!i;n=!}O_8$12HVBu+5HU4s%T`xVPkCMxS zd@Sa={TTK?nt!%@3>hP5UF7Sd*!|Fc_UPz{a}`H!&x>Kp=mEZ9y^_Q7Vh$#&kIkM- zYz-c}Pf{GDp=%FcFh844t{F#ern-Vf;oLQ%$u)jtsgiB?C;@$@njw3J*qtr%)QL&9 zrlZX5Y_O{BAcnWLL$0|Bcc;|wyekG@5MMC*0*M6n-%MKW&-FV6)oO7s<0I$YwD081 z1T6OGJV6_4N&QzYK+*>2D6+FR>6pQo{kEhLw7<}qqSL6bd126b{;CO&(ShFSXcLP} z%EE#k^(nU>(qp>0wmH%5?QQ-=Y8BZ6Jw#@+Nd#OqMwfzEd-Iu}gDdi7mV2ybWg5QW z#aLDgo$sTIO_IbH+M@>^GQhn6&6kqd-G0HvgRXTtu8P~%m~@J82W#&4BqRc*zg%q9 zqFMg@b#L<6-Sc$%0^Y*TQe-o>ye~@y!>_~W{*CGIhAFYcRz}Ug=~$xM4Tz-CsnEEJ z1KXn^4R(9f?v*&*?Cgkd6qHKY8Cg*4h0b7b;--+8HK=M1!ee`Sv^f*PklPgK_OjaP zAnD>9=&I$RN;F__2{x7v)`lABYN>-1%MKilP_rkBg7epjn*wy&8(%$_O>!u5%vG&@ znk*XPpFa(n779gl$LZ=fBHUP#X5e!|kXh3HX!dU`3CL~(f3UF(Wsiv8^DELr~Bmc?cLJ@wOf?|DVZBaq9i4#d4V3Ha!X&d2^$l|4dA#N z5y+41_i?o^{M(|_glkSneI39IqA!UdQ4 zw99Crvr?AXmjmr)_M0{O33U2`!{2QwJppWm%*HCPyx`Gfvo$K_l?HRvxn9EwvGZ8& zl9rfHAhMM{K0X*}$}21k{AB1Q68yO-yNq)BQdVzBgi(3;omQH~afVhpC0ACKNGH^cR+=XSldl}lBKqQN%l)!0JEl~o*yN2ut_F%#AIIIB#c}}wF1!ThsK87@eI3%rH2vD!dt}Wi{oGVoaS=gz(7QuT2wxjvTW2<}($Dz`s*(k7ik$Z5wD= zodH#V&4%|LEQhaoBVy#69GGC)&rDahCh%z%t(Z-g`I|>G%O*%A@S*^XqTpWZwBRGI zsVM6ns5&nQf7H<2ERtJ*>wg33Y5=4Qru)?C`!^gYMzjg{NVsTfdqfk5!|HR!MgUfA zqEoSnWv*ii{=0YYcFs?jxZN-Dd*b;T!l_1fmJ%Sg`8n#<58&aQr)nDlb9eKg6Lv;@ zSuX;x=KaqOTzjf= zX=mBy@tR;F`K6anYYZD&r%o%~v?qfgO!Bqh_~_nk2AfYq~~o4?Ejtxa23sNS4Z7lqW9l zPY-I|O>*J!8ck8+$+@?gpA_gbwN%1Q9l!3L)#aT8Ts3=3cp9_B24B!4 zO{@O>o44U@b3_wOf}mRpIF zV!b^0^*%7KC}=8xnVlVHt~uD(cL~0XokO?YdnX_WL>#~xCnhW8^)4ArRIq@~kRQ~_ zt?D?c3s0%5kmi?#RH65Oy*&X934kJe@H&pei>J~~blJ1eP@2R`0^}h$KQ_yWE#GM& zq}pG7frkgt1N*w;WdPWgIc+?l)vO2-^hNvmt4X55flM5;Wl<_-pVI5&jaEbk{@d`w zw?Q}H_77Vfq@j5*W)3G0!sXJiZ^`n@1qv{*SpV#BLvV}N^-YzzYH@v$vHZ}CVNaaA zeXqFDwyj`i91q1?^fIN~=~4GtkAR~WeXLf(^BR+&z3{Kbwy@RYu|mT{<1q47(CdnG zc72R#b&IRie2t8^WxUq{Jx8NFV3Wsrg&MSz;|anav&Q*!?;kd46bFu2mLHDi-`S)O zfixP{eb$y4GOad}$Kz}_S9s^1j%m8`0IT`X17P`OEy1x(0l;@muN}!!&!n~>qmJbx zM0vvM_eokt<{>Ygg7Ojfd0a_*!QmlPt;z)v6woLQmw#*kBkwCwcRpaRl2}^kh|nG1 z$6YXzo~jO7k-g8%q~f$&M}R=qp07NnR`w|0 zTg+VATk2{W(R7b9y8G_lN0@S3B?3sncArW0)nDBmFa9L|l6ShGp6?j?zBx6o>{a~P zp4woR3dw`-6Qx^Pvp+n`?5}E0v(&~4lxyAMXyYdhCsrrShiXMX;C#qYuM}w&oTLPl zz3+Z;0dlPz`s}u*U6%)xbn8?T1%$Iysvj*bE~4)u&>@5F5d<`UX@7~oszgyP;&O53sSg80GF(cM$sA0D^S+fh(Zgs(jB z<~uLZ9-Pm5-faz|u;0az%DUb)BgF#-I!sC_Kk3G({r)@j0Rm};5tU-v2B%%)P=}I@ z(E{(d&%qjr^%rV~!}WV=xta|hlSOS44BI|oQMsx5fJ!~JBkBSyXasHCj(#fLM;3_U zWQ8pTXuebbvq6;DM$@5hcxHxhfl5KfeqH?G;||TC?7*G}*o_;irIx?uUzm;;$wu&k zr3WWSZVp#hZd#*jf;N_DqAkp2E(?ryo1^|<|2n-#c$CNT9H&3!Rp#Z!s?%MmXx5?B zjlN_GN=51rNnEC%^-W0Zc~>6YG=<85U+?f$=JC#C?t}&RZtl7dh6|x*B>y`C7NZAuVIb2mk>5nS)WJ`wQgdadzj{$1EjCx--(*ViUOix~uwM3Qv{{x%~bPX`Kc*YromYZORydjR|# z-aqqW`CG8ib5Ib*1S^n|o9zvLQI8}V_!}kmr{Q_5z9L&W}OalgZObZ}tA^u_hcczggqkDnkXCMIt0AiZTC=mKVU65|{{oY^OMPemgHM9BPONWd zrXctaj#T6pV{)@gQt-14^MqyhCDIe~TTDzY+xtp;sa|n!sxD}mGNkuaCL;T* z+89z)lGA2qZpCZd&MPeT4i6X3az+;kcKnd2$L6C~rK+kz6zml~ZXXarq}wvU2WRfe zye7e9%>?Ibbl9Ha_Z392+L=_S>W~+I#=rMA8J58wXWmU*k9qIS6Xw($O|DRQmDWXJ z5-lUfL(|!5bMSG5&n0?!4QU7!ikCE~^yIm-*N%qfm^Ly?dQCqzBBI<3&Z*Ei6r%s3 zh!tDR5R!O05&G|tH&g%y=^>)+pD5^waB`=eIsy=}v7dM<7Sb}wBQaT92NONB)VCz< z(fgP&^+UdAP$Ztgn0Ik6A3r?A4g)k8qh1i;`*LB~KtEg%{3=-qZ%$_B*i1Jdi>@Wq zX(kA_wmIb|&MCWn)6eQlhdi=z4tn%6p)+-&y+W^Qtl0kXX5%mcq4A@5x9tO@!E<_6 zwyWo(q`O?vqkd6Icoh7scsN)a z*?9OtwA5^#EqhC7ALM!UbQt?~urI^>W%J__K&LgM>f)o;1H z69`gIVpMAzs-ny+xB40Oi|!Ruunmqo zvK|?KV^sVR(!&OyB|6Og3=ExpSjOH#{yw~}cxQjN#aY^2Svi`-t57|bl>?bJ7EzAu zHhR3?01G?2kcuEDr!rn=T?f~#r-bKPW{J3^mgw#%;3CQRA00{>t+9Qcdr@sim{d3z zx7qCJMkiEAf|Gylk$nHeFHTOh$92RgXN870Q{v(AuY0M!gLwG(`3H7Ba7IIW0&{Ms3ZU7 zosWpEl^>_aUY9rM6M446y?ZAxyYq6gBj&r8C-(hwTBl#=x9rUyl;FSV!w@q!^sidc z*kJW#{E@{@$|J*u7Nk~hn-G6h||QV<{I zk2Gn_kOqm~*%9G~SVHuTKLo8D5PIpP;^AO+TH=}WeB5PBN`(ofY>q#c&t~C;)8RJ1r^8D5tag^&M2V#tKvVGNGj!Cv_C`Lb+u@pPdj#RilzE z$S0)l02Axf0);Se;p?L$O`B$~U3jY9ma2Tb}lGS>Ka5lKbw z*o4I5I|tjoM!v&XyVw4$ktnXJqu0r*?ITOJ21@yP0-8XXUT@$VlMi}NAAD}#G2VI) z=Cg;OJ#kI7p=+v*Tpj(oTd=(Hq7&$_9uJ=57_mwb7IEyFBr zUka2!Li#)0e4b}Th)PKQ^Q7zu`&%Q-FKp=>6-lc&p zFOD=47+jtga#)>8}rLM9FU42PUwgf-HtQB)+=zA28a51Az4+OFBu z>r>6rvw@rE8lUcdVvL`S2xN{3|8~?&+`w3UGx_1&0Jw;Mb{P|7vcDO{$mm7g9#8`7!PBWj_EfdkujDpRattNu=iL8bd%pL~aY@hz zD`Ko9(}>UehTC3eO~xl z>B`e6K@x260uG@^?*L@;{@TucgXuqUz?RUC2ylHH!}W$JDd8QkPQ0#7(LU&3Q)xs6 zT`+*uyI|^a_pb+64X~E)EA)?qB|-a- zUW#Yk21FapG`;cs`0;^b#e%Kn5?Df~QPt>!5@WH{&7)Sm8SsfLAkkrm80@&fdPQ}O znlRq%?(*Yb6A{T^(LhZ4sMV4vp8b`epy1C9yj$i8x8Que1@LQpynQG~auX5Wgwr!I z35xk0g56lN`|!>X_EDA09!ZX}+8v+baIz^93LT1j_ul{LXd%43dWrC#+lO8=^WXnUAN!VXED57JYq&= z%_}IPCwELrk%h;M+t7mQSJ+BoKD4B6Y@xfgHGTFZJP`j~esQtDsZH7i9x<6;iFx&f z<-!i$Af-S9Lh^mc9a2V>zTuu8G!PJLth?*Gz1^nEeYM3m-yR09FA*-{|ENi}!UlJ~ zJC5phD80l#o+SVT>o|UBeTSz9csTUiqU_(KLz<8bNvszoWi$3RaIH6pZr?@3F)^l66zwi5VhOeSCHy$hHzJoOc-m!XSON69@hQ?VHTdKS zWNd`S?e71Vdz|c}Kic|OyH7|J?lV3%XkY$H-6_e@%4N3tWjn1|x-mUslaTim zhrY({3-)4b?6cq~_7wx~1ZZ9LRXFp*a)0Vwa0Wa)QedQX$$fbExvgMT zdh=q7RP}Jf7K)*ElSsstLCfl%0BmE~c}+iOKD@(b?HFRn^r$ z=Rc!5?kxzH7o=(#e$(Xr*zvZ=fx{GPx;^a(77j# zVEG^upn%+m^Agj6j3TVWt!o=5O{+<&6uHiC`Xk2V&h9{@9Xj4% zJxk1^XA)F2bjIvn^iD(xByoL$hhKAYM{p#LNxaB)e;k90?&_P{*2yt^UEi==xnxi5 zFzP|z68{sfx$5oCv5kyX?1z{^oh$2k8A=DoIIr^;pEcMu^;K>oA&bmZyw?p*c!)0f zx=1}w>-J)I3}Iq+0@ia6d=Beb5My>Y-kw27V1bNdg42kYPg|S?_@!PsYJfE1u4pzT zsc3Fv;_)Kmuust~C9qHoKQat2b20xS9zQ*U|0?La3HEXy-QV9zwZ{U7-*`Zja&^c0 z@8#wD*P@`Kg`gcn23}8=Il_PWf}K}TAjg-aH&AO>YS$V=p%lxyvTyd)6TNhOG^9cF zwN7IwZ|f(rjPL@_F$PYUPbc(D%g>0)a^bbAtMCNa#?%J=A^YTd!nht|cU~dlGM3>? zQVp3f%jh&+R;%(l61C0->575M9Pcm+>A41YX=aoCa9M$Tgi*Ao+(O^wG>M!Kvv%GT zKR>B*n!`#ylkPzy%+s2tULP&N1;=y>H;72}W^UaY9ThUac%FmGR34coq3tECnsAG( zwTT6kbbK|tAm83ODRSoLNVoenI$efs_-KW%Sa!|nf^s2S1;U#1b&JGVLVs|HY=^=8k`>(^JE{ z1^PXn2GGe=&!=VlBGj(y5~C6H3yGRHMqR`XK~m86{jy;~;L$?dnjt(R!QF?c$y zaWNxv%P6$*Bmv>s$`c}wFI_Fr+;i0Z-C45)KN1VeroNTh-#l{-+N=Cti?>5F9+1pra_f3dpR%_j3 z^b;wD$PA;(t5YV)aTnaN0j{r(<=p8iq*RP4`R@_R&(ssc$UV6CUr*=b5Rg${vKl&nZVS6T7ahUKPN@5+RoiP^-kxgb ze!mbk-@X^$hX4L8 z!DEMb%WJRQogm#Y!>?C)`avZl!s~dcK&R33y3I6jpt#~LqcOeFB}_l}4~-)vMx*P|F2`HN0gSv5E?$Jj`%R8^7}y7@>uRuYOg zk>29+z^c!C_jY<(yHu}&J)S}g^No$iK7UUgu|qz%MOV&7iQ4N_gr><}#sH(h2-l>| z`wi;F>nSbpNp2u;6qmuZz}FsFZRg$z$RKE>OV;c}$zxa764kEJIC)kh*UP&L)Kh>8 z){U4NO5`vxwy2Y@LZqxfc&;{zI zyW)fWkW{4$HzT)p(Ota&2!{#?3GDtkHS}7A-00a&64y?Dlzh(8OA9#}qF|GjW{cCh zDckWytdRJ;}`K=4;wK zSJW{~;#IV^%JMvZklqw3(?)W5_$+p~nY>v16M9STRjzK{_6hV zM)CRvBUhqhVIcGG31R%{v*aJZ#Zbuj3~)I5&Cd08Bq0}u2}#WDGK|F)n*lku#oomn zUIoG<2s-9^esS^V>UmHPfaXbw8KniiS_QVYz@}HQ&hl^UGxW3lHL<{ZqDR!#Yji9U ziN4sMKA%~^R)M0PmR@LIHy2yIn%sAzA)7yiy_|?x(@i*@ZUKMb`f52sLDf^`ICS*Y zhTL?eo~EApuIE~h-93-Nx}^PJA=ltum3q-xi%>@(>IDG9&~Tk7QjP(rNpg7kpRQl9y12EOZ8kG_jS((lbOndC*Om8E_S$j-p(KpZvjxCRBEMOvIDoYv=Vtu$cu}< ztvK>A=ijEUA6yFwDDSRz!;OSt<`=Vnccy=Rt_K0`ItAelYJt~tbvC^x)ZI8P{nO#y z5ea7Vmy3YY?#q()fYXt&s@Kjg7m27C&>jds(Oc^hg}8(5<~vxZ#QbA@+-!3Fo4H#U zfmCS?@+F{Fl#O@M;flPotmXV3w*U~kx|f!yY(|Y$*Yhm@5;XbWFlUPgeFezRdAhZ< zaDCoEn#PHe(eiFwLANalKslJ~uoa34k7L^1r!o>Uee5v0_B&@!W--C9UR;D%dy!@e z1`sfe7)r)xs#Qs_vHnZy{UR(GwhsWf#wztJCZR>0Bxkw)0d8nt=M@y zV+ZagcU!ZY9#?3XlR093ZL{YpY${yaZ57(K_6!YS%|I8w0LX=bES8eD)IYfGaJFym z?$+;b6v>30UiqW$Io(g5@a7D((P%$zkD6#2TL45qQkvsduj6$9zkPy4%3V_Eor0pw z@hd?l9q!$zyGLdlKKri0M5h@7T4=qJ z81{qccF})}WVMr$3Qp0b$+)o@G5+$;R{aulh=wXG`Q+1kTuMig1|A+2T<@%7ymb>fFOIv^Z7 zuHLR->HO{*PAGDHl?S28p^<)}S&GNkHQs{eJjAf^B1Kuhcg*kJ zsmA#TveH|8!jTj4zd%#&uq*B0Xjq<@fi9~;cd-Ht2i9~SzGySm|cR=UAv zZ=+T%I?0v6LSnjMErr#2$&gWV$E_g(PfT9q2ep+-V_lt03bP6AJI*J-&7`G6Ie0z! zLhreuSNqc|o$4e$BmHD%JzB&Sml%R#Lf3Awj%y@aFpQ3Y{oUs!f0rQSE6VwX-&Gm> zE56%Y6qE%cxUlI|7p@f?OEa3_raXtQapa9_le=!|B6jsl#zxA@^{C@2{s;a?yble` zA^M$b2?3}j!aA2>d$(H`+$~f?M6)9C|B1Zw_hP7*+0~7dTy$&2fmZ%`bwP!yjXpNfM z8dAJ3r^!Drd9Q~>@N*Y6NY_&Au5RFIM+_2rmGTZm)yAD%#E~9#p2^tCGrqF?6k`~* zqBUSCGarUUy0+bXPSmK)W?+7MVONXu4Uqeq_x;P!Y@-RmDDXPoF=FcQzaapM>8?dT zuhX>~tOoDze#dY5?JGaD?gYQCY(6LX-QSP3Ig}y|P%)-nk_o=?-8<0p4m#=C4trGq z*;FXiFH)%YF$Crl03b^{2gPZdh`?-eIej*g)%wL@2Ko+wSeERq{t_bLHt6DVzyqq<`Jl5mBnVsCx+DN_h<)vMS1YF@&jEe0^eHg?DA#0a zNXMoIq8GyGlh`bsY_#(-}nremVA8cc)^%HsgiQtk*b@lTl-OO5NgJcf;%uAAe|& ztMqq`*-llJ^962BD8x!(<{0FofgW7=x!#7ZZk#h`Q&>8GL_g@}7IRlCl~Gi_f6q0D?t{*SDw;C^L*Qlx;t~&4+HV4mnR}Isq%O~WUH*l%7s|@pd%x>7PQCGaWmj*Hp zq0^5J@ee4T>A&HjJA6~m?on#_@?uDo+Z?ikU6_O8Gtr$0KOpN0acHCh-JxtF1!&B_ z`#<{m`s4+o5M<(>GL>3Ej}M|hc^oQ2nWH#%FJ6AKvLiQIe3;o1Zh(t9A1MJwe|^#- zMWCDW*k`xbtO&N7=-ba8>I&{aMKG!b&ZlDUo%jNr+7wWWyrapytHMfgyk|tz#;zO?f6o+_o{P!z6)NK%F&?*5k5RigOyo|mLZPG;ye*K=h z?5XK-XVF`o*pcR?V+bT}By1d6xE4?>^}_xMl24(}R9-6a)Z7 zQ>Okr4wJ=%->K+Ug1k_99A-77V~+fZyoOnQeEoJ(=c*ag1Dm`-N>%k;JO!fY=q80v zG0{Q8@?6wkx7At@NCPkMd%q75_y82ryhlvwg~$Z)YWRLj)Sk%miMf^H-$Im+|2 zJ%p~F3+b!&vAlNEvQenjkjp1J8~+-PLon0hI-S0tce1LfT^=ok*4s^#KYv0ggp6H* zY2idyU4xTU&{CHH%ri&d@}px^Vn8cwIo~U>icg zn$BmHsq#K`n;RGCTydR_s_8bG-T#Wv4=CWNY26xM`c`OFRpN-*N(21)lc7IzEjN;T z0y`0_0zs>g(0kc9vf%1YXm!TbMr)njFW8AU^_Et5AL4C=Hap64xp%S*-cC;2lER{e z36ze#N#995KIMqt;hLm!oPNSmkY2*Z=a~08C=TTC+M6U1ZS{&rdfftZzOjl?TxQ^o zAp}(XvywZX+v#4K*^xK5Im{Tse_csvR_VX|SRyAD%VCU9z;C#eQ1~*YO7oQ_7y2p^x|Fj^fNb`&;1L6A8TFrsgjw8uL(ZN2oQ$z`c7$h zP1M#{R~G3p9Mwp8g2YwNiFv*sYv)*7?1k+?U6n@zU{k%}+Gm1(%aj2+*}+vQ=<%`k zn2K0#^i6?R`&Ann{n_P_=b( zyzctGO1(J`osd!u)(l9|g5^kH+b!NDxx%2~e2LJR%`4#^#IY4-T%aceB!pk6a+209VzNPNXq@Tc6O+&ZD5~=YIo-sVv^M+}U$v z3S-!a9-W??UC3;fYfa&%8Vb6t1K z5ugj6vMWlWlLKXp@-OrB#qLhf`M*)@0mYD5Tv7}tAiE=Q@)c)})Q&b%Mhy+QO^-(1 zPBzn0@`p_p)Eb;7NUn||P`WtOweq$3>D;aa3dv)Rm$Ibh>zvmS)MFJopBIDu9`0|_ z`GX{5Zvv)jo(BG)K0R6m6xn&o^XdCc4844n%Xn3)RM}I2R(&kb0wasKL6f#_6WM~? z=kmQsC)?+@pOkmsT@ZvGV@v=(%tHPDEh}%EB4H`aGiqMVc0pgr)G-9<*~rgIKFbPX%XyD3sABsw;)ckrT>JpY z<{l#Un$^K?K5m%~!Hm>o=6$dNwP^p%!o~9?LwuPN_ISw|Y0O8V!}cF#SyfuDC~{ee z@2(ExITQlFHaJXM0P~T7R5ljAhjt;vUNpKU>cwyhz3S-Ea-KetdA9W`7okarMTIXS z!`d8(`VdF~t^Ju8XZ7Pd2ouQFe+!&bGL$>S{H1Ykr~8xW`cL}HJ?!Z`7ZJ)qOx4qn*Qm?k+l1p#hLJZO<=U=FrHen7V5Z8g z&eNDTV2YV53%E#d+#d(2;S%&uIyFyB_aUV8qWVdeVv4{bi@>$4N82>G`YgEC-4V_PQ93mB&jH#6MxL_vyMNQdzYVDNZN5I z?5Sfe0r1$=s(h_7McpK$9=KItU_IwaQFx9y*v%!7 zUEjp~y7cAFR7p^>V_fsOYUMftc3h0mX@JlJMGd>Ys~V1REQR3H{?FOk=5d&+`ukI} zeUbiDX~N*gTfdKi*>_m_Fx%iR@e4VC?0j;vN?30@O(y-v=!(W7-)os#Q+&Eq`_1sr zppf=E9P=4yz#zi@@0!mbvWCK*^y#O|e(Ogb5T!_x&-&(&j_q_lTjqFC?~&14xaVR^ zXRQld-Kq)!^I+Ndm-5_U+DSE4pI(uuJ5z9i7`GW_IkI3f>BsJ8o+aF%vF`b|ZdprA z)X%-oD+>XVq<1j>VNn#YMk%@F*nFkAB~fP6inBQNQwOKcwhG+)4YGnurwUVI^6+ZL zG^92Dl-LZFYdlWwJw6h>b3M3bvZ8+&HK|zH*eGNbnD^R=pK)Hw^}pfXSwaen1l(%s zbqxB8yYEQ&pPxQS5JNG$=970r(!e+BVeqqgzI3Ep&v6N`p`~NwRE=teQ)Y6x8z=k4 z-yx}kf%iC9Y4=+?a$sLVmR0*x{c;EN9bsvWjV(vH zr!z=^AFJnh?eKk211Df}IKv=rGdxaz4{a0RrZEQ=^xLC}3hL76$jE0~^eOdym6l5` zIyo^DFXhH~O;IfNoh4*LA_H@_ZaV4avEsG?p6^4r2?fYmR^=lQQ+?KZ?3X~%z;9T+ zx_`^dc@ja*<>Hbq&(R6*Wc)_j8=cm(oZ%&F5W9NZM{bqH93fo}5NapJYQpe zeGJDYN9*T_2b}FMjN9Bb)@?TA;~Y?*G^|Z$pr}3P9}K#r1v(u{XRsyz!UzTLe)U5uK);0LKzR}coa)JH3 z5esL%p@e#Hdo*&X0c&;Fz&RGRO~5)l%vlL1wbf?l@6q>OZC-b08U4x*{HpN8Nt2slaKl3~ielHy%r5>ol|sX3hCLPgkY%$!ZksB-;asSa^&eN6 z)f@T)v4HhB?Q>kFp*6U&LcaINg|5#%m8VfabiJqcEN{J7CEGtWuUo3ND{R%xiz*GW zn~z0Z7l%5h3*9;mHZzI0_^fX0`-|``3xfPA|C{Nmk{d3gR!=roqkKVh;u)8f-%l?N zrVP@QyQFgHOgj8syxh8hLd$&=QhPQZ~VB;ogy+84Tvdj!yUG03? zgqJ`N%|U&3J>7T37lzHg^uaYg_p@qNqU3@ULhfXXeivh+BuP!~W#7E-j=*R*!x@dg zKYuK#@CHm#zXAUo4M{bkt_a&ak2OzWirIFV-O-g@{IzhvRTet{cCs>WbH91D)CSLd z|Glo!X)YA-Q?c*;`SnczajjmQQiXksJOVJVycU*#JvW`3_durY;`0=9ik8t8HRgQf zGH{qilb|j>{cMWo`p?=SU-mzV;xAxMU!hqM5pvfkSIa(D!Vcju45>C)**Fcjm6>4~ zS@cV&3782K@wrv%CFM76DA!S614CU(*gxmAh9ZN&(!H;&##*fC7IB}>WO&s&_T~U> z6P+ehR~uz36u2j{VA2VS`Czt0r(HcC8j}XKn68K0TYL)DbsaufTchaWJ!iS%Pv^Gy zdP~E#*WV$OW`IjA-rL94s#fN2rwP^6j%r$?YIa#29jkDd^+J|6kh`9qdEE1OSSE*9 z`#v>$|DXQjTK+fQ)c}XF5A(i6KqxnW-%dD6I^XCEb)}p9(BLR@H0Sq(TwH&3V5?a7 zty0!4A?$b|=7Vxa{EEKUQ5(pf&V4*otyDwK0{s3csfY^FS^2L&?rmdm{~fM zC3Cz;^`q8D@4IW${VfmpD?P-pRaB7avUX%xaA=XDPHCL=T&yx+=u%-!8U>ofvO6b2 zox;1Q7k@VYPYZBKsm|^K7=6pf2d$yHMNzz2x?7W_YFeT>B38u^bV1)j-C^4f{tYjk zDxo+tXPXGXIO7e2Qm* z&H=4uAit^xFXq!J3CwwvWbt}Dx(!&wKDV)9@SyK$tP(Ec?eFW<*$p&_L2jhGeorAD z4)+LRWGSbPi0e8fEK%!lwELGWs@0Dy(L1lPJNHCpPu&HXy%z&|U;Dot=bYd@w0jst z)P4qj4@(1PTy&Zhns3{0U;jQ)Gn?*3j9UF-{q^)HsbLr9v>XMBNv&uNVfai@fL3tw zEWvRthLI`Najwo#Qz?xa+H!z#jz*8qt1RFTY!tilrbcJuQ3? z^?I`~3tZ+Py{8%<5;P*DETKPntUjTO)+>kh|$G(EaEnKJ7n?nLDq z+ACh$tdso9{)NZ(GpIlYmM-=9RN7^AEd}#W_CZ6`W_3n}@Qc7@IXxx?AY>>RQnt{n zVF0X+(N~YrA7NS=uiuu={UX%4Ve351y=^ec&;|m~N+1k(-HAzq+^%PZTtcgoIFqqC z0?JYCv;*V>K#ftypx4THM*BkGB~@*P5-K9!RJH-YI0WykT%(7HR+XID8G}KAnlav-qD|)Rxe~ ztEIVJYGUi>{-rN+Cst(@ha@tc1xdhF@3g4TtRgSZ82%vewnQbTw~qci#lT+g<3L`# zt3~)~MfF~}H@Dd4Ua}DlfW6u*+!$deyxgWv(syr@#{5cMt~6FXiq3~ya&4$_1j%qm*YB@qcWQJJPV*gD6UC#FA=P`P2kE7$ zV>!M$`F{K(nL=Nut2(-3=gv<%r+@OMp!qDv_@_RpKqJ?4kAm5 zo!DGX{|Gk7aeMyJbl)YJ`d(fYM{k(P_VIg&WR7GuO<=D_-BnKmx5-)_tGBLo8fc!IvsVu0gER zPy#*^|6nEq_5y`2rSy48w-g)|AhwhxaZa+2p2pI(2P3v8AQh`O zh5=_P*Jx-=T}_JEaTp}H$4_`}e8k&OAvJ!s0hUS*4xAhTgz2HSEKqM@&%MGuig_d0 zE#JZ5CW|ec`Cr3Gc?yeKGb9}=^bVIQ*RL^KXjN;0E5hrF+_*l48$@Qv83b&sr<*WR zIlfFeOq;Ita9*JU=P}6Tk=!^knaBL*rW-fJ-8K7x+Rx@GiPl8;YQKcKDjr(x`7h+% z!O;;(>+{~Dqd$LSYK2v6TgioMT2*`U6(1k7*7ZnqO}(BPtz_-rRxc-HeYDvU`(-ow z!)9qa;O+&m9P3(-NRY`OIz%)&Hw`F>uK=f1|B>i7O1X&-%AAl%Ov{=?soqax9+|?V z6*`KzIa#&y?OZ=UFI8;i;@+#ma9I zXhHS$a@jnT5jZ_LqILhikc3@Q3Pn{Mtxjt+L#*T;m&VP@)`N+?&o4#8aUz?1VzP<1 z*!07s(9iPabnI3o*e~Yhy{J#_H_0BkBzZu++wc<}fX!OJU@c7zFv}xh%ySRCw(nl1$H!x>wD@%n=z!GdA$o0==mX60XN-LI znkM%@7RVSOjsWGlE#QjE^YDGwq+M4f=C*#VIrfo{NY5<1JG9+&LkjD!$KEH}khq41 zNS+G)2J_@$&cWd4FMHjO2EqbOb^;C%4F=}5k%KifC?K=P;`I0>Ve#tD2?v`jOByIfC({3m+!;$c3%r;xNdkwHhLsfktFrN}=E=Xpd-AY;twUVPG?kI!Aq zf;)-5On_n%jAp>L?B-dXP=NhnYQEKSm))vkGAq7Qf>Qsuln`4f?wbW%wx9g?P>LxB zJ|Z=0q95{DRhG4jFe9C$v_x9_6gs&LpN~G{WSUj#_{hCRyvvFAVvKU}3$2e5x(wP- zU7U|LD%vIU_A>x%$g|n0-!x(=z15WIXJaxgW0}ZBQ-TmLOa9}N!7PfY#aQT%q8FC~ zgIWG(8%#og%r=N=95Pu-v$o7L^8$zBYsF0A@O}L!>F<~ZHx%w1^>sWXPS1W4Svgp4 z%G)5kCGk^*VO4U)O6u_k#_bqiAkO6z{l3VI_5H@<*%qG$+K4YNOZor zn3sI!32fAew(%Y8yZfVv?1)k-qCDEl1@A8p$u(IuUb7j@n_VtMj<}}`qF89bqedM? zkcn8>708$4-P3PdprwW8l{KlP(QmVmoiQ$@Y-UvWaJHZxcwT3-Ss_C&_BE2HQSJzV z0o2*VM|gub+y!@3s*k%@Fm6TNxJ{prvwBZpcp7RX$U z8A~d=mt@Y;BD_}mTJ$|c)Mw;-4M=+)LK6{li)|3eJGiUCbSrl6=XZFkT)AAMRhyKn z!-28T%%Er5*yupdr;?OgUVA&9pT17t-Dvja!iWH}1iRed%#oaCDc7=LXN7KyrLqU)%%wYz5)TD!; z^X109BrQ*ottz{vvNFk3{f*)cmE0(GvL8$r{^t)w?|c4UtLu3mFTj_^3W}a9nj0X|OzvELWNmr+dOPJA~nMKOnv0kUE%;0VelVFK)Z|N-g z`0+_p*h?*23)!5G5X}*qO*i!#@xWSWB6#^lI^XJeRa9>yY*kZ z9sXndgSFjGgCIr7BO}@a!+_j@=EX#xEZA^la#iwb`6?$+rmV$m(LR=3l;}JwwZQIN zJ9?BOTO6x(TA9=5*3tcdh?l>q7RO|ZdOUFyOyu*f7dH(y#yjno=Ji@k)kg<>>d{cWyJOS-6w)0{ zuExmv6fBT6?vgjUrCOVpi!x2&QQNJ$3~ZXoJf@7Th+^AP&Cq!S-}~-`S&1~SW#jA7 zAf;!gObNJTOSznNR+vGsy!&Q4Sj#$fhP&=eE5T7GDq3aaTNU@_5T$DClfey`dSu(h zmFjJ~iwN@w;g7$+vC~{1PUReTG~V2NEPL!I!cp855~4vIxw>^H(x}IW6ORn3wfio3 z`M~TK_3@E{R%h>L=Rk(6MQ$Jx&*SCRiW>4LRs@iT`m#t7gw#BqpP`bAS5OlL5+5QH z$+h(&Sq)&X`6^AQ>0duS1mN=6v$iLHpKbQeOP)ys1fXefXnS&6p>^Eb+_uhg$PDvU zmq$Mi5exfaPk#PCGvuCDsUg$e2s{f4CF7Dp=z+Ay=)xnmhg9Y2wMZ8K7W*!X@#70t z8tzyt!#he;J_%BVK0B>nRDiq5T@@$9IePd02@QN$f7yDTM%}{(S7T*HSoa2Pc;Ru`ICYazP|E?+cvre2#?bD5mGx;b zu34*6m~q=KD1!udfa(Vca#MbOoIa)-+HesoVbwhJLB#tS&CNz##_5710aAEanipUO zrhHfn+*+_YfC$Hy5r*3%xd~X_L4TvAOVrWisudpgFDJpaY7NE-Bm~D(dy0HL9HKF` z_!~n`Ztvf04yOJwl(RES8?3kcRr|OCx1|G@D8GrZpL(AmAN?~AvNb8W`g5|#V4191 zC&4Letihp&BI)eud$c4YHW02_UKmv!D+TueRS^(gM^H!4gfb8u|IY~GMv*1cgY(i( zb0=HH{240sqVf2pu&^Dz1L8sui0_dPl{bi%r=OomkA|St2z^(dddB(^-KWk*CcEv% z<-+n>>UBHAqrrPzMlJY+PR?591RvyafWTvyn-pI!i^GHpKdZrd@k6FSpuWs3dpf@c z{&3;QZ1Vp5RQY*>MyG-V6rN>$T~GWW`N~=y$v(dm=%%h{bw@z?^{4pyBA>>24-GUT zqFUJ`2aOML#N@ARk65-z;{H{+tUlAN6*1qVQ=XHBR@HM`?i8SqGux5lTJ)pM=? zyd$o+RVT$Ft(I6XRy%}#GOVAb9oIf0d|CJ&@WQ{qY`t(YLRie5P0@<8%%zRw@IQya z)F_80&2qtohbvtLp_DAdb)pQX@*EA>kqhVN=cH<8*yIXVtOVOkKM($uN!RM@@Y#+L zESYqg-%Wc&V+SVDfjNv?g1e;YT{CHYQ^J&R6C!Ar&A#5>)C^ih;b9Iqb*L5ilJQFE zpA^$#m1|XK5?q$Ui7_I~Tsi|aW}Ckqwi?<7M9Q!VU7Z&AfwJd;n_i~oRCDQCDues) zUkP@iLjlWKU00DJ?Kk4CKWlDcp<}m1dZ+g4`9pRFj3(O2>>5<_hTZ6lEgU5OGSF{t zUo;)!XKU!(_#<9vO!h_KX6x3tycx-EeRlwm382iBN8Vq`Y9vAm#MNlkf4bUY zp4y{%|6bFviFODQomuF=Nj_Z_IR?5Fj#|8+kRHWOmIHRxg3*32wTi{~oODTnWI__4 z%v%J|LGoXv$`!H~nq@+(KY*sZ)`$0JN_AmmZ~2_UL5kfWQ9I2aOjO8|*>s*}G*&#| z^li3EUR}Aam%RMiCW~aw-QR9A$5zP{U^{akf06p{$JCHw`ChAJnW*i$suZ!$^VcZt z3E5|xklTMgj*Bpj*@%g&Fa@EHA3;uQ-}|qk;=sf#Gx$kO^<1Fl13=;e?4Cl-&JS+R z(`1ee>WtE`1Yy8}2NQU_+<3%d%9|mV|CrqC9jG?-OaZkB8JGK$g-dEV_!>U{FSVT4 ze#XDAz~`byY;u-8^$Ye9zf(#$>ii#8GZHxOe<6(+kbl78tJ3I z4nz@ZXV8~$HhIz{4^py6_jyv4&{28sA)l)p(qCaK4;J<3j0J@d+09qzi{Yay!W$Dr zgMO=u^Ty*;V|Vk6-%d4U@w@C?X4q!%D|~-z)BlOw>B=xDuFTIV-;jz$z~i3M4lDP* zFaQ$=6@`+v@6xx^aH*ambwPo8GFJx~2F;yf7ds2QIm8|SV#gvVl#O^Vr>Ys>x}KRP z)UYK;GqcU4>8)YrET>dZgtJHg-@9Xw!KAemaTXqUrqVd1Y@#Ub_;4P!+WD9tD9HQt zSl8DS!LMu>M=d`!VPGc`L)a4^~^AoVEqx7$2$HzcH@?n%kT8mC`BP?&5%va zISi{+9YOPS)|5e=#L5PRH1?3;49#t;e2l^vQjXQ_>YM?~?@WJuCh@_5Mhlamq0Dii z=IMLY3TES+cGcooqC*Ow%E3xT{q+2BE#g5MDe+59#@m~XC=2~LTYK)DCU&3~`kVA5 z28J+30$c1Mol1N@$9hg_&-6VK-&3ctQeu5RXWFy2Ub#F{8|Dku&oNoL=~t(eU`4z@|ZzzMCR(hh!3u|#7o{Dbic z1nxb%q!b8eA`Jh{1J(zr%tvo3=7AN*c2SZ!mW9eq z{}cA2#Cyj5@~>g~6X4?_2*%!zPk)CXij|(a@zQ}87jR6s4sIAVOTW}G6+(^{&|gyv zO0pKKTE+!j{0rPG9_75TMZSjHGTSSy>bF4#D|=V`P{yy6h;!je+2k? z^p2Wzp6qXPbcM2}?LMAw4Hc+ugqDMN_2t>sSgAX_{njT1y?}US#f#mYypWx_c2Q=n zvUp^MXK4>%8oI81qVD*gw;*e^C55`%qUGsNgtAz7O5m6o8}Y>9JR$AHmpK!#k3hjv zF;4YkcESyNlhX)h3B_} zd&)OeBHKX7a?C#kJL>w)3jfST6)bCuq4@S_ zuYgTh{a-tBpV#%Df+11_7`ICk6a|qyb@KFZ&3W3*dfsWq2%bd;`x!8E{?Th}?64xi z%}OBFn80%9)@DTMs-HU0(I-2SRrmudZdi=L?lTN`7|2t@;X`$=i8_~^77%sIK zNrtwqN)pzSO_G!$VEfPMdd8Z}dQ;u>0Sfh75pd?(o2rO&wfIx8J+RddtlMe7Ww81c zuw0_TSNewMXY1@dLK#6VM_`0!*FL{oCU zZihtF@x$oA8?BrwaQD+t(kLreUK_#$ypo)o!NoKP* zpyB)k&y~ZWl&C(U9LqJ+U^VVwmOP57&nt3E6T3b`Ry1*p-{+kwlksz_T=h0>)CXMe zM9sdFIM>p0^;pE}_fe4&aRgiv%sS97K+tfWjWb5AkHSNHazatE&HD}w-{;31COuav zXEPcqmdqLa$G`LGM`{st-v<^eL3fxwnY-S%0o7V1wbvbNnfx06k~A$z?-d~$g~tS7 zZ)N9fV=fAUFIPvxp}%ZKVoJ4z!WYB_kn3B+^E>m-nExpSnKWo$BqydT<{#Ddo~zdD zn$c9kYd4s+s`R}%vD>B9ebJaNC`-1BUc~9g+{2PU^LxB+BX_FlB0NFfIv-ZQ@p)5< zc*|_SO3qag7z&RPsoO-uf_{CLwWpH4+L#)S)44WD6wLWQEpD?*Z=Dha4BAxL$NG2% z_cOT)>OXaZ8(Cgl?0@Y*y)e6G{Cg_|iQ5189OQya#v|ppQhfXZ?4Ngc-^A4oIZDul-0i#3@BxGZUfTKTKRP z4#QEuY`Zcsv9NpBNwe27FHq#Xj(9+XEn~LeukFb4AhNyvF2n9jSkmXft$#kTl;T<< z=R9tI`(%#^C{uGJOJ4b?R@7`|P(a0yQp+CW zFFp%0BbVl@cVK6kk+DYO%@hic@#R@9+a#BULFf_s=qDyPe?O(}sfrowVax$!T*~&n zy@yvHFPEg^f`4$Hdlj-z;Wt~OLJA^b&-o1d!uqMhPVB#rs5a$>jth@F>!8<(6t^`& z^5pjkam7}~3qA`#j;rv3%QC4nK1Vh+*ie#ak0!_HG{0Vi5SNIGnZ^VVZ`9%}s}>*L zM;!?O7hxlKIUZh6lobdEh1heuL~k8D2zMT=NIo}ncBVdDEg8*}Y;+nQc363WadFIX z7_UwOc9|7col*Jqo`=@86U=U@9#WX@-U9@Jtd zsv8pO)*fruu9lIJJmK_8u$9|j+~okx5Iw_jGCSi zvm{H!d_cPF%-R9cYWxd~nz}?U@Wahe=1*eQ$+n#^1Ny7!lh(HwP$Ua=zAlU3hS*ei`cm4n_Z8 zjcwpN+~#Pp=!ZTh6CQt>%8Do#Zf~Lj{sm^t`miad-lSaxKG){u zdJ7QaZ*6l>DZfp?@TdhfjZ? zMCAL$Vj(iz!y&cT=c_(B{BnX}uyGCt_QSEpsp=OV(XKB%AoSaBc>9;ZS*~u?|CBp9 zoXRrq_?(x>q%k7o&XW%5H{TcgS1-1H${?|VYmeM12gR_O!kgdngF{AhIwRwrST?Yq z+s&1S)aVpr(@+W{m>`kBL`V_y9VCe@)q)g^vEDZEfBBe0O-prfZs%r zK|v3f_&GFqIRHp!rPA2PTgZ!ER%lc=56sOrsR6OJT)J@W3KC^5Th;4ZYB15edCS2V z=4I!ptZn%4YRPA+0@)PqwX3g?Sh1kf*A6;@G4~T`)qbV-i@9!nGXY7EHyTjmK{`cP z^&tMgy?EtjV<1uhoGdQ*Q@$^r(r@kWuWj0Gk?>wF*Fq@2QAp8W zzYAiouMJ@hQA}f};d9Iq3jiF4;&Rngt9F=xJ@1R2+g8l7jPKSvu6mQlJabCO%m{W3 zEHzYtAY*^pIlN|!lR|j!1DbX;Ua|bD6#BWvX0(d~cu-PBiZ{yo{hy>0dDzN@Un7k= znj`WpHvZ*DrP&pQF8;LBwJ8VuPfTe>t(WE_h74wMDzJ_EPqBP4*e*LEd{r4Nd+_4Y z38TO_@BdE=P%@ft3#WY>qXiG(rxLx8INT%dLHYj+EfetCdVhJm$d;W3UGT;`MDdAr zkYC)(@O2YSDf5l>#E+1t(aIQne7?hwD|)u*cLo17^TZ6SLb5$rq>p^T$-_Vsf#+L##yS!m3E|-p zMN=M)s)-o9AR3`XCmYBI4@>>vENIxUl*tEI{fIbK4zq2&xPD$Kc20K5dsd)m#e`AS zwDr&>;J)2p3xtLWdAHqt=ra(>KtG#Txa_0J6IUBO#q796x3EitTyyxnnEVky_8GRbNeg>Y#)=rkZ~Dmz z*r#6^YD0-47~OPRJ+Ya!6KOShnf4-K5OIrW`P5NC`$=2JWtzi*4)4`W^Q)9PTXI4c zp`*UI4BI*8g)3vHjBBkjLv-Nsk}Xmo=0zAmUlKxxfGHj1-S7M=n2sQOK3mrLz77Js z@Cs1D5;iYvfChGM-A-22#@0X^SqQ|XiCDZbtY0aUj--9Q!HzjpojEz;a$`5f8?{B* z;$a^`8}^6~e;bopO{k_7;Oj0S%Yt=%d$WGu>(J!BDWuQu90{>{1ni(WoNgoPL<2db zY(J-oE&LwVcwvrigwxhZhe-f)INnp?a^M2e0U0J)xbkL2TN7z^i##`M@uy6yUXpke zGfEWJ;p?$Z5CN~%FxtId8;nV?0j^*l{IMRY8 z)1$>Zpc<{gGi&wSeRm+Scu9rU-mNM#d{MTp+E7mPgXthC2=(X3L`0AISUhEG7~9)T zmG`cptlIewOeQxa*d6vmw2Y;qRmJ0`TbZBzZr>eQ8K=LL^TZ2Tx35LRGtLG`f_ zu_ses2KY&F#8EN&emOgZZ`*vP9^WxyY(dxE8*Slbsr6np^!E8QoeG2LaeDqCnygx8 zM0}#A#;TbVU=#XA3FNmcx7|C@llWP_6@KYJ%sfScb*{-c9!op2K|4=35w!itP(7eb zNTYV`gN;!?_f7y`6MLLw^xHv3bWJJ`G-Y=|Dd9$JG#cANys<_iWeE7fq7slo}`- z`7Q^5+~J6cHDdS{r(u%|6Cl)~KQkTgBPKXuQ2L28xIEjeA)L&P%xT&dVAE%BX$K4- zL>wPBT`74iiP%j%BaG%#-_1J=3bM?-JY(2mUC-HkK^XXopXT_w z0_5>d)_q2-_--vzZ=wb~cXYggeC$K&U&Fnje4_^9FU)Md&?~W7y-99vVboJUI(&p&C=RjkNr#a z1JHlrE#2LH7W%wn ze9swQ`~m0u2<)4^@3q&ua$a+WU@{0P(wom$y{SE%$A~OmBjoqJ;Tvs5`y!%~eTWs< zQ@KflrW4QZ2v4OzLq8-_?R0k0YXeA@Hr~0oxJcEukha&DjPjWr5iXm3A5b0@>`xN8 zwx+~(n27%ZD5SV+OYmMv1Zk^R8*$)sxKSkiaw_OQbe=6>u8lx}fS_Z#RQd*5 zW$tG?I;+aXQSubb`9gZVAdWCakCn^966!qu^^A4-sALRB1x>d&E|>J0+r`C0Q28o( z@M|Gi(4v^f-uS8Hq2^3FJyc_=98llvJj_Y-Ypk-YX}fFT9ugN40b_}`|A#0JS1PA- zn6LOirxWBLwb+SUk6y{$)dOCK-&qgftl;mYjX`-U@w$_dvwiLX@OddA^&zEf@C zkuHX5N!vg+E4@a=@9pRJ&^dC0eA+00zgrp3HDb1HXj77m(Omc?sg8*jL`MCY`{5o) zvPpE!OYkKM&~|#(%d3~qs#NT-TRbxiRG4!EGSA^)yV^mS@@yIBWHw&QTEkGLs2!iR z_DwRI?;J^7QXL|ZmehVErNX{PXdJ(@8udE=47)tfyqeuzhC!nfz`ji8kZ#~N`P0Uw z{^*~0mW6}i?OWbbCZ}$}2b;{!)Wl3Pj-B4Vc25j@B~9wA+aK<{^5DFOCHo>FssRK6 zjhASVnf>kgIZ=EitpKheno9H5Gn@{iST)Y-xL17}?X5^V^&2%LpwKgv#Q;$eOBQTM z)sI_Mogyz-6?2Of^{SFRV#a!-eMZTt9;hl)SZzeR)qOxV&41WsDJ{3@dru@hZ3QfHk%|1y!RH{bSvP&?PfJ-N5Rl7V(wtht93MBTLS91rBKfX-@ zzBqP&_{o@JN3u{nQuPD=?8)AI*jv5zi(XjMGoP6te${J6(nkA8uohV|3^MU@X?PIk)?G9bC zR975;ojyz^k?pV3o2xXgRLnNjA*U4{@I_w;LZb?x zKA7$#maqIO&3THLN-$a>*RzD|(6%Ed67fjThd-^=W>Kfni2NOqv_`fV+pIZn=-l;j zTQGVlrniT~{X+DvTXzt>nFIxo_l{Aii?)G3h0|E3XJAfaEoayz^(OW4+%3azq9I7lK*3#^8e`(M@Tof?%BQe*V%2(xm>Y~r~J z*flcIua2Wc&W0LFrE%u!r;vvez|8IclGc{AsnWwe`DMtcFu~z>;42^7-R>ok!UNZ3 z70pH4IbEVg(ytYr`;GaXbXEM^0qx2u;6BI%5C|zNR0&KL2-}?r*(%GmEf~>c(pR`! zySd1hpHS=*Yxf9oUn1bmzU9nvd}p_(o6PP?*M3cDG+=ru&;RfX>}KtnEYzK;V#=59 z^?*r*=PcLiZAD4wBK|cPSI6WKfDK7!wL9y@-=dx|mp;$~#z600SswsPXUb%x!m4Q1 z3SO3|Hlt^hl0wuNARpKWCZQ--?GR?-f(EyYG#>+hyOFeZBRvXlP{Z5fUt}^r?Y=d* zXk-u42>3Y(8D}QYg7D7u==UgUjL>#%Y*FnOXrq~itN{ENxbk-_67+kAlnc)Tr2uzW z`)A^l>MT2hRi1z6_hA0*7lCq-n@v{V!B^6%$y!^>P)%eu z4bbAn?L3TcytVxZ51)2w)eOR+cE@WTqS(kX(WJcoIQmdHj1oSBU?0LDpPczUD^{no zmt=PjZd3{fQ`O$Y%If$eGbH2oJoS>^b&jL}fPX31Y^{MPs;Rt+1qSK$)5-*1A#8&Q$Yo zIa5lSb@m>AbQZ5Dm!m6IX6kP99P19cq5>7RdK8%qF$5ce!4z`yqNMXs_%Xs}r9E-V z<4Je1+0hT9@(0el{JFoc7YJ~i6a=Q=kryntK6I|1k$g;Z3HWRao1u1nw4@={EpA)N zamr)E=uZ=V2dIl7tm@tSI-!tWR&a9Qls zT>}$t&9cOiRYXmdcNqlWHigh6_Y*6X zi^lZ7FQ^Tz168+NZOxLT^WvA36-TG-*iY9!=MaC>d>c zc74D<{2~%fL+LisXa8^mlxx!@O?-VOVNl6dl7J?j_Gf%usyrbVoTk<;e4^YbmDmQ$Kc<%6U7ZVVDf(Xr*s>-TqVgfw?FQviV z>U#MD0Edo_$Mv&CV^CNt^gctvSs%~QV9er4NHvr$wfIM7cq&R(3zMe8;Fk1FzayEI(LT2 zb7Vx`CNY#NBJ^U|$TJ2yrf&|tXj6tyD-kIa6kVdLx^LcnUhEo2yF(5RL9NE#g+X*61)+PL0rFJV-NR()S81 zeM`d{0ryMpcOITCExjTVzHZ~&_B(*9M|%}!=3;EtT*!dpWTOx72SSo+FnH}q;?Jux zd^X(IUcWs{5^KE#8pLR?1C{4AR>o7++3!$*AsB8uH#E6UNA-X_ZQ`?m0cAp8y8 zE3)qHvYK-AVa$`p1=n!@t;H+?@06&09GItWsSlWL7U8Dewce_PmDJ9~!CbE_a zAV@o=%f(%G006qxnXg*cG;w1sC(^_=Yc20f`^N z(JuMVpFjE75F5)cQD8pg=4wS}r~#oKG# zAMIr!77fB{8AU^ORU`=h(iFteG;6+r2!eFG?NU%APr}}T5wOY_rbIN;4K^G;eC}{Q zgYnk-tEBUIDjP1z^e8BqvwbkT<3oNU;@dfWv7e12EV>Q^W`XcjzrtvNp2*L52DQ7} z+4Eh41?3aV!`bg}-62?bri{+>^Y3(fC6BLvmFtXrx7I&42S!|PPIqTG%O7zPr6LBZ z;AaL<8pGr?5i$|Vaw!Qj5Mgzttfh}BY~NtLNs$FgPhPp3P*QPrWmOf?Z?BGnk{Vc0CDj(OK zpnAh|VMx&Ix}sNyMLR}pyORe;aXjXLi*rp1+UGoeXHwR01kDopR9YWZ3L*(FbKy+M zpkZMl*IlzI`W(Z?rD{y_p%>CA)Pj^epTU}o(XF55Kq7MlfGr%>xCBMnp-Hc$tt1_BF^M>@>l%6_w>#24> zo4Xn$CoCBZxOEbMLru9i3rMcnhR;X?T;O~Mexpk(W$lKU&px$4)F)~LPWN8Rf?5+pMg zjpe)ph8vY)9Q6?Bl;jq0msrfs(Aw zRvGdY7J3ksTtT}1p?XkwOzA*gB*{p#^Cd-3sZukfOsuzP#crN3G9|nckF0rk!kQ<1FJLRuDI71Ck!W(bR_61P zA*EAl6nJWneV(&Zi(oM~D^el(PB2!@%YV>~Oqo09@>-F6r;^)XcoDb{T+C_+rc%f*y<&v;3 zNO(bD)LbH)M*Njh?lWVB96lR&5*f-q!}0OL$a?RWhIc$w9~eE{AZAH=dS0dv($CrL zp-YWFu{|d+l9wzsy{$sN!I{~U2?}eK<8(dd7ZRFJeN{v&M#880P+ZPuudWtaHTgk& zo?sAqE5tx#A(hh=QocCWF7Vsrf!8%0sAEREDAu#PTtUBpLgXhF7mnRYBZMLIwjXvwzmUM-cV6JROtqm;?f-fys7iGPl8zx?|*(lR?!>cb1Dm67L^qvv37Hj=~nr(;|ue8A(M zP4a{;68CDQoRv=V_VNZLoVRgm`Pz{(bC$=JAe#q<4@sOG)p_lbz_pVn*cUst>gUxV z3N$nw>hF1ATU5vA^6e4Lsq^~K@hHEh5ds6YO+%Ltb7rmpQ{xrtU=T=C=jIRK@ z;_25=;jc%yamxim25`k&HSxM7H*OEs@s|8uZ`YhX+il3jktIQf(A8=WQ)LitsXPP&-Appbh!H5`p zqLlVzhP-xV6@wJ_4Fy;B>{4hnWrpC=YgBJOOLrCt^Ssl0(rGW(TZDGoxTLZ^gxhOW zFdr!}l*~F(Epki2)}EG{%f#Y#1qmZ!Ds24SEMrUA=_@0%us0K1lVfmqM`m$@Ld>oq z4|gt~N>HZBbUBIH68vy*;$@mko~`kgD3l0Ybnypc@WzFu z00ldQ`9^m{K?DLR=o*{5n1Q&gHMI!qsj*{I4C zec**yk3H^>j(L9q{a&qLc9X3U=+P#dkcP}+D+Fz}62LP_A(MkvL{n_BfAayC%MN#w zUKQy+UC1=(*GBsv2bl~uVIpHx*wq|pqTFw+{y~z7a=Sv{8WwU=m*jtXi6W9+e1No? z+9}{cVyZ*ZnYPRJJgjQ+oVxS=R^`uM-xJJU@e@<7i)@^1LYEobZYq-JGHyp3i2VLi zhsSJ{O)ULBCs-<9oBwAT3&!?Xp?LiM>gfwwl^S`zwF0AHA7KRr1z*|s=vkgQr<$y+$@Yn>AhgzIgX4Dz<2&W?NC_5C-Rh)BO1L2yc}0& z$5B`DLpsJuF!?gM@{MUbve~CDcUQ=%1nkI2m;pfCx2>Nli_PB(@5y^}(>$$$T@VO4 zX<0eLp6qah1GIrrxM-&7jSbB#St@lhlk?8{KE2g=ex>K{Pl11Z_e~0mAyR_S%FHu6CEi8>EV6|~`xlLD~7In-YX^?<@q`{k( zEm3ruY5FZ^*c*%uK6wDVw@=MY3_q|<`~Erw&(5bJ?;P+65kbVJlL2O;>@Vwb10$aW zqTb*dCSlU23|%A~_)f`_vCVNEV4?!Ngy3wqKmeCS$;(d2t}{RFN(>A#BveoaadZP3 zGw7zMUR1SxPsc$MBJjx^%&Kz(G|=0g9o9OKFg^xeOzbj( z&9EUfN9yGI*j)zxq?7$yXs*>WZ5RvjC8yJMd+)o~;I1!3%!mzZ}F{mY*N`GiG+{ewk9qnR}l2@C(T45avA=a8iucX7NX zCk(974aaqMBI?6u#l!*>AKx}5&%paypNaehl7ysRrG%GU8PL$9%qh>$#>+UYco@W~ z_A3mMWJ|KmLIDZ=LIeIh&fg$y1P1(HBWEn3s_(DF5k8K@68@7lxI&nO7u`+=IAg{< zn|FJa6uw0V7V8DF4$B{h`JG?V1>aHv8G=}W=xe%%x6;9=6IHzY@EfSQGi@);@7LtUaxrr>^Lq&PNMt<5)zY>U+fIMX#-1k)^-#O#l7P z`)dPW_u79(XPP+tkcV6ATS21CrR6#$3l2`R0>VKXB~=*NlH~>-KakP zLr(`zsO8DhT+BY+oWq%OxONVNIyU^;hpOg4{Ljj|r+SpSQ@FT(xe^YR&DX|gS;N1% zd9^wh&aIVSl-mRGE3MV4?>5BqGwCnLwy}2T8|-XzK+N7jZq5~-xWk*WHNPgt>KLYu zVmia~$x;12o52X(G^*QnO{$aYInit)7I)fy>Ztj**HAg58A_=#l3B?(U8^ zJ&x@y4edm*m!z2&F@+azyQX##6iElu9&tM(4Fqr~8!%62oWn}H)ocFIhnO%|R;VNC zH7cxSrfJ-~BE`K3H+Mic4us*zbE4Lx6Jw-1Ud1}GswhHFwvsfqS5}F;9YU||ser-T zBDSdf`wh|uz#9nNorFQSrp%N%+Kme+c+Wh6+9;c4J$Cns(CX(@sYZabMtv%CPad{{ z$)=QJNaDR5r+m_bk+tZzEpwV_PC6Y?6Kjf+d$Ag8p-Fq$t|gm|PX$@loJ?orcMv?t zn3$rq*4ZqKUgc6o#qPugyg=tm+=1nZHG_;l&-H5My zV7}Yl%;=obuq}n5-HCcjywHQ98xpwhC?n`Tka>GTzV?Y*b+aR_!Mq@-YI0-#={~Nh z?#`%P=A{jngIhb>v$&aPFldIx>1c*H(}%X&xBFrv#+fUZJh_`A^d7j15MJ4vB2-vE zL#xFzkZ(>g4xAwgqY16GAf8F*K0DE8;=}&1Py`IIVaH!z(iZ`I$+6|AAyFsSyO-eT zYe%M{i`N5h`s8DYi6e-8dwE5s%Bl>&eCWLO*thhJRRS7xPM%)u5I35-cb-?I;F5r% z@2nz8-7Ch6V~k?lniRuxS55MPO~n$64`oa&E6{sQ>!tI{FY& z&?ELFDfyfq$70F-MLn1gzkf*)o@ab*xN2yF3}Zx$x~oUTbv(m`#^u$Hgna{t>s(0I zL@F8TC4VOUom=@{R>(XaHs>av$thKLlo>`80w3bZaDxWxQ@|(|XzBXbCjR-|-!Js! zJ^ya0KaNc3qVE57M+Xoy1HIpM z$bUX~`Bd9`a<;vH_s##bKtS#egbSS0iGuxqFN6hmJkkAczSO_hYk>%aPzS1T2QYtM z(H#T$+ylde3-SN;5(8qucPuAff&KePz&!(xcveCg9`N_2{!dF3;qVlRIF#aDCjY&# ziVQr$)YcXE|9MAy@NC_mq|GA!**0n52^!o(>%cDl-|h+Y4#Borvo3bb{(E6M0L9Tt zK>lC%`~Nr2zxT?&*6aT}8;8`Un3spgVs%3djYjer85!9Z16_8sr^VoQ0kux%mO!h2 zJpO-Y3jWz~9G+Zcvw&X+Z<9_{az>_EHXi^T>Ch;Z(fDECcquj5%!X4W;A3H9`z3xb zUOi7z@M>Ehz|czg@jhYfw-)2mi_ivU%hbf@%KBgL;lKIe%KGI)yn*rIZ;uWr#QYBx zU~E@2G71$;P)!!3;Zkw9oxrznaz#+-2?KUVrv8ZSQ;-Ey05ts%7bb%dLe}(UhWAf5 zta`$ZqK{l5{WtgcmtheigmCAt8jSkHat43)hWF(DpfCU_=1~!_-WRDZ!|Ui|y~K7} zF{*J6$Ny-%!z3yiVtG4NOp)?~1H;hQ*}f3(j-fQqCjf}%snpLaz2WNF`ite7T5cre!0T- z>1heRn8hYb?^i<4c7SN;JHfgyPbd&?>Hoff+?j9FtutvOlUdw}0QDeE zIzC_r1k}4h5Fcr1;Pu7Re$=0C9)rs3u_G8@m#mX~K2f3u1u}^sD|jVndc`_uFbY8- zS3zntRTSutNU%I#Us-2+N$1iErm1L@BwJKjCyL}m^l&0^n%xgM5pdZ;;^N}82{0^6=DC}yP+eK4tGY6^XGD77PhT;Fnfm99X(Bxt$A&m%K@ zb0{f%WJD8}-2oGb9d$nOD@s+(WjV7bD(Rs;f{ub27{-2viYfzdv6Y*bWi%iC;u4Iu zt2SA^a^rG|I83{v&}gBdlFvih)x9`7^C>K(#%Fg6kw{G~tEdt1wOSv^)8dWv|M-4Y z5ohg>ck$#B2L_xgELr0J@Pe8UqbMUl^j@D!GzOO?K_Norb%VKe5A|+LM1)dvLM)-}lrrZcl$LEiQgS zJqrtqsvB7=&F@i}`-#=Y4B!C%aNqv+HczcFc11ZNVkTck9{|pBu5bc<<IoSK@F+Gsz+sw^{# z30^sTD-!MD8}l}m!wu!LC=mA(i{6sc8;yM_Z+lVTJ+K zQ$DOptJZZy!}%pwS2V|fe6eun%dQ^MkV=CjTr(1O0kR0prw{|P6#Md@0Q0}MAD-E~ znjPK6zm^*?78f;qGz)X%u)Djv^Hd7iAYWGq2BA@Y8`7M_3>*rq$Gp*(X zC!2A^E@0$<>+$wb<7YAhDo{NNxcHVIH7<`g8Y|A-zE7O%3xuLpR$RE;A3FU)aTpv= z(7LV<7n(_m!q$1vCtl-xkcRF7%}wrAf!A6_Mq~wme+qq}@jQS~vC^Qhn8)32nR-I-F}fMEW|EgO;J?)qV3}V5D4x;Mg3+STGbfMBw!fv0OoP zpI@waU=3*lok|NtFgj}>T*LnsPQdIY| z{6kw;*DJ=aLnx0*pnhJYRHvTSuhc{?B*d{oOo0+sb83Nq03m(k^8X+RCyf|0I4 z`c}3(Hz5$Y@&z-d{AJ`}$;0wWAK9JOpn=kFzE%3=p>z7^A$uL8{t)*7IxSywZ{~i! z40*(d;GN`ZfI9C4P25gP9l>ycxDvI_)~CYv^A}Ko?uZs!h(N9&#x>pggW;m8)|)-I zbJ(AQgZyfGqcs4P&<@L5gQ5ZE)9&s(roo)luY18!Jgtvt#$iH^j_J z0vh!$Sdfs*(-QUNf7*@nN_T<$bH7Tc+(8AWZRsh`TGA>m>;)$ zj9%L24Hf=-bvHPfwIWNZqrqUbshn)Ev%Vy58VrGPAZc-R`1A@t-eO(Im|SG(V;Jv- zSg12=?4QEpa3bUmt9yW%r>*%u@il3~sZ0)_dy8kTqf+feGJk>B78_a!Fl*U%OKY3u zU}|EyZ+z3?bOXqFYklt%PBhlmX?;4UJnm$o2>~E zc5`|qCa8q>GkgZsI-84EuL4#d_^!{k855bz{UaifR6jZ^lAkR9w6keX`E=PCoUaE7 zYGzSzQDh-Lfq{K#-0hqHWfwgqjh4jkjM_~waj>=bgeX%q)+$UlIl&~HH$%rQk?YMB zGN!AG3xnki#6+Roo5{l1>Ac5>hv!!h9Z<1YKO@;}LADv1e_}U%U$^20C)17S87WmK zqt}%3tSvO@vh1f`R%Ty9lweysv8zj}*IedAGBxw>>)`2l4pZ5t;@Wq=wqTM!xx)-m zPyJpmWHFFzWd^LNL5QiT$Ow{eXVGb;q3Nizxg~4|3O?YJyFY4`bMpC0hmJY%_sdd_ zmYO3@8<5OTd}2VzcTg zZD@pZ-tFDf!6Q`ov*veFz^9VEJV_4hAE$%YBs?W$z^D@uy5oGB=W^cXZj@B3vHv~(;wTQ@pq7|CD(kX-4;lz6HkjWV>P+Jnyg)!R;ik7E7e3M@Yp zE0MYd1b9ffobJ#7m@^2-@9E5})Rzy1rg8BepXy_}`S}JsvbsW=iBc6fkPbocLrj+_y^bOeeb~Jpk7fK%b@y-P z6yXAWw!?+pE#Mc=Vw~LnnO>zHnZ;~@*9A7DO3P;LO37fR3g2ilFB^GJMxRdm^r9J) zrT@7SqyE^|uXw7`rM)0)jClt4sgI#cyA%7JzrI)>A4g%}-q>_=U0Vf*HuTY!<~9_q zNSo)ZN&`d)_CQKb*Nr${-04wy8&K>UZIUBLqnF3D{wjvNlrnps7;O7`od--AHVpng z+@xQOdI9l*UrkwXG#jw<0>(-L{}#?-ksNMp4vwqq+m7B5r29SRbjM18M5ar@-JN6u z5scrzMoG#l`Y~Ve<&WtBTcSk5EmtV-InW=of(e49y_h(94Rli#-AUDSO`_xa3Q1O* zt#|z53)Bj9lqcH-Mh1U_L@F>%{s(wNTn6T-oi9Y0%r7?i<~9bEH81wCsCtTN>ZpQi z!qeEFq{%uN%K0H%9d9A!3WSgwK=*o7cD)}g@PD?xws@Gs$qbxlMg}pWtFr40_(IuN zI)#&CS2o3f_aYdh)Z!!_XDmmo@Z-beE{nlJ4Yf%Tqjs(FRf$ZfL_`3>*5*5SKsnsA z4%f4?|CUE()UN*2XvC~*xdSqN{jhiT_ixR!tq(}_>P?;HB+hPJNQIDh$G(9g;22*x>}QCi+(OY;6}6$)}K znk4}?Hr0bh9LwjsH=`HxGmJuMob1U<)591aj3#8)BGg*V@W2QH#ya*|e~Mt#F7eL8 z!#@l0hWsXtN!`1eOoFDD(>aH#U;8D9u z{-f&#JSZ{H?NH4zku#580DaWFCGHb=0(Jw!z5V^Hb?_S~**uDUC+$)B)$RT#RO6rI zA15vE-pgC6&k@F~$vvxLCe}AtyHSn2TH;IV4?XG$uNXN%7dDH#{@DmJ}Bq^0UoUOoGQ@Q0KdNZL^j2@p8c#A3O;A{DL{58XM!;PeKfLo{)4 zK(Pj#3{C%Cd>4S_-atnOsV4rzZEbu&LzIZ7CK8=$QwW#=Umln)?M-~kxOaQuu{zIR zXVZljM~^EA8bbW%>FJudpWI-95^Y-?{Za&FR5g;1aLgS`d%gSJ(T^ExjB@iOA~0r4 zdd1-!R4BIdTR})DdgFX7x5qunuAM^Pta`H#aH|^9 zJH*lcHSuLtkrHE;Zl8Nsb=-j5CC;yg$v0U72q>qXB`PzpA4YQ(6m0fU7CC3GRqGsH z0r?nS$N~8Fl^Wj0sdtQ7y>j^@xS37>_TRmlI~>v1js3w`whK%KgQxD(aqgtP62$y5kH7I%oZ-%MuDai&_h&haC!k~-Z3K0p2jb#sn#PnR645! z!R$fL=<4Rt$+-$c6|9~}y2B_BCZiz&HcMV0q-`O!pUd)z?R?9sr$Xt{kCBmQ*C!ij zwiH2O{a#&#pDAUUnpz1fi(kXTpE1~QBX$XF^+>3<-QSqbH$OrP2tf8GcA<;mO!_4l zUgcOCZBF4K&No>TAmVfKJ25h%QJx`kIyo+n#Uzyr%mPdQBCbRgWAo~4MkQN_^4J_% zHeVJpUt0L^B66U3?$UB^!cp?kpwbKoKlAORYQ1m{YI(d`4nB>Wx7_bmE2oQ?nZk~t zj(+m!fj9K(EkA}9pt>9jMT@BT8#0Q0YlRo)pHeV8OYL8EGtTZ^Y zI|TKB3}i7y7C6wP0p~i211(3;$oW727X?Xn*~|th3MGo@w$;Spp)D^Cc3nX^h(mmHJkJxoK#nr}J2l5hful}~f5;*= zE~nGCRvB4l*PE(5#TNKP!)ZZ3_&|}`v&u(#KGR{{5eqj&q^(2bZRzmT7nTR@T@HiKmE2HS_+aLs=H^~R+YDbv%Qre-`m=e`^rW8g1CiY0|2+;L7CW$(~B<33n{@kSDSP*4Qxuj^!7=u;|?< z>msO~3G->EYf`=v6KJL%y5{4lU=a}on{QrUNmFyE{j{}QP9s;IXcCrSYqD8)xBBfzBkmRRIZupLF3oFt@t`T4kvg4JUM(c;#o3-Kw%;x z!k2C^&yh`A$?bMcRo+pOZn$huhzIHRS!fXXXRU?C3MB?NDruis0&R)kdmjY_IqGsd_A^`OlUYaKRlia~!|JxRSF*$};B z@hcEjf5hB_N>JiEtRC{iZzA&x3WdS1ORslc4?)y^S8Nbn-&bii(!=F&`$kYuC|CHh z_PTPyHKA1#Cbn3T1i!Hp93#hgUSDw)4K{P2sf3)vVoHpn~+xy+p1Mdt)%Q#H>-Gm54ASF@!H4NMj#; zjVZEN_L_gdKxu0{(|%r*Z};LO+pq54Bxc#-GkC4^B}jA~KYl7+_0csvQ%-FQQX*Ln z0z?8$3GZJr!bfa<(OBm-hrA~*H!idN&7GhRCp$2`#pL|gwBI{D>@FHVqf=|>AC8?3 z-8og2f=+#Y@0_Kf5tD1EIU=t(^HH;7R*&Yc+2x!bh?~ARUC!AWn~4};cQ``Yhi|BO zrkKem6+t0x>}}G+tYK?524*iiT+SRG*g*lJ2{~&}XW8qO1z^Utby$mtkPN{yA6Q%? z`mtEfxt8?0_IEY%?@i>ssDvr81xQ-SOb4kV;|tq03*N+6GC4yY z5AwH>AN0!=v5eHynLpX@!}Zhh6TdeV6+$!5H}2(e=tJo$ci0v#vey7vR?s_YHXo@H zRl_31hG&OM?%X){;x4~D)JrBxlv1o=qC#Y_(}ec2Z~Jm)lnM~vFS#ENjLlN?gmR95!gg)}9nQyHtdGyGSUb`RY&Y?FdKbaGS%08mir& z`b%Fi@vFdgxNQCY?52eiwZG7a$l+Ab@DavuMp3(A3{HJ=2@F&Q1YAu=C-uj)@9q$$XFGRJHr%_@`>SA(=xIDS=&l;zx&c%gsiOLc6HXHbgsn7b2pe+A25Ltcs z(yXh7c5%=z%eYq@jC11xfr7Qync{G+V5S4t4DM^b z?{eVO1@vrY&{2lNEF`3v?>-v&#SR`z>}(EH-(`Bm8eS7)XZUG@w2<;i-uH4k8(XdN z*jap|ub$ri;psMpF$SUnt0dveZm!Ph${!{n=?X@@4TI(JKy!rPZ1RZxyA@~-=zcEB z%HR|Te;;gTUKdV2q#P1pKV$gHOt2xd3w+U62a9k}zK$hI&9Gb!|*BU>E?EMkTr$-)e*8S4wL_O z8z+!1!U55bzuSwSzu@c(nrWSJ$8)at>Q8CvaO@d61GI8nK6+T~kNLIDS-(En94Jg| zE$hH!Gl73Ba+u`=!#Gj7A1#;I?87+J{46gY2+g-f_LH(;ywQknCI=L76WIz}9UdXa z{WjX;=+jnp3npDYCSn&LNRV~*o=#75A*p!F?%o|NSfH~CCLsEXS9T}Ib&q&--XjA= zWE6L(B68*QYIV51IRZbuf$1^@8q+3&7s3!0aV4%w^NS~wtI_>G?bW>eUhilZc!#nz zymkh~?4L=-8l}}P{V}P>)5VvaMKf?^R`t~Vu~Pg4hD#YZt!T3-Wq}%DOcPUbrWPr9 zl7;fNoMjd_XG-z#*nY&ma60?glLG;xI%E|QqN^F97|oLD*As^$a_3eXg$5$-`acE3 zbPn|g$~Ve0D{=LMP3L&a?Wbc6aCS>LL@iD?O!sDyUCmJ6V@M19bqfFS5O*{X$AL8< zCe=HX>l$Z%_Yp0X({sN03+kW}`&-Y0u^3|uJ0&03brGHTe5%R8y;lR4J7%{a=~P zz|b!d+K>=cnY~`jjZpkTtdlsA|9kIakB%E{$zt&nPRGV71Gx&p4<k+&jA8&;YR3)fP(+P=!4O5&^h}hX~j25BOR9D z&6Y|n9HvS6K$o>@(Us%oBPfdmGjAKi@jQMNC#ZJ|TDXV1T=!fr572s8X(H&8H=%gTb~}8-r&8>Fu|J4SY*_v*WNsMF=Cog%&ChM z^9H83aLOsud{|u7PjUSD;c?A)#sW87cgp!SdVhxV`3)`lav)4hR>vz+PE^KK@%{9L zG6b{vrqJz5bdX}v$Fp@oV2$N&eyG)7(vlQkk7WxT{mgZN_JwQLoQG#NqgU~4k=CZs zy~?|vG>F-BF>GnH^XnOcKZ24>XO&Oli8w>f37VtvIc%+v)J|q>7KQcM!_Uzn*lMH6 z-!JZ(Z(nbm3;S)arPO(J?-Um@o6a{a~c+aKki7mrn&EE8#_K=Z^@}A9vbf z<$$`q9^GhiSV$m1);d=a7}-K^2ya;$qmD2o7h2y`@^gW{SsP1CjGC zGDZ8{MZDWfg5MVie)|fDU##bsz}yVg*w6Ld-Gw(}eOOk#w~TLxD0?g(i>uJ9o~XiR--? z-hI8ip-o(0OmIiIc+hg(Zxgqw^bVz+;xi@5$X@v8zxw$95cZZ~buHVrXcCeD!4g~o z1a}QCf#B}0!QCx*2=4CgZoxf3aCdiice}+}``mZ-IrpvobAI2PvqshEqmQcATW>8J z;rzWoN*)HiF87Hx|Fwt7jfexKCOyJNUm=r|?z-^zlT{RC@~Bi<4s^Ty9=!1Cw~ly@ z*1g{8r-ST{yRdH)658z+VdY9S-iRovBEAw{mz9uQtg}H7NOo@3KDR`-Hw=Ws(TLmR zfE-IE7G!h0zQ3_S6){>%U$11`9)=4|{lahgsVX@L_g(%$W|zb_zZrB&`^4bhXo_$1 z-&IZFpgVl*`lKp___~!aX&jfq4Sv%&l`Ltd^o#^A`- z%`69+T4E;KIcluD!;)A3g!Wa@WaHIfa>MY^aBx@YyNRMzZiGSIs2VSxZ9YaeQlZ4t zH|CMs-CWb*nPRuw8A!=jeZ|ZV^Of=Y zHt9z;7g)$EU%tWs>*+ysWos)Qx`iHEPo#W)tj6@P%~hcy4V~e!&|^vDwOD!^ z@`!y;8*84Nu-$QZ5Qk0=d-UX|V*U<^WVXOB55B)0XOU5zdb-Ch7w&4H&X>BirZJg~ z2JrsuWEJO(o@J!%>L8P;E039knkiSMnkCjf%oF2^OlPq=g&mR} z4->X6TW#|eo&K;&l2Q%*hJ53{^8H^Y0yk)nYd+Pf4iihDaBe3tw+uGcWs?OO7!P;0 z(pT{aTquW^gH>1XK3_x4Z2*uXx<@bx9 zAys{R+TWR+*Cf)D{v9KAZ4Tf0r(A!($!UGssFqqII9&gM)%3J7-WW%#^u8!^I=bT;*@gF;9q*`}StGv}?W)qF0(;ti zZUh|&)Dn_u34_qRn+kl6ANk?|34BNH0CVzkk9hE0$utXRmNXyaFET=Qo9S|==nP@t zKhgFc&oEo_u^X)#G?tbr?3nrqikgM+2PZpC zs&bh}-2r+q)2(=Pz_?1!zB>)sU_A?%_sA!)SiLKOi9Kof82Q*V++q=`RG4L`Wouy> zMlysnK$gAr4xt61K^O^ax+6>7CC$@x3?^D5InzC?-nIJgxJMwGK`ZUqA6T9=l8eo- z^p$VVDcYTS?gOh_!)YO+l!z^_En-Pz8XVRrto&2;pkOOt1xC&67(o>j9DK8tmq7*H zZZcIOkp7eW%C=*EVS#Q$q-r}qxeNkwe6_qcxgoedlwd&c_qg0emn_|>7~`RF5MY9x z3iA3UXkF9F$MOHN0FDVk<$s8Wf?b~U-QA7Jp^3dsym0aPKmC z4xQmU)L_b&Oq^W5>hKuvd;Hg4+!6SnG7heiLg)wKYmc|JlH@08)Q}q>1@2Yj;x4(| zZoQaGm%iEjMr9dF>Uz3_-Cu%ny|vv^`-O}Xf2x`Q9{?3DisL+>ijk)6eHzEv_d!F$ ztt^!-(q>)eacbK1ciM+q%M-*v<8sb8+1ja2@wp#=xY*PLTE@;^I*!Q1;s0`Tt=IV> zY;nnw^}fLN02lRI?n>%uyN>SzYnNnP(6SkO+2=p0k_E;pOOME_*B^Zai9>q?#Lut2 zs2vAounFZxeFFIeb|L+z2(_8bXA^k)BAB)12*SfzNWqgI9|~S&X~Ax2gHJ|mw5vBk zhuOi3feLT8M|)mu68P{H9+q^mC8ZjEu=vc#aUYhi&8IO|YhG)&#{?VXWNBy`>DF|7 zb4H>siW6N~K05ybke*u7?sM3AuFBkm&$tB|k<;lu(V|aQhwMM7RSMz3JM+T|!eafo zQAo}i^63(=_<|>nMYJl3W#RNA_a^P5P$Gwd7BKTwDmSLuA{|Iz6wSh$maz76=eEq? zpK~MDueCZu-E#M@FQ2lo2m-I5wk1UrYSl4~7AM%)k&cra*?C`b;~iMEu!j)#?`Mc2`aRqM=lFGN-+jE(mHq@dTx-) zE~-i!D);iwmMU%uZFH|$_Kw%l(hu{W<-pxw`v1ggf+#as!n?fBYI==va0ENIm%;y8 zo|TBB0$+dBAc`RBw06`@(+(=((xyPFs&a@Rv~Fgwdb)}^=q%gV$5Mf<`r8O5KqbjF zMq+r5sa1D8D5lIUxpo#jv1{e$RTwiHx=FlgoW*Q7w<12RKJM*#yj43fUG?Ns0}a>bT`@ z8}XF>atz1B5S*hQPAZJUnT21ov|~#(y5tNLO9C4;qK~^d>+P2xNd?*}@80502VsTW z-<*A`@8ba#uxQ?QvKmU_1f`4Y4($^eR2Q+KJy)Lj5UR)mA?>ZSG=B1PdGG0M7e)n!c9G+$e>fmUEC{4rm5)G=$&H)lf_nZx;FmEUs_fSYcKGTySNkVrzS$0_OJ8-_^B~+5R?U z`0j0oL<)yzGcoUtGv7`MX@rWLY#V_rybdmn!v!0O)#dC3mZd5!(nLW4{y3-0IeLAu zyaZf>{p&vs0;_wa)||rr)#LfY>J7uWp}YK_pmWmM?LUc57JbmH$7UZXb>|zb*V5;e zE>xh>?GF3U6@uHY|1`h?_G7n?Kt3E#M_^(#n0%JpOeqM%^K_$kZSp`B3Km{K>IbQeHp;4Z<5r;g%bxz63^%z;Vqj&~WeQ zC{(LmUh556uEiCO`puTPdP4y($CJ=V%d+3R7mJ4o(#op|eb(B}lwC1sILC-XOURC~NtlUu; zg%d(Xc@#Tj%X9_9)$N*tl-(0qK9z01_SSH;hziDdz%C(=L%T&|tC8v2x4q$fdl5qc zASv^|;O2h1vKR#9gy-?5hqPast%;L*8>J_4!(mMZ&NDg2KSsh{?3t9;P*;gRDcm`A zeVS!5@pQR4BNnN2eYj=BWHc&|a1Ns!r`sQb(^E{vylDOn(w z*K+q>Mn8nowo~D8vFXkbI2^-tH#z601Oj}W6xU1(Xa{I!h-|zgmC2$7#6pimX7lnN z^==3B@T~_s8<4*FpC?jk&hfbmH9o^)4r768v2S!R=PS?Zbahqr6v&jL(leo4j~-R$ z>EV}@@Xn^E{&ep7RlyLiepVN>6Oh;*0OhDC{^1Abp9BjTMf~p|#k4#!XJdy_Y3&TD zU2fky=cTWc$)t}Bi<7D-*vT-YSL^POf5~QZo|KasR40K{H8d%-78^)e3t&9NnXaJl zn|cHNhM$ueMnBl@ryNjBo}}(T>l1WcTmb1OUFU`!x`(ONPS|UReU| zTQe0wFHf0Ma!H2-F9Enc8!l1~ddKOA9}JB3%5*A%L#a*N+aUwH zVLM2j!K-zX42Y>DbK;_vhI_l!$f7aD0?V7hX~C&E(zrXr5Z(cZAhP}ifB%(qh2wvx zX|3JFyB!7z)8Sa>99Km_*zHD@HyXfA|ANqHR;4voa*v`$nUNiIZDO|HXZt}%@V0FD zE57`|ZuGZNlGEmt*NljhvpbBuCJXu>OF$L+g2nj}(R!=b0|13qgR--C=BMyMgtLbT z>_0(8?i;5Y%R3j&M%UZ^H?{qmJ^?7bpJaW`)5?@9b4gYr8x4(II2-JjkK2&-<9IG* z*b|sc4iS^mT?%ALIx)ZcpEgGr7zM2NNY`4vgdY-1aV9j5L>GkJ;kGmt$e`K?%N}mi z70FYdm5d^nmRr!Qj|s}OaQ#|moh{WMptqPCA!yL~6gs4TZ#ifMY%FxpE6sXRQlrMI zcxGg#5r0w0G*3+5@)QjvHF*K2ymCP*Y;+5`7A7`(!vXCpp+2(bqvh^IemY3U?vJU0 zF>6{6X9&I+CGwf?wyv}3B1vpa1&*A=d?oqRi+8sdIIX=(`xHxbc3~B5nM{LoW-lf{ ze{0CWaF#S5d2w2CdLt^awvME>T|Z}ep2poiW??qw$i)ego~7CQ-77JRa&0jb*@i{a=oL88ve#43;Cs%*9h z1?|J&;(btiOIs+S(#&!2Mq$9;H(KO9TG;;aD!W=nELYDNHG+{}H2`(8-i(Br=ZJLe zR)QqwNm!yXyQ-|?<9~4h22D0g4wjZ)>rmm7I4;&2AyHD|r-p?Z4Vz5WXDST%$)YA? zn1RCPe61Bhgn{8Wo0IJkJVl{D-6Mf5P*JW7j<8|geb^w6>Z)fv9O2M!=C5?UJSRJ! zt(4umm!Ca7J?8_`@i$YrRI@TzR^_>F({nSKc3AR=)&R^tlaKoK3_hs+1wJeq9QtNP z^f9=RhW3c)4|%|3cAh{u^X&J>pCu($X|>nqspa!js*-XMbD~RcPkA*$gwgEGMDNd zA@<@htI+RxT`F#p!AUY~*C9G(TgD2H%~}F)_Hpid0hPLAHM@}Y$vivYL;AO!D1*S5 zgOk%G_nEO6iC2-we2yC3g`W$UEyc_PFRoz`NJ3`@{Xv4)$R?Z}ecL|ete#b^t{(fX z=af;Y&h%w(OfU|dSEsAZ4v(6B0H=j<{s|N5usVtYF`oU|q?s-4Zfi=5Cu3t#<|6xm zBNLPPX-9%Qj5H4cPhT5b{FCy101`k8)}!`Pjw zi82`&bXpL0WrK9^*0L;+m0@&5UGzgOn?21H8`Z$bpKsPYVS?mH_Qz1p<4i{LFW7mn zeh(RN2CnFC4XSg8KKU|dydROxtxJ%`&`&y?C& zcNKqi5=jz8G6!W>W!$D0LrxW_9gtfYF~*cW-01r1+ZHW$Mbd$EX^KJ?<4Be=7O>pG z#@UM{VcS>WnTve}wf=$%{@$`KJHIcB+wR8kLw?J=tEIzsE`k@b6YuU3h|Nyxy+7}3 zhts@oWHd}|{WxI7G&W6OwJArDC6OHA&4#EU3^h@iM#Wys ziob8i@y?vZ^gzG0n>(}#zXw@TQ(ST`GIvO4@aG2lcqv7JynK^vXirEoi{}lDVh4JR zWB+SN4%b@_iIGXJZ&)r&7M?R{8kFxT^#3ltNrV}y772Y-3c=~G8NKuK&|eFuu`r*O z@cVxCb&6pLg7o0~9i)!Uvi&IZg3w*@~2QFi+S-#aH`whwUHE`6m0~5l!PYd8ICxjPWKRT$U@N%3;HenE+f+!(FCON1C=Ac@hDc2A4s|4E_tTN*2@>%)QA@8_@8kt!+ruoGGk2f{cM!&09vVtR z4VqQ}421`be_Y7F3JUr@ZBG@+C*Bccm<74FZ}5WiR>bRP7RVKYn$!9F14ZhNc;71m zc{3SV7$!EV@GFz?K(9(s4aed+yG^*cUcC}hC8>)Sf(Q~{niG}Z6IgXG8E~c&7pvEh z0gi3p8=G7k92G=sva9u#OcJRo5h6<4*Qi?iSu8~KWoJ($hq`Z+b1M@)f)5+cz=csVE45BV`mpY+t=gB#P&(6vexyJqj!z(&0uYci>j^=y|c(65{EsNkxGeVMU zkrsueJMc~6Bz5o?+0RKThC%C>@%_^5K$CRVFsf2fju|*ry2M=*{J}RrW4@d4MdZlW z*D#`36GN)5bu@&?GSmy!8zPx%Gk(D?a_rH89rMJAv59q8;KW_;siYYqAVt7!u2C%{tuR-l`duEOS zq}+{NMq8#s7)W*s29pBBzBw%0_CyDZuj#%<8l;shj$0A2B{^g`b>osMU1zA2t*0m^ z)2fR-BQb$8&Bmurxpbr%R1aeAFr!%#aOw-2<=kP=6j2R!Hh2b;qU)dK=DR0~w9fUP~tTZH}Aq1N8B7C_iYqNx@y%rTr(v6FJ@ zn^gbU8JAMtqf^O8H?g>VJ`-peUxSR&7wZvkMDu7`GWRZt#Sxys_hRd|hg!3)HQmfe zGTrOXg2OUYO!29oT!_qiSS*cyy3cL#FpuDcsq1z(G^JWSs(wzBba~^hC7q*xL=D-2 zGugS-;Ku?X7G%u$wil7UwBCfocou$jj8{#d@{}hnPIMd*TQsqbac`rRQvJ0Ryaq_1 znAQY8xqq2(+Z^36Npgra9fVb7Y>C?pwV6ew2r4Il%%^d_GjH9bV#jwxl9gB@3$bBo z8y5PE1f0rFUuT~Tv+S5!)mIv=?6Y`u@v!=kP0?a_C+3umm1B4dfHp1+XC7Ius4I+C zyoTi!j2{{caI8TmPoLV>R@7r>*ZzPU7L)HN$d|;{oY=f zq^pv++LcK4(uv_rtWSvD3s<^6t`Y^os_^CtbC!g{Lr6{QowF(K6u*JcE!8nTZS9jNWuu>=)k6%X^k1oM}W+rZ?zhaE>-)AF?9~No5PvpS^Iz z+4=TmV?O(d^dQ2j%YN8g&X?cn^i|H)TjWhvS>kA4%k31}B8|O{mGm9<6Lt*8o;it> z0NLEZACpx6Qwu@t*5|C^nOBDADdvw!J9#ohm!2qA!4JbLnY7p$0cBM#J1$W)iatv) z@Ywnu1cITNAqwLC2`lJi?$!FPKtcVv_4J9Y`rLz1 z74EAeUxNEZ*T%bJ9OYlSYq3hwHmzi4f+%LmNpdv#+v^WAKz4U$jbyzq7UAY>D-?N< zrMY>`{~oZWm(Ow~g%ZDDze6ScVY`FBl^IwX@<%QAjs4jsm0NiTti?kqjtS6oZ{K%>xmj{Yx2s-zJ1+pkC*7V%PYz!c@LFWRWrc6J z!r>O=bp^h~IDm@T6+?x0FUGCW7Bv^$U#24&CTQ$=Yxms+S%ryE7tI+rf;JzN^bThc z0Q1ya+P510v(xvYGkz>0#1^tt)4t6CrQd2TZb;7rA}6N-Eu#-lEq6nq*sZSaxEx$= z$nk}8{ON8G;lvi_kKeIvKb^oK%mJIj*V&3K^alV4?Ts6L^CsWjLMhb|3j&k_bFk|aP4>{lf{0Oq0}l? zIpm`;1-0|(GCjOcf7gR5NqECI{-}~s;t{-X#yv%j(jC3G8;A0*CA0f?8TVG`yMj4A zjZ6ciueXC!n)9Ta-fd+y@uugYQm>VdbtX23ts$E2+>I4V+K$A)e;e*m6n`1@XBzP1 zESI+L7NrvT<`l{j-m?aTy7`t+E=MZX(?h=XS+Lr>#MbSLz}We$yPPT<$7O$?rBaz4 z%ZvQWKc$EFr>k}{*R9*wCIhV@#S>L#mCfxF)&=KXn^c2>9XwsJV=r5C70s0Qf2Ztu z{Vx5)?VQ&WLTJpn1(681H?^8nhOEAOa~3O@5C)TqnL4Dw0?QP~QTssoOrNgN~w5ky&K@^QDwh1(QgoR@92()64*yOWH2GH(Of8in+w}S(1HtsYWg0l&gqlG#d3jMiui? zdEdT_=c$BW^=tWt*mSF6I`aTNM;#RdpX#i;k_x-W<5HT2IDEVF>G>OAHUfY1 z8~{lTkPbP@gjc}rWc@&NvO*PdycFp}Hp6ZLe#&~23-kR;U){+9c{mW*?T=-d`{E*6 zxkiJ+s(2}YQNmx087*C}YXx3(s3b#4Th^$X5J1jW0d>h>P(1(!tu#%)N`zFt0G;${ zf5G_*?2EsMm7%xY;rE7$+K2_QSDN^X#nZQe>K?9rZdng!1BSIC%1E`z)}`V6C!R_o z>4ZN<{FU;JE=IxY1CfDmG%&{&AAFTqvLNOHa;dOI(%PZV9|c>2;m=^Ee?_*dAu#O> z;^pbkzv~jyiZ|j^%$I`)EdI{c_O9>Ah!9}6(IzyM)ZjHm>>ZQii2xY$tMBK>x%exy znW~TG1FLY{T>Lz0eU{w44$_@(Qv74|DJ`F<1x%V%5#(pZog{gD^Q(-f{Gu#kN`R>% z{8+L90e^v99G5|Y%8REMD|jrr7;LQW-dKvhqswl?f%;PApFm~ej|!EyV2)kxO^Rod zXm<}E-<(B!Fw3F8c;&<3z%*Edtz%H%u2I4L9DO@D?jG~ zol_8sOqQ4rz?aXqaIl(|Ic&ac*0ZDw1Q%FQBNRk(1TZ_^oak3rw!SJWFAriw>kd^h zfrbkeJCNO;Uvw3BZ08eT1)Qs%fyGgry_mBcJg4vL?#f{R>8DtOTBt%BGw9bEQl+2m zAK`WON9@3dvlBhGXJH$VE5)n8BW{$~Y@lvEOn%uo(&EhgQN8}+VRxtaoij?Tqoc(p zqXW(Tm(J}>Vags$j&4o|RHH>a!C9H#Mh;TTTPTeE1-($ZwR z)CR_!N$uzj>CRaxwY0(jmZ}){_jS><_dC)yvl@-I80rm)_rAy7M=NU>$}G7pUz?j> zx(sKUt5dn$oMQ0ycLHkC?ED@UdM3Ari_$t1d-IOYi2X|2My=}=4({%!5vRBr?hmGG zL?mziZ-wibcpUNWWeC$+%^MF@dx6~u^Rv!ji#hz!McunWSEaob7z)wP*Wd>{@R1`L zKGri4aRo-e`o<%9jN<~Qz-b~NNi)Ve-JZ!fFeiA=+KMgCh)#;OH2i=E|gB&E8}NP>+p z`4Xj=Tk$1#obAb{OugDD%4X7?#$H#V$x=xHNHsu*@)prS7hG zko1RCJL_~%DAa$U3&0*=2@8HQU;vB@ZmohIp{#7n-%+?%CY^YXN$_v`Q(BTb#5-;; zcV8DLd^n;&9$^9j1Cf^0Bl2B$!wsSI#cPYXj+O{1$s4yR$Lp2;xFPp2ErqkO)Dfzm{P5vCM!hDa(`v5Q+He2}6U~jtVpicN(*0|E?LQb2Ve@Ugv zm%~`us`kZ_8@=wgzPrksjtmoq3wic ztULbo0ih5GN`M~6tApU)3l|{HyRU2 zk61fZ%7PoK*cx)Q;m5Hq$AG3sb|R786cfS_Y*#IGeu?S<6pEqmyeiGrm*dL$25LW?XvUw@q%`loY46Rvk z=0J-Wx8uPkKFeTCvu$y}T%J)Mkt^f@yEE2NPfd1?T8yXCP(GliT{rgjCl8XrK*UCa zsdjU8t9w)ErYF2^*!Dvc6Vp?bWWrUXAdR=wCVe`=nGR6EC1u%_@PdL) zKpX3zYiBVIohXMooALm9=b^2^0XK|ToE+Z$J~R08X7m5%SS}QFWFi z(%0Jb^7cui{Rmj*#83h^>Rt6tG~NEVFN;?M&|2I^HbN{po_D?J*Kvok2RE9>NgdHV z(rWS`-D|Wx}@FS*m{ppQZ%&$@iK>hL^#Z6I;P-{zu64@jQy&=DB07Bbp))ry-({ z|CaZ>xDoN+|I(oW<{+LIwOXWMTo#DC@wWU>_n5C>P)jzGsxy5q1pQa}uZLekFEGjK zpK3%}bH!3>tWVhX*}yde zb+V;B!1(L!@K1>zu=#YO{vGN4bn?2|XTSBWq&qw>pa67u{a%vzk&!KKXW!9uhrptO z#GjloMA~xNt@Xg_J(X$<{0ltYe9b}kiC_wcm2bkMEC!*intQaNsMbqJc+5YhyW^8Q zM_&rER<)r?j_+qaOD)d+_|2`>Z?$BCYq4;Jj+-K^9^Dx6QK~od+mJfkZ89 zxKJRR!PEb^YA$-lv+Rrb{pk_H<=)c@pw6Q?!okmyC8qI+q>4G~2xeD`iV~~mS!5F1 zQ@QLSF_e#m4Ut)MPlbGQgq%n%Mq8wBIXVoUu(ds&a{RLAz*XJ92W6MX_eC=K|E<^N z-{at4TY49yXBZMX@xP#)7H06-{pcog5$5?d`TzXQ-*=Gmc?jh*vdj;EWdV=ZAKs5J zeT~Zs`%gpOBR~HVxqsB}?{5-PfzQOnH(`ta4b}fQi2q+79?hSBxNt_3iS|6?efDd< z$_G&r4Iiq1xK1zwp$PCr@rW_}D?H})>7q<)`nVHEX!0iP7Ym$V|%S<>t z8uXv;B;gP6Ohf-5r%&_@9dbA=yOv0htPS6_nrnkN^AUtZ~nD9Lw~Ifb1pspKVGQU@1y7N zTyi+f+WOa!1JA3YZ)=_TpH|1k0Zh`(AxkFxU#sK#ygCo85jgMu!|LEXuMVdT6~W)D z^O6xKIdDmVDLX&a8(Td z12_NQ*L?ye$)v$2^RKx)ay&1qqYXL1|JZW<&r7&(ehwAaEeR*;*IsQQ^Z&&K_-llv z=cmp>fQ0!!1cTRa2NLigI|$w$pe)u}A(d)00hgeS<|f3t&pk+CjuNM`gxL2K&o_)j z{0wN`EbpOt4J3M6UfjZMSDX5U5$9=$19XtF$^pP!Gx2kg~24x=`QVpa10L6Z5miMqphqyhm0l_pFr zUwFDHaukXT%@#L*eU6103;>9&-&JBU@vkVgG(_soJuYmq_WXxsm+W%tFN06`PEVwn%0bLI$mea@i^93pdRJ|^pHfnuHE zL`i&_bA(emXsFV5pVkU16K5LEVg}8IkLnGse?yg?`!m1rEGr-%Z?;m8R9fVS{~`1r z-@f7!uf#Uh_euM~%{T@GR`6_MD53SmXdDxnOme7~awRQ-aG9xFub#GlF4Q}8Jw8A_ zcbo~zS* z6V{+kZ-V@V3vb&A&_e-$8=&h%Nvn4~Kq7?G^S{&Wi$RfF0+7Fw(j+CXcikf-!pTWH zFcM8fov9!>T$t!*tVUZuKjmGI+9oV}l80z1iQo(eb|%z<-N( zzxdxYNM^-F#2E&mIM69*07V4CxAL)1V|;T9&X;LGf{){ii3!E|_M>alH$>Q5ESLab zHDTFu$3bEmB_jfL5C5DLu=UBBzi2eOpa9fHM|u=AeajF^mNa|6?nSM~mP+IPQlxU& z2^7s9FsUwrjyDIe?COM>Vhkr_P^iDJ5#x#_Z~k<&$w^lj*rml_`G`iNE&%w$pT0(z z9uG^i*lcoCzjj&$i)uK@gL^Q$yZX>@1vQ_+W;s#jhJC&_2f^utAXB5mH2r#^!C`X= zi*ZB;uU1wNf<-L3CpA26XQw=Z-{2P@{(PH0E@!bhY^;aJqJY`nsrEw%yk+yRrcf+y ze?RtUXfPbzvHum~Hcj%#d}J4B1`&qF7O711vN-L(25O%{MauL#KdU&;RTzDPFO-_y zR{xNlW6{C_Art;@zlp016WJZ8uN_PEBvldD=Bkc<0%pZAr_oqWD~}=?FvFv7eTe<} z-`4*B>s0^y7A;%gANTR8o)W`BLvKp?oM1E|7Z+!HE0#XWqdkm)G8%f57%@WZ5?y7P zU-e1xs^4DA83&0=6gWBjwNrTnyfVp=R$jqOp_QMY)`1S=NBGw5@%{}ESNWO~gmH2@ zL6IdA|1Mu9`%lo0z5niHzw+5L{wD@`$$zAwp1A->?xo?BGhF+0PJ5HsL71OED3+>s zk)GjoCy^m-_G@|pJ>NFh3GFCSY1qHZ`5wxj_oYiqP;bw%e%fr&XiFM?0#&}f8Rz#x zl#3M=4 zavy4XKONO4C*sF^CH&Sy_(Hm=?#~^!sZI}K8yXrfRv=+x^zhf zeHnI@#_6R!QfiIgG4NV})N$km);Av*G-@57LV*L}UmZ`c|08wC2|l>dcE*^}QZ+z< zDnTovm^|21cyR-uHao&-9T(0qOw4>ei5DZQIJv4_M zPp`LXA{c_RWfd`FS|A)+Q zN&pS1Gjw$*1eeSE5yBTw(7sozK^jp0l(wl}rc9TOz>Fntr74C|(_)W@9w|3DaRPMF zZ;`X1%~opZkG*E^Kb#{yxKe)8pqQ!dR<||IRIGWMe$(|r>IxAgM~gKSrIB`Zb+rVK z#yn{5X;K8`%|Lw0?*ozBktHQm%=q1hX`M>fsn#u~^(zpAV>_T&)G zP#I6E1|m*>Ry=*JwvV;c8tma5PuIWBSnFv`r}G9~$=-OwpjlNp728T@8>84E0i|8u zZ(-!PWjB5wu7L_CJT7aHCnN$8V_NHuWJlAL&3nbA96Z>K&{3F zDa!XQLEa@bHWqC#h22+;)h5IJ>GAvV@)vj<4zDsW&5d3ZedRh4qDqrOTpi7|gsmr) zn$6$a?8|Fw12mHsOLf7vJEOgQn?K(#|Hqq<11=!5aX|lS`IqbjM$jEMK z36TE2{H3Wr-Mz&tSHd!h4Jonlo_5Cmqe``3w=?e8bY7Es!xbLOaO7DR`DDj4^Qxt% zPRaG*C#~HqWqeRpLl|AbYo z*T)1OIHY3uoOBj`%`^42NDJAQ@s{tvipt=K;Q52$(l0|pcYg2ncVkZE8vCb z<&f343+!-_c+P zoLgs`aGA~L+Xhr?fUv2NQV6yOu;nK53)N5GEQUQk->Fb)C&1;fjXJxCz@BahZfA)! zgPDQuJBdvDOOHcdS`s|PKU?)P!zl#qO)o>CLX$ui-d{j@rksV*O0JQF$MeXIc~k(d zg%$PEivEW>HzdyYbzlGCuza8X+Rfk4gjw&M51gX+GM14!yzJPt=3+Qhjne=obpueQ zJwGUXSAiC3i1qPf(AOMK0&)3`0{Ji+%`YF>tzlPIuC6hmb03?(bSF@mWc@l?Y~lru zoZ~;~)wAwwbo+ePx+GUm)&$j3ylAc%5BFUQ@`MEG(4+%Iz8uV8g?!H2uaxAPO=#Tnq&N~YeYHOm$Qg-3A)muwtvBScMiL^3_{rhu-3IGKC2$AL z5KpWQ?;YWg%U6L0TlGI3XK3RcoJ^+NfJ->hViHhIsAe)~a}q%mPVV@wNVO)W&t$Md zCT2DrZT|{)z6c^ljm>I?FiD85+ zl?D{|s{ZU_+~*k9WK0I^>2H>~+Lo-;0&o9@eV zpigtWSeancLN1X0W3Kw>CvdFPUfef|JF0)(7gOqy+a-cbna3t|cChl`~L_ca}&_6|(IYrp%vJ zKZXTLiMHy*i#`N8UmfZU|5)4}W3SIGj>wJK zIoBUQ*d0ao`RVcUKy`YCy=_6A=u^$qRM+{=*!Y#nJM;6EsGi7SAdX(ejNr%xPmA%J z2P3|z37gGsKd+f9J%cK=$-yEnF;vRe5qQ%PLqO(x_r!S}KMV8E*PhJdK)0N24)C6= zc8nib%vVCAqUzi@Bt)92dXDQzcB3t~_*I|NJDqRS?bhK{>rhdRrw17w=CHFDHfd%C zq%$~R!@^DcGz#1txOwDx1C!q%fitb3FnRA>Q=+bAg0&K!4IDq$Qkl%iF&RzK&9qmMF?~{+5 z_LQ%fA@iO|$vg@*Q8%BT@#DfxyT_j$O4V)H3TuLy_6L|rEzum@I~L{Ui6NAz5r%P6 zneW>O1N8e6Q1}Coy;96!Orha{*Y8&CUYO}P{WnrEJOZCrZZX;x%{h3 z_(9Mr@FH+tKU1c|`WQ$JHLbzc_SBJc}` zL+*RRm1d*0csXnZkLoi`23*dQY?6sVK)mL}K&Mj$&vxp|{vt+qot3a*j^!|3>z7?E zYD@K>*?m*r270~cYwX{4e!o7Z(`RKr{#u;fr)UKvUlP*<9prUG{wNhr3Vc7`wkmoS z5oZng>N!v+0to(lQx?DSBw~R4*m_SQBsk#ce_%4WG=&=OHcAB2YB)$6FArziy*P8R zmmQkdkO@;jen^;`h zJ7z;29XQ1F-ssZbEr69M95##i5f;}1chG}vP$t?ze2nzo{34<1n&6$M37r7S+pr*> zjtD~mg(fG)%dFr8uISm}3A0R84Fqgh-fGjCYaH>`fqqkTpLjU`$uAq-2NQ+N?u&&6 zl440LU)71zGt83NRFtZ$^%!WPfgeBt??v_KSce)Kn%%;=Or14~e2CiVyM?k=Y~Uaf zFxe7asL(p8u(6;^r_T@=3SIStKa0a+`9i%Re|nF>#HY??tCMs!F#&#)m3VG_C4KNt zG~+0x$$4d~0Rz|wcoy#cL_b5VFekzwsjHyJ$hTWP1&6*_mE zTxa>a^B#!-F&!3M)}xFtrBkT&J~%$Z8W=Vr z?l!inSmjWxpaYO)D6UV-Mz~S7zsm-07Q1UoE?QdlXSP^6 zbtUxEA4-9%(4V#`vFZT!*N|iBna`d%kEG%W>q`?E2Ox_Tt74HzCTo4Y z9!z$=KQe#3cl>Jf9hcL|Yxv;h_lwu@#@ zs1bZbRc=tm`ZA6ZX}H&H`~g((;6a<@hhLmgytEWL1scWl&c_i`7TUqDPr&J&2oUt# zbq@A(Tf1od68j@qKLg0C=f*xWpc*K}{<$nB$D1AE^6TPWtkNayL?c&v(HGONXQ4y) zk7WgXq-(tlD({MkN%P(&f3hG-*Tr9Y6n1W-I)VrUz~ZI+St4cn8I`rgkUx|`mcTxT@0WW-xx*fV+?2?|1@V_T^xmCv)i8T}J^SIr;+Uw8`4YEc`Kr)bMKkdJ6A6wsJ1XnWUkYtH zJ13YXYyd*z@_70N2=XcVQa++GiKH^zeURm(3-;}mmY4<1VSMMyA`Yg4P;|pnKNaTa zI`^lS0HX88=YMz7(m*%RQxhb3_;-Ev<^S{Ux?_5163-$Ei36F5%lF9S$R7qTw?}kn zZ!y2baX^qr{#tq8Rqi<3$v}rZdJR|%wGKz{<_q=Sz<#KJzdReD)isIJ z)ra?e1c{}#xNLue%Z_#t4N+B9VtKCl_$3ng?Csr6x~X#X@y7`^``tfvHe`(_tz{3p zeF=4@XjE!`_iyA@taW~QK!~-FP3^dUFhjW!o_cUF~`GAeEH z$ph$@vDZ3ZQ6J7Xd4fG;KCi0mOeBfKCxHIDBtG9@rDE10MQY7}^3;UAC@($4I26%5 z!#gTF6CCSW%SV@>#olp*Qzvp+h3HUaP*rss%f3(L{p%DPd$`A>y>Kf|nPNP<9nL#4 zB6Q)P0Vsg~@74QzA9Bq6;W`@}H#s9LMVSnTxq~oSWd_{N05-e#MF{ zcx~-RM0uv#oBX}+JeHozRV_{>I2_-hy7DW^xb{B{I|2m*jaQr7>Ro^A08XVVrf`iS18ik+= z6{_AA4&L0*-q6M; zT?@@ell%BzNFz%nC4~Nf2!`$9_TtWte{W9NZg{QmJiucgY$UH-p7wjFI~qHR2jY`B zGL7v!#E?WQ&n*Zv!OrO)(1Uw+1l-YtVyXFfA;J|VW>$kSR7_Y*x9GQX9L4@UH6GB5 zp64O)%21gBp25|bc_o!OQUY+)FDNpgV?EIop#H}PuTuHtfZ*y*ZZLO4ak!);B8WM# zHU<)UfV?-0V_@H$_3!+sXx+HW_hXm6W7+x21=V#uQt{MY<3NKL_@(tlQ?doLzZdy< zlvPBcPw}J+zd!#K-TtLMiF)P1LS8!8yW{VF3ed>J5IqPrPS>B#91iQi;j2-e&h1d$ zGJCmK5*0}uMYFZCH&qfvV~cfWKe)4}R)AG**iTPVW6%@C(4xLMj1-bp#8Ul+LJIN9 z&E2ve*O7vmgY^{s&h_c&>*AmZH8nHaCCiYCaoC6F3KwM5UYuYOMY%q^20Cjf7hba z=N3tu6LQ&Nl$;F|} z?1~6Lx2I@Jj@m^-Mr$njXTFU4!dX%8EgQHHX@Vr==23^f+}sA8N`}i7kxghEoof5G zA|;Cb(IlwZf{cV_v&z`ylCTznKNl43tbZNjpO;Gia|Zv{x$UbDMIuyrK{PwPT<12& z{zE3IJ@m>9bamp!A39Z1=}D#)8}+uBo`{v-r6j|t7m>G(A=M6t^MY+cenWTq&7Yhf zHD-ZxkK$Pb|2mz&;$pKKLc1RVRXXU3yPXLtAccku{M+KIZz;?{z5}{qYcPuSTrKt8 z;(Faa@f}mv0Vp6T)=DVOAT<@J7HMsCNS_ZSbL1av!@?g`dcC~u7#mZ3tUf2O+ZiJa z!{?|rJq4A%u>w`gT8(vPFewgzr-kBArS~UFd1H6A4oui0!5ET!Y{00z`Jv48j}#j* zCgg#wzDj1AJR=J-y|2nk`+qL&e{_t%HaRM($Q-EoW*h!wt#!T#PSS6Kf?>8?)S~;P z`vx+S!WGj06`Xt8Dkx{c+M2K#}x&B-rTP$qw0HH670pAI@>4AE}OHeh8WoMJOsg^qYZQX-|T&Jk7SIF96yqB*ict1TQcl9a;&yFKGVj6#Acg zr4Wl3D#>j0QdU>USf0EtTmQ~PZk9+8x{65)P zi-+%I8DJSV=2Iqrlop7?l6A8c$v9h{xi#XFNnc??TDayb1rjO11W7#5;AQ?d6NH)^)jSJwhn!mK{_tTG z;qo~1C7%MX$0MTsj7(Z8eZ`U+F{w!D@XuQi^h{5GiDf;{-QQW&S4QEr&y!F0`ZLtILm^t2T!{JE=AqL;R`q zaA?k1jsSp>Ww)vN2csmyWj24L2Gbz$PXzIznnc7+CLFbp)}#sJhu|86hrQ=4#|W%0|9x*$a4?2_tCq7{wy7s*a1@>9`VZju}Dry{m!5_ zRJF+~TaSke4IvEBmB4J;gy~S9^`*O zRrpKKuk~V&V>CmMY`)e>o5zGoF2&POGDe+{s3UT!V5v1_u0}q6F<-YtM@=xJCleY< zKtOcvuh#LbfBhd`P@r}`pMmgh{u&O?@A%(h#Q*HIC2;5*aG-tt=O18Qo`=cB?U(q!`6g`B^Mg%pc?_!m zIKRD)D8Y*yvL}$@{`EhUdOHf2Z-T!qQ6=>EjEB8>e$$QH4~9?wIuf|&0S`Vn-D*U9 z`n#2b;Paoh|0@js&nA*Q$IT>pOqCRW4>qd#^FL(&T~GF}mz*d1H6<9DmLLg)zlTs@ zn(TR#+55;#`met!u>HJKZy#_&>i+J0SB~cw;ip>U|GV+V?K>Qab?LU6MKra<| zQ|}QOB=cVmqtx;i3F!Zki7DqFf4A~87>^?4SO5BldZNQ}J$D9|TPB0z-{biCxs9cn zlZ5}~2#sy!0ONQkE28nw%Sb!X^E}o`-$na3-xOj34+>i@eI59Fsw_7=zi43_s&<9{ ziKiPV=$)+hy>Y!g@6**355LFP?+o-3fqU~7ptK%m#Ss4Aw;$W0^>Te?8=iOerj8)fu0*Hb{ zvqa#c$gN4ABVpaRCf6JInx{v6`E)*EkUB=AQ<3q2 z<}m>S=4?wSP0QYEks7{oOoOqfJ6u$e+zsmf6oDDCMS-ZX<)vvr`}+2=@}FzqANv~g zYtSz~KIMnPe@|~AoafK=!iS3u5dfP-BE2bdeKFqeJWnlHTj;|@7f;NBh2zyOX_0Vrn4_hpjyn|MNG5rE44TB(Emr=TvT)GoUf{f4 z8R3#XS>It33B$uo=X38Ym?}|xYbl388;O8MDgyh1_v?G9<(@YnG9gyM{iRq8R^-|m(0H%GP2djqd5{lhHGKvX`SV2u8d?Xj%YorR=RW%DmvUShHseaok~?s^=zE$d9!}v6 z03j;b*XYitpF~IaEgnxq82$iaux_Aq0D?*&*aedX@D=%Yh~fR)Gp^^;EYsKwtCl01 z%O(k60PbO-Y#3WygFqu50vDc+-EBG}Gz3S}tK?t0l z;4I^ud6=uQ9Lv!A$o2YWAs~VnjYSBWOI7oor8l@kB_-bg3}h$~FBYg9qDNIp#)yF& z^`L5<`|Uk$(`^`f#H`eYbg&u-v>KVfq3Y73CB}D0cx;GnDODq4DJ^G+ zefr{pyU=5$ckOQGdm4yc5cKbJkGKM9UYg5xPh95cJ*|Do^2etKug~ez(OwpOX&Wh= z`@ZPGH^4=}_C*Gl=`qX~Bi7*BxG4F4hKh&kJ;mtA2YBzz+8bAFMlHu@SPP3mcjTE4 z_Am^RS&=dvH0JZP2`-#0_ZGp=ddUJ4n?U{C24Akw5QRFSoz~f+$umOe;-y;P(H`9A zdvIG-@Y%rN6fs-TP|`96=BN7;A$PUqslx$?6JsSXfp?v7p<0 z8A_q_hJey5xZk|IX(|-Pz2`CrZn;`%`dsputuRtXJDwx!7p7@1Y4V%HaxqIid$u=) zg?F+J(gBE3C*oD7OHC1@wR#nsMP=ZwQK;Dfj|+KlAan-C6qA-#F+umY7rXw69gJ%V zFSdqVNcB5m0iVc+hnwZQ)Vax6+2==k0BJVbe`S}w#iT~<{jshbIgpsY88!l!bv7t( zFS_eYu{N@5%jk2B@nRNc`F4p|T)7P-mEEjNCU|Q&3A4)VQ*3E##a5mEwx@+xlNs?v z>IXYKqk%gjcuu2W47G|`Wt@dt>z6n17#CH%Ydv8?7pBS^H8}(E*{VnG84{LX!Tlq= zsiEf130Ntm`cK7~0mBTdNk)}zbXK3pVjJWuo?G)Ui==5iv-jacl^Ob5Mhx>a zcflPQK5YAD_baqJCjQp!grm>tBqV7~P7#Am^P}}@ zA42cRjyvAH-u~<^pcg)*Ua_S=T^dzB?G43^twk;qiQ3=*0U8@51}j}C0%t?od`_n# z!*KArRb~$-L#HojmhCp+gA=R-zQ6lf1_{v=U`J9==gYGZv~PI?bm`6@9-rOAe**VpB+C^Z@;mGNZFs>XIe7 z(C%VTvfryZyTg*Lk6VfEnbgbQ3R(f%O$-JVsomz?4P1R53S?ql8gH@1`I)X{)9yi0 zllfAtO$IG52{f`Sua8KMDGh-$XWA^zY9(*=vg2+eTK||$iB#sq(W?^xGiuRFkERYM zH~Dy;_m5XChMct?5l^(xk$)JmiTIq!-+W6!%q8S=#n6iVU9C-bpT?R4`|IoYOz`o$ zudAHXh7u6~3x4fF91lY?nexFFSr+eiG+euvFjZ?;-TUf;Z$18D+{{k%0z8h_C|bAS zt-gv6?zCQ>A>#A%>?_NU3)f3ek6TR5;6Tc93}Ou=;9_OeJwKjeZ&Rd}UlgjfyQ>cE z@r8RMb-f34yw}ouB8;xYQ5wjsS6jnESEsCVB-7zafK&=)ja_dFS2o6-*@3e{>$-PC zMri!$;et!$;WYkBX9uBG5x7y0UdQ#}D44DTgw~uRiF3Oh&+V~n{ju`*5($);HXFU@ zKNf5c=bd8dwUM9ABFb|RI@c12dS1RlYy%1o3Yo54GRYs%Kp9c2?ljIwaU-2Ax8Jq| z&5OkS-tmj&Bb48MjxL?*ufS$E=hc~tJZhD8!QlfVY3!`eUiZyJBPlQgV;L4mXfKzV zT>{LeEc!{qZ$eZ_1@9fLsEyD=Un3Gm@bS*R4(v229 zk$l=3KP1u!dcp~xLG^|!)3jS*yJ`We- zk}L;S!AZT{M+Y~n{mUYvq`z0k_49==gNVS3Vs^3C3E`ZxFO9)0gMB8kk(pMT*^)gN zlTDU#NVgQ0SIaruAi#cmyw1m|1yt4Ay?g@D7&JaPtyHCaTB`gS0!x-7r9^+x338-H zr>Qaiz&EHJX#IA*jBmlG(+Ue7adB>6c<_`d+!{!xYULUQiQIr$yIs9i-!ke?%>4W1 zTW!iE2-K?0=r|U(K<9eb8b3c2)j5fuLdAc zF9Y$Xjv775dgQQC#GU9+?Lh(2V*>T6S^k>jd-w)WCPGPKcB)1#?g5mc9r2;Y! zL6@^|BriYRM%N4YopIynvI^U~FSfY;1dEkl*^0GW7+2)a)`yKA!>-5}S2NWnvRzaS zhhyOY<^!E2yRDcp z5-m5BbQ8d1Tam};O^|NS(wHsB+*`K0c%@Ze%^p$n{ZBuM=xK(!2-bfN64D@((3PtZa7|OH)fRA8+a2l{< zS1C+fRx=7e047GOASVl)87NbBC!?Hk$HyRRUxKQmNrXR~q`bGWvRo`j3d7@wu~|sr zCIht|YVBX-^9xsCN0Ar#6iPU^t|ymiy;ZzWYqdfeO)lvzg*lLny<@HDdvdQ*{|OFA ztbV*DlTVu`HNQ1-I9%*$rzjY!GO#Tm1sLV-X-PJgT1(ZNG%l^0gXsW9LKz4Wt--hC z;J9BT!nc*v%?AT^`e*S)CckUz=403`wWzKlZjrvbD*rI>$d!pBQp^%*OZwQ;S@6Bv ztShDN42{C{lh!HE+Fs_jBVGa^w-gnK>|aOB8Eiy1Y0&Fg9C%q0FxC0>Y^++e>8}-& zieu{GdH3Ljh2XpTh3%msmw+Ijvq zMD!{AuP-k}eKT1st~sz_tXaB&r%9VJ4CCXwGz9y@d4{^afe*3l={`IT_6M^*Kv=o= zfkJw7aPzEx`)v?T=^~P1mYCQWsc7U|LDzz2145U}!x&pO+f5ljtjdc}7;4l3hav`u z=*0j9+btylWcZ+#xJtAeC`S|vJ2=*w*)3*Cr+oA;MawMHxfh!}s1Wc>T${PAj#2p< zpFF)`&d4CM?@oEsmsE;$e7t=8NfonvIqla4Ji8BS;B_0n!CiJqN&AKsC39RS@p(qE zP3x&)qdtslUZn&hZK>zl}$ zo5c~ILmlOr`uq^2!Z*gjiuxeCWkxX^0#7 z6GriWyFCd4aylkB--R#D`I`1_nul$@4H9J9r4o>Mwv)D={8B^Tizy%8evb z<-2kD6Kn*F&6h&Ix?EeLQxpta8mgg(lm7Bq-~!mqN~yUr(q?GaI!dMyzD6RVy}}HS z$P$H5!j=R%Y^b?v2+#^2QD{_C^kDjQH|dnsLg$qp2LgD0vynY(y63!!yXik-n5);o z(d&0wH6nH=wrq3g{&cfCWvoic4FY7=UZloCd$d@V?u7Q|#~QE3X`F6s?qVrI_HU8C z5z;Zk>l~>Z{H;2Ao z(;X30*(EUAcGa?ED>T+N{Z9H *=1NScYj_0#G88jj#Yt$gQ~_Y}u$Xw03_FAp1{ zcyZO!+5D zVXb>icfJnXy*k3?b}$#4efL!a^-eeV9jiN6_*VdB7Ru@WV{|&h?BBHZgS*E(cxghN z&;TSO$SZAz_z8^AD`fZLS?vRmh>esjdY2zRQ!Dq>BPo;#aml2zD!OlpSe-;8vr6tA zHV@D@s#(kz+wxbM9{M8g$mldxeyzYFQ6KN5R;=`Nq#lbeR*QggvR(G*^X|cCBmY*t z^0mQZi4je7I=vEr`n?f)5eJgUxZ@ibU-`-EFwryo5P9rPXn_URTwf_>%TxWgke<@G zx8%`W3Hp`MnTSSg^M*!<<9_{a9n0?Ne3_!N(5*Il0DLqZ7SQa8VIM zt{f3lj~ggptPklzpR9Ft^t}lfvI9<)uzyT{$B$t1j$EsG_8z@PP6m38vl_fDAFl9% zGapimprgv(7-t&Hb-&OrU)`4do$mCP_-(8|1bq*dwXfmcFH}-LOUG*o?eXdC0$I%g zOLUx~)sV{Uh2`i6l+d}=AU8&eD3X%|7}*!564VUyKfWTMG2s7p5W2F^9tz>Alkj~Q z&ga3{W}E&JH+pk^%puZNIAgPNvPM;FeGpB+>!;*Dvq?(aK|RXS*n;+@N-#T@^iXXv z@0ZF?@*`QTQZcmn5tBwSobEdu?7{M|O5mGo&{xhhCE?y9YNyrO35({+XRF=ZZc5y! zYLiJc(W&-*qXDnvg$%I(i|Kj(ipg|7E|5z$cSj~i3C`ysV%#pc3HV9^=hrQb4aITl zwemHYUY(WT!?Me}u;O7}ke>>F3a4L@4>Yf{(ROg1HC-IF9JMy9(KMFg zpxnF9jEnXraB$ckEh6;PU*wFm2Ov-({AD7uusptiYq$G5dgM8?czKyqSbRXBirAON zX-&G5zVy);bu8YX>ojq9vM6jt__Z`|45fV6sNQ7STIgSG#?;}~MB+h8MuI4&(#agg zlv1(GqP%cJVoaLh39FZ)Ec%_OE90Lk)*W~G#|c*On?4eVo&%Xq}3AVNKzV$NdN=}LTpNq2J~w^a5H?++qUcZ zJ6n3Z1`9IxzxQ8CSLRH006)w~GMDAebk=qgOv{O#3wVV)JaR8D#(0Su|Hh;6ftPH#eSSnx*D_!Ew{o1Uq!i1>U; zI-CJWxX@Ho;!c^XA(*z9;dopaDYZuv4xWyi7EARf$u~xvlBzkTNcSh=NQeZZS4-IC z#-&4sR9OsRX`XTyc&jTN0cth&RgS7ZX}r??JV|CPma5Tk$L|KGI^(t%T+ZW5!+4#) z#lRt@9bxou%RWO{e#oXP4$l!S)Mw?pp@kA~X;7X3b~8o$q^{Xi=11d?`4>4MTRu}5 zM>p-;3nJEuZwxUYcpRp0i5yZ!f0#%gVfz32k;-R_g=|C@Jk>{8Q-#B?$0`;|z|eAn zLqPb1io&DgP)qCHecsn>zf~()G4?}`K_mpP>)vHa&|oZ2oV%d!ER!rR!zCg9QG@)n zA~boKPfo5D>w0P;-mSh3LKaOf=iB6B-}{4$iY81ex{+#=?(=E%YEzD4w!hWkq;R9b z4x~Z<1|804>W4aA-JyIMr%Izvxlx6%cHXP$IWke!Z8x@CW2M$?R^^VX*DR}k zy?uj?Hwa{c_t%^@)7qVGYdXp`au7t~FW)gPEI__fFimTwkOz{qR;|oNMJ|~#s^xkd zC~2Zl^C6m&MV9mtak5gKt`;&+eq|^34L^(Fu3CFeWwoxI`LGghO)T5>ru?(qss*p} zN=Z`2NvKkjd5WNuo3&pqy+uj zb>}&A;pTSVo2|8a3A4_~%d-ntQiS0BDd@M0(zhR;hv}S%Uki&l19#f)oB^HHKf*7P z5!8Ntx)UxQq8Dy^4@|Pr+hgCHG}@0NP=AcyU*!@*IZ-Ln_zbjdRvG&Dm_=pyo^VGj zSq!>_3b15FC5(Mv&PEB}tv4Q9AYSkqT~T&qYfpTHg_Q)oLzU`H+DsFF-$X4ADpFBq(Eyy53n=#Vrk6G0x;7WAPmoX*y3#^X z_fLagPV?O!H+j+R)R1}_X-z|ZL{dV z6+34-dc}@=aJ(}i4xpDp(2SRQ#XKy!tDhyIRcR* zibkFO&p_7=x=&HoU9jXemQP`lF?qdrL)X^XT@?{TOXvANRE-PbhpbP=jlS(Ie$4V2 z?MS{V+2@i?1K^n}(M6uR(Ohlu6CACke&wwA=`XCJ)H@3mui>$1J=1vadfU|*tB;A= z=aecp+GkET2o&-a1i3ER4?ZkUaz5*{$1qeHD!Nv@P9=f~SneWO9xG0uOxMGU7rZ0rTH?65~l6w;rE_i=58Rx8ZP ze@L=?9ajsoYVGP7%NBo=Io`2GK&$eT#BHhW<7*7YPk#aM`EeN&e9}3e5wYP=3a(!W zhJTZrUSHiE!jWo`W|n@}smWv`W@E9IC~sap&IiN4#3FDbSPXi|%qHniWj?syliy!V zeF*Yw)jB-yEnfRAaH(1)B|1GfXE5}=YW2pFo?7n-gHA`|ki=DI1?r14$Jwk{)WdP6 zTeLg5w*O#xVD!lBpI<6aO|7_L{y$$QdV985YbkIV{y^K*+Hg4rs#DC6ei1Yy(qxN^}p%|NPgPHlvdj&*-@L-Ve*yD^l07iTHqF{>C?zWO1 zec9VKEh-~u-EIT!05QcKYVe&L5$XpWTk7Dh*w~O*|1-~Pei{$JGjdHk}%yC)c zi0o6gmpgmoi{=a)ba)%GjSyNoc7~E`1VB-LvM^Fou7guDp^Gs=y>jEq+}JNz*@yxh zav};5FN$>G?oFV?91YXfFa+J$pKgilxO=r5dz$UeijGTF1xAlAf;8l!V6OEHTWF+x(l@^G#Q%Qq$PXE+hN= zju;ln4tk%{hiPXYTiZ+ns|kd+hSOS?Gds$xR?y+}q%!@Y2&kHA2xt zGS@2c2Izsd!B2Ier;T%*H7>){FmR9kguJ;)x=Ll3yUG$+ObJ9I`|j%S&<#Pv<3n2$ zzr>8lN$(2nBE#pn_XDD^q)z>nHZ5DcX;;p8qAuY+fG%S&+S<%&Jq-6PxLSvVIuFvP zWMqBVm{*boxxlL;_k)H>1jm3vu@EL;s64WHP!`1-@a``($QPHK_p*s-<~n3xr|F$v zuGnHfjggfU*gEXb?1jT)_V;yiGuYLKI-cEDDa*}eT~dh7=j0KdHQ1mht!!QGFEZLi zxoB**yFK6`Y>o&%x;hPxSQe--#u&4}e+M9rm@d~n;I7E7J8sKN{Ozvz0i;COen`eC z&DyR_LK@x9h`vrF@=Z|6rG}ti!sx}ct!op0vcK>{@#+8 z*v9J0m{Z578zh&SI+Rw0m@U_qiU1FO#Fu7{(U%cvj_=@A8?l{h#GiNsk6vW6eDkb; zt#P>|Y>(bBV=%HC?;3{IHC@R&*+F8fFJs5*=NqwLPcd1| z5Gu6O?7L{R|NYy-R0pFIJ-wx}LccOj3x10jVg%-sJMyn)*uD!^43DN;S%J(^X1Z+;KY`t@dx6JyTsxe-|=9t#~~&7|~mwba?xP~FL!5T z`%h+Dm#Cq)`cx%m2k(A+KDvM#^#vzdJarLB_8DD~V=NvEIP_kCVpN<58& zjX8kDfXXwZntHS>-4SV}f%0jyD#NnHORdbNih1KAX$P~`@^Sd#V{L(ENv7ift0hwp zVtV#L`9}N}q?u|0KS2?#mNQ6EICRhM=lI5YT1Rtl3>9{5zGsV58aD+3s&1nrT!T6A zym-7Qz!u%-AYEoA#lpU^8mr1tweDY`Mn(?}{VvTv7 zl;gu@SYykl0+lXTKAezOwW%wzLoh;(PcbxiSpu2*B!^s^;^zT}AK_e|F&HfgDHeHu zZ^W5@7eJjrTAP)JRae1wV~{9cmR&^C--XBSG*CvvZvQtX%|~+ajs7@hi+ho8M~grs zp(YkPoY>MVDsq8~-&bx#%DfXQW1ttKm?;H_|)_b)4Q?PkU3jR=S9is=q#2t8)#b zdUP8Sc{J>9(8Q!HhQ&m_H~o<1*1&Fcc-z&`iwa2^usO+cDo^UEJ6k5l6fR=(rEbFB z?ivLmiRX_V5mC!f&Y%%0F z5h5LkEReQFb!wGCqNIvVR7?DD5;E*xWeVV@?VQB3Ym1#Its9o z{cYZ%Rvp6f5x0YDV0Fs&hR6;7(>>XnY77g)ewAp~1f7K8B->e)LM?5cHk$9FbAM1F z2~3)y_ctwpj=)YOQY)b+oTvsq?kksMivQ{!F!jlT1VtmSdWnq%5NVzF_ovX1u|u?s z`FO-wKa0F{#v4x_aCBdLzjXX1H;;x_ZU@agP<`=cf6)PUYgkugK|{GS8!}YSa9r<9 zm^$}9E(^bAznyDDdUND)<*vzSIQ2}VZ``QMwpweZ92WZ!n@bgUx5a8j=!;kUo1J^( zB!n1*+ge8-`}=7@kuY@8H2IxOyT!F1b&@h&V|5{4qh55O2_u%9vvnzLmVLQ42~ZNH zkU9TZkw&dTPJGDk=$q<-oao#1YoqXV@%E~AWYHb!ZiRbUX%UN1I!Qz5#iHmdr!!a)lcyo0{1VzH1od z07U{vKF2)k>|l}%l@6-guI|KuM9D+B<1e-r>mq(r2@}1e?kiNr{N=OXg-H_%x!-7r zji@tD=ifn-9>HKSB+@w<-J#$h`d_p6vy8mMMz$_PXvq#>>e45JLCTH-Vh*Uh_1u~{ z{+}N}>Ngq&zmhF4oOHNl@##E2mDiXLeLenZkC#|+e(F#!eg3u{3j>P@p4u5yy0!m=q5Sdu8ZdyEp)_X?qQ4=<7^3wymTkr8|%0`Sy_9H!KBmeTJ)u%+^D7_Fo3TU9u$)+<+76s!RctQMMNZIRan$>8d|}{?9Ntq0$;MSc z(c0Wv`8r{&znnp``JvpfFBIzLOj7L_pTk0;)}$r$Zn?QVm_-O`Nl>L&BkbW0rC$%S zR4obpq=byQY&|Kg#HF~L%j12vaoZ!)-i?cr%lz zdJ;0{cV_%f_M;l^Cuf2-DGhu~5MF}q*yeUep4WfdnB)$9QJ zLtahg!Sk>Icz@SQ$n4lH$ME(z%-^}p+PuGu$&+WX7?iLrCW_C_XrJdsjKfrLIX=!T z)O!3L`DXM(RUN{*V!R5As@E?^h#Q7-WWVG9Ci1x`%4%V@A5Utw$lxvLZmU6{GDu# z`yDiEEMD8TvFzjU?oi1m`I88XX9zwxukJ|OE_t-37#x^w-KI8NvFPuA!(fQTj_Xf| z?PJItX|`X>_02OMUq)FU#;wiV65dn0i8^5CfpGa#hq8t~02E9skG(%GSGdd7PQ;Au z=8f84ku0|MJOBW}BM!vK7#EialH=2=k?`5O;vsXu{g4-e`-RnE(fjl8T#;t;dfU1o zC)FYU8kS2oIs@}u6fKgSW0jij-HnFS5DW#ybFOH^MAzd}JQORLsWX!oPgZulk?aH%Ww zGM&>JedFok-0;yboW@_==p2dJ`vttdmqS5D{ub+xhy%$b%odCF6eNdxTwJ$~ z?gn*u9-RHq99_`<+Lr^=3QCQHeEF}l#6wJp&h8(tX;8i${YEb{xN90EDJ|y4Sfu^* zi}KA$O61i*XxEDleJfO$@3I zHg@S&ybK68IBdrR7^5KiSx|4Z)T;dkb18b7X&)B6ggLXa(SRZ`ZjH3NF6%|}LmXN9V0!?-rqcLdK z#8~|T4p=P2EhL4f-$$-cd@xhRqJw;=Gwzk)D@C!6R}uthhR1ZX-(leGZKV@>?fiDU9o!QB{k<+rDL{T z4$=hXUxH2b;pkHK-RTwNA`h#6X9}P;cDBmXd_>4^irx%0Kpj1cO^1|>h`Y|W&pSeo zEt4Z<79vl~AN*M*N6H9pMXOBdeVxC>g88ife(hh@53e}Xe+(QSVs$~3p zgum)0%gbvr;^<%73jem4sD7zZq8?%o(UdlX8gO4-;<8zfgk_sw${o@yv)M2W!V_J~ zBGdUe&FDP)rLwAPQ+DqMGW@}L^(Ob@ijND0FHogVW46h|L;7*`9!A@rh4Eu$=44uwoIw~Iedg=Y8=V7-vae$NOC zMO8ECDRE954+_EfrCLC{RjOA-m`bh>(=?uxn`57PJ6&O1BJ!kPt%w`4MB{w+L5NJ%065ts_w)z_XKZF%(0P?UlLbmg zL!1%+3B(q7uF|2Zd4_;GowU4W^C*n6oaSbR5e_w;F6RwYU!&~1t>V)vFT8_l<7qm$Qk-@H1nBxG?7bUYsV&Z{cK%!a`R z`MqsD-Q@N8GUP1|l;z!Js#--q zCSW*0kEFZ81P9klFD}ecB&eUoLyUy1{{-i--jo_9(bd}@=mG||@s(+gfid#UZ-8FKUps zq*p7Ic$7;bg_*xPh@E#v!hbIcAa&#p6dmpnc)Tj7pT-%r&jn(8qq=OviM}B!_ePdi z&W2xfx{RShXiiUc#JnJLlS~NlYVmc$lO+ysEOo;(vjY~~hV*t)*{Kcz0DywXUq@%k zsGZsF*E+R&A?j*Z$eFgj?Dn4G9u|ID^||vGJ|VKagJ{vSPK4+$fz?%}Dm~j{WB{il z3UE4PZ}QHYS8ZP%^hOzQ+MMUFQ|ILI!?^kfn9t=>;FLQ&dizPle0U#>&Ea(Xsv474 zOUp)`b^Nc6!_%8kB2&bnK7z{lG3d~fZWt=C^S1gSB#`GZ^uV6II{j`Q2q?bvF{26Z z!nwowgL5!sZwk94sLvl)emoTN=SgxItjwj%cw~K&jM>8A?PAnwq)w~CU%rjTjBsh+*Iaa{)0lu}9aN&XBOhPv^TO ziVKzbS$4^nYG+d)I)iaP+UT-I&>V3S*aEJpK&44;b`0%ZE)^_dHdDwc1_Dn8n@SJO3-cWg- z1)pFU+8j$^J>hpO$%7^BfFPSe>0PH4Zys@l(H{=i?V{479XT}w>3idT)CzA~8ecEe z*9SXC{%p0J6SdO_6j~-9Oa-R_UD9=A|AG! zl{KB{XR17Z;3EZ%$8Lo#uV(Nf&=Yq-GA|Tty>mDUUpM*<4iR~1+sA~ z5YgA}2cM;S)J!U&!~>|I;-To4vSO0@mE_VD7?3&~uN&U4gW1x^hzY}H&?8^PxH24y zPRvbyv>hM15#hY-*z3o{U{n&a8DaZW>0r=o%Qs+SO~UKzl(JCY@OdRGM$2gf z-BVDQT$PjT9g8^g$QEdDaK?f4CZ~RPXwaa#%`!mPxzS&j&+CGkv&}pr@1Sk!GhnCk zXcQ*s4Mp@8v_IZv`#MMkw|7(WiiH#S$1}_>FZ#SLFRlCb6J2E_ztKax{u^$%-QEDs zsta2-Ju?afHvnFVc+P}*v-Ufm9eRH}0~x~4x#~S?D5mtjB;(}8IxwItF8i$J-(Jnp zlP;b*B|_GO#C5VABR0Q8fl{n*$qtbo2uQ!DAUs~*f29ws-?xJi4UQKO)5I^-snSX_kWb;EaLRo{F5_8O z(b7Ch_3msEWM?y;38)I=f9n4xOuY4d#=hlqQ!0qg0WDfG@oE7`Ia+rBmkUn$D6{`e z7S$VF)YMe&fe;UXBDUHZCWIqV&lGY3B33#=uf|;c#lJ}WAtxPnm#(}x=A=raaYduu zQvlVzmeyvs!$1iylMPnpJR^Yvz)eTD+1C`36WIH6D)sgqIy2C(^0*r!$9ibk<<`2k z;&j?)77NECBf^}inCXLl%d439I+zr*!@(wtPS=Z+baU2d$Xh1KyzJ|Q3XkhK>@x&3 zjy8^bBvH1Tp0qYsI{DSb9(Sgo8x@_FR^Kq@0ib<5L#_A5jWqW2KNI~@s7XLApF#&a z)KcU0JM6K`osWk7DTIhLJKB{SPHm&H@BBkI zyveJM$UX;FYw@(F0FPEPN9!^b;mU{XFLr3s)QqeV!yOLh{wFSWP`7U_ERlRu~yTjnH@p4*;JuOqX)K6?fJfs z(;2puy4>Vhz3F`mz|x_W0&2H(6qURM&A>a1LD>PxtMBg%Bo8+T=N#Y>{56bvmGO8j zlQ`Ji8y%w^;#V2Eu$+Sx&2s{txul}5>&+opH1wIDlZ3~Pv8pg^3Pt8VTy%1W>gXl0 z-ZIR-!kT*0i0}~AgwGFUX3=XmY;?R)vd0IQ#}j%3WIHl*)+TdqyF*m=pkDe!i$zdNd3B3SG2TWZjZQq|db!D4ezD+NR#lOm zl}ZCtSM-Jb!&=w-a%}@btf!|i>Ps;z*)jI9!B#YZD2Kh{(a9*@d)`@urZY>5*zoPClxV=!SUfPSEI1+Mj1IU% z{?w=Xc5E*BAz-#P)>XI?_yaaGe?**E^U(L2_*oh_0ob-uhb4DhRarca z$X;0b7|K+J)$X8>Y;l>nvl*%;*)Qsqom(qrQ!2fEI#v3(GSy5W zOd#h8C&R0pCBovwzOmXC&+uJR!uCA?fI&Ue=sejb82;vJz5NYnw(R*0%%vi8%ZL%? z%t`N!iEht#P{?>#sY<{losNmvmB!kpFsw^DKKP1(>IO$>*QK4z*27iZaymcBx9pux zZsOcfZvob*`|7S*!#*AnSH^s$>ooaiU-3)#Zz+{oH4474Xh8Oj?gajs0;N%H4(_vu zk|tcvrYx~EBTwD3nyalZK1%Sw8)4j zJQ!-{*DQnlVT=53&Q}5l8o4Qk@8lGK?I4_mMY2d|gY!+JLD$5Es4k8!lF^cqJBbnbg3%-RB#|o7h2CqREg(ql*wR$Wt)rB%h7#;U}fsHa~~R z(yx%MovK}Gy+&E6UZKTf%5^fhMXobaoA@KpjV6{>ksyXD3<2G7qhGbV52OR_Y@=|y zRQ!XtL>i4uK?aa%!GTO9Fh?Vv>sQdk$hukMal$N;kwXC_D}}1&XeF2^~*&Q(;^9vs3wxg7DrG zo?Q36;c`vm;30ODXNGo3d!r@N-i6$fCldrv89{jmMaeZ*JF8r{1_b;VT0OFfp*5C^ zy+TONd!Qsb%p(TGhC<|0>!mnV@UWX1G&ogx=#UJC_xhDhgPFx`sXxLC2OtXFU!SbA zVbjMIs9|yxFGY@=j}ow%a-MFDP^Ht1P8M!JqoAPNq%aFYo#1eg;;3Dg>8?cWNKSjS zzE%G$^a`^-A?9Sbw9o&FWltScH3EYhC&B)+66IDxOPT~^jsN%Mvr z<{31-ezfT%saGjkffXI@382D~GC2IR`^GJElNKq8FlxX`q3nNDj_B+%e zxJYZYc)VW-fbW9EaL#OwtvKAoz=Kr^GY{)s5>fX%urec()0T6sPd*7X$1pI6o<3z7 zj~r5~PPR3c2nQf%huEUjjf^YhN%{SMgne~f*4y&6A_}5(cS*N&Bk+K9cXyX`i*$q1 zDJ|VyA}QSbEoUpWe#4;(eJ>Y!y+XXb#a1f; z0!C^RbK@$`h;X&uNY1=AeI7&st2ZTM*J(YDM|Zc^fTTV5+jYY7@i|Zy_^RDEC|Drr z#C%4a6T$)$!h)36>>^y9AL-AqC91x`%m0KzAGG~z5hDN92ZjD8FiQX6@w~B*kMq8J z!=ej&7qkW5OR?X(YqfyPJRq8cNW2Yq#8)?X$@hYU?$Dc8+?}Z1>rztq9qxzBJAT>e5eXLAj{vN5 zkG5h=kwa&Xw(tgR_{}w-rhlEZ|2Bd_%vXOy*rRxqUS#H~-bRzr9{wO>cpE_^8E=NL z(x%d`}enRkLIYqSK;&tq2{S~e2 zuc6$??u=QgepeLcz{omghT5_R z)py5do!P8T<$5Fh7^7}?_!+57V+RYl=k(aamsl>TGn^jIRcUrJF!y|!mj%2R1UP$% z_V1OJm{^Z$t_#{eGm1?A{CqCozJwmQ7M^&tXY-TcY$*!J>V^hy&Xgtk)TWPgU~J-W zEY_PL)x|!8*|4zSCVDP6Z~XPWWDzM5T>W`*q}P-0rzxwK=QR`Ng1uAC^>#y-?ybbw z*B`zJ@~3UG-{~#2KWc7&R4j0Y+Y5`Gbo}iz=Z{ko?FPL7KLhR2V-Sh8<5hOzd{`Qh zT54|8%Q$}Me)hb?XxbxANSzGjXZCK{VsoY86s^H@?kka5Zu%h~SYGtl3Od}uTM-^(1d920!~A@=G^QhUek>Z6iwsu^Bu&hf)Ic2M52`+ z1tS~sFZrLSu)FIQLlI+qu%Mehvgs60b4>^_gMVB1_br>1Dijl5$Lq2qI$=5#pa_(x zR~BlkGrNMG6GmxNo2K|KH#+jZzh`PJUu(ST>6wnxd!dlsWxrfcCGYW$W!^%Y;mha) zKN}#L4VZV0a_0!=Wxh^M{dIviKuH58yBdo=xa+wyMWSCzQPbb=orAl8%XLXf)h%Bl zomRTc=alIg!(Sy$NfIu2W&)G=BHs{kF;Gb!E2t08)NSb)BU%iGVtGEl{~RoriMoeP zLU26!D5-fL;Yr!?+nED|Uxs#qUcxn4WwVoCiMnlM!UZ-9t*moI!K(;f0A}wR`6DEp z0}ai0s^6re-e~ay^dBRMLx+Deb_S|(eJKph`c*@5sN2&ehv*u~FOeFYE~_rjQOSd{ zG*y(;DfeA=W*sJPI^*gKqH@TeJl`Ou)`{hj(Jbu!P2OSGpNN)}pKYT*KH2np?#ogj zl-Z}ij@eBb**M$fMQdVlDM<>!p&=9SW^>HismHFX}7_s{}LAol-F<2OSCi8X4-!UCo@ovE;2%^}L}Oo;lM4W1}%&w%vd z?#^kyt+D?jt`J1@Bf++js8TJRgQjzY_+5T78+J$SK05FZMvmdM^C{k^Q!5J?%MrVr z!v!1I0XA^0zEFuWN4ZeZZ`=ap+7QG_f0I+7e1YzyHsQ&yA*}`9g9pgO00c zaXD=P4)P-n>`kZC!2f+4I%>bnSfRo(-pZ*TWtXFy{+gn{RgO4ERBk+D_%}bbF>Rjyv2dkv)}Al|j$; zl(!RL1=L2pIQm?1~@J5V6&2)6$b?(i7r=~I~b zD$%w*+D156XJd7DJDMf3F<+mlVynH+drTzztx90IDT%1PKsKZ1D)fsz!0A-ZMH93x zn1T?BS~E9f$|WIt_sV&DWqjf>;5j;UHuh#HU^>3x=5;-GyvIoQJl~=rt97lm?%Yx- zUQr&Axawj41!tO}4}DR@3C%)DJ!W^c_+S2y8E!yl$WU2hu}p-|+3+;WA8r9v& zEQRg+c`x;_*;-@8{g8~&Lzj8Rs4=}@{c!|7r>xI>lTGT4+!(7ThZ6oO)$0(@QmIjE z(A77VB;cKL*<52WPNGtz+~BtPvP`$t@XqJrz~Iwec_K@D4Tdz0el`7L-R2S(v?o^= zp+8i2mzzwUDdt@*_VyjM`GzfWaBMmNsSDJ0#8eJv1V9jLQQHa{1Jj^1V9V~$QGKs5 zZ8YnIH^==xkaL}+qsv2)}y+m0G-(|I92o z@Tk$S8v%#cG-AqJ^Vb#vc4Ed6Vc_)F4^&X9zh5sCN*eENv^Yt{B9eYBx7KI5lxo_$ z>=~+1Iz893$%EbxE1pn}lh&V3y#L*Hz!l>K(?L16)a3mP5;i-4D*wqCUbmCSb@Ls& z)!qB(0$Bp_nvF3QfJu8!$f4b)RcrXTYR)9SU60Q3Pg*&Ve=%f9=NOKDDJz3D$_p?}5@Cvs2EM@iSElBcMBJ z6tHPu&JH!wrLbF>E(Mz4hhZ}XZBFEWPt@}{?2v5#?N$SHfO!NhwoQ@$9jnK`BMb@< zfGz`CWUDs-D!S{mD7o&j1(N0mTi5M;qj^mnST9>a>q_~`Kw8CZs{C9Ut zze(*Z>3xy$*icT;5JOnh_J-4&jnPMr*HKsuMT>{pDds>P=i%<0Ym80H`b2HX1^_m5 zo!XUY;-@}0HJDLkKHYP$ZuIU9imWi(*S*|YeJmG%Ys98H$u>I`sDOL z(CgwY0k5bPQvenq4ukg zAW?_RcZdY(0}n6!WvWZx$=Pc@=Xn z(C%hEvAqH3g73XIzVH1lr!Dvs;Ehp7R6Auec>)0!nYzsx!`Sqjds|!lL4(*^UOxKA z6Q|qLe(%ccrkmvi9kt}r`7Dq!tsCzJ%?5?WjU{duoWp;WioQ7CQ?dRQv^!r1rCOiL({Qnaz{qqC^p2Bp{&W(4*XOz`|X6mdrd6McC_M}&*tbvlc z)gJ7Cb<+6B_Rhj1aOz`5%tq1@?0Ye3)p{DMiC)K1vw+&x;TVtuTIjuU#;>r=N#))z z)#E?q2i%XdM$2{g)1N9Zq}wTZSZi2B2qx$Oljp6km0m)-UK0Qs1bu6_fq#9gsS4%N zL1}^lSDLP*wEp7z_~()SE!u#ehkd6~Q#%N!RV{}2oR9|=G)Z?&+st=;IJu}a`o;XY ztIg-u15^$aJlhvMbszuC;0|98hHghPR{lf4VX4pe4FL!MKd+FYk zcz@OzoQVj~hW}MSjZqJ&+1lmdoZz$Tdc=oi>YRUE6CTv8Q_9AJ{!nlIJFoP6{e56y zIvD3NxE-jvk-C49YP}5^oDtqN=3D1vX_o2-+|I|D8~Y2+s~ z>nuY74t!ww&lJEp4J?`}meK+J|GgooBHoLF(Nj}Xn8~bWejsn7GHY>P_nivo-XjF8 z{Y?!Ny=Bp?i>&>JPwGEKvM4Z5VVljbfoh8JNNgwVzBNF5RsfNBy+d`6QM|`IF6PmI z&{I9$Okf_5-KyV}k-sSil($sd9ot(yPJ@aAXSY*igtJ=d)u*0xiyfX(^%# zlQ!g>sq_zDV8&Ei2A@xaqDg)$9!lhd)@!Oz;phtqlZ_@HVP3LcXa3m=3U|Itlt~--Y0nr94 zXFDYP7r^3&mj@sJ;k~T6vS}=)t1=rgJxzCIniGq}BlB&$dGC03bLlv{^6QC5yJm_V z@HWGm{P5rWM;{mLIHX1< ze9iaf0+or6-*10eA>SGoqfd|I>jYGHQJ_tLY}WzM_O9;AIko~KyuP^? zaw!o=q@*1OXFkCrnIc)qO6UN9Bs;onEZw2=`>VdV53y|Ss}R@L{_V&AZ&-KcFutWg z4}2eicjV823#H#e=9QlecC!AvVgKK6CJCXzSD2^5sxQR-nc*E44E-FXD^*T*`**ED zS7TMR&U!l*LmX#kc2VDOza~veNqfJf{i^Fzxn1<5 zX5$z7xjQNRVJnm0h6q&S^?_=9Tm#~NvCQB9MlRyRs2UmkVZLX7e$tp4Y_932U466v zYSsEM_gqlRJACwc!0h*F00vTX%XyxzHuOKvLlXGGp``0Cx-7r#PN)bC3{~auXyreh zpuf#E<^|O5o?>&F{+VOD|AX*4-(GRF2MM!`%6Vb@DgZbarb!GX*=j`3~#{Cvc=;nPElm)-%d-LGn zDEYtn3Vj&dFz`WKOWs-BKb!sW`f<&CBZ| z{g0tWQ-Yxqw|ejJ{rSNc(O?K)fAqBek5!c>VTUdwp0d02pRx9>KzDWpziaQ$&i==l z-qCQ<41^iiz@dz+di=Y&$-~RZ&{JNhW zu(7kmkcNkUrg-BGHP-91IJK_-ZmbuMPb+{X{2rm_@Sh+23Kq+zYRp0Wzn{qm=&v21 z8^@(c6!T}SF9pCHS?`D{ga5mk`}qcgN!<_Y9!vf)6(KU{HS^?ueGgnSVDY&;J2L*V z@f5KC97FQQqW|zccqF8b@inW1i$f*jF@VYApHD*g7yA$j1w-&6`Lq8k#86WfY}jlu z{<|^cK6@D5D`#N9^5|ivz<0nJIocop44a8S4qMMn@$Y`__h4Q!Lg&7>RAKgKEHRc~ ztTOC1e9V9U>9?Y9MKy0JOS5v69;9-X3E%tu3W*4NHv#d?|JPlT|Gg^kf4+192i+xP zTOOw5zdI$H!up$4wKzPv#7Dn|9_37@A6^b%FEn@v=y-jX_~&ET*8p9<2G7onzj-C- z@=c8%eg22#J49pV*nF3iwBKOAN3Ha)W=9QvD*+kyFDvthS{WQ?dg36|1&FQmAezx@ zx1fPW@!mZ`{8$Dpj(FI2{vyn7v%VoAApuiyPt7MQe2U(C9G!4uF=+(8eH#sr^b`V6 ziw5SOqGNxFWM#!dEcPH$sz4k$^#Y0H*F2~3a2oE|a@#9#)28vYAzNBnN}QekC=eP< zuLnJ?o@C6_IG}Arv{11riFE)0bR5g$F;P-JnJ^vf{6IBw*fD|(;OUT#cXP89w%lxN zY^#GdR?WoNKv%gqu{_X@LUQYi*M$(9HA>>}pKG(R&eY%@Np5o=$8RL~kLxU?30>9F*T;N+8G;|wgZOdy>li>? zdhS(`Li68x0T3RF_ZC-Fq|x+bunwS6mTDEIt@n+65MH3rsxxMMp1M&GCdg(kDhjJv zyBBeA0NUxNV1PJ#M=ky^2$#Z9JK+otR(vEK<*JgR=+x{!>Mm+t;Gz0yH?keBN#Rsk zn(MC}J??uC(fD~A|Kr7%;j~&5pu{cO%2O*}YiY93uo+=C!mprM&jo67WiMbedAyOT zf6-$Z+9t~G+J8Mn@DjYp(oR;Kt#c-)&&_4AY8`*U9YxjuuS9w}&v$R!GD`!O)E7?AllYyF>x zO~d;Yu928K0dT&%bxrD579eb;VQ$_cMIzt}0t$8T9aBQ>e&(VUik>F~Z$tX1f&Hiz z{)jQi`F?rCPB2V}sZiH$wa&z4xOLKq!;vc(gp5xebbWUVYJLlkwi$R0e7%TkYM+H{ zm+N|FC2pcjmaE}|X5Dv9O)2J{yH^a-No<%udXqXQYl6+MPq)?Btj36%n!5F?t*S9t z2yk&jhjp%j`qU1WlYZh)pG=?5gQIwWTo8a^U>G7MFs!f~qTE?@g{O+%g@A&duWRE% z=2PR>FmXiOv^;o;jA?x_ca=*2a6F+lL=1e*L^S^hICIeD+7tuJqK{yWMY4|$t2 zp`tFGOrv-e6d3&dCOM}sLx&skMqZwI&Uq)a#r-G*ejIRrd@RiJJBT6E+TB4~9bSYx zI6Q>-!CYpkwIe+_*++DCb{_k+nm54ZF-SB~prOBAx9D~;N_cyHDvXa#9$%dMX-P^} ztx|uF&D_F5!p3w&h1Vs#j*eFUO!*$ko8#;Iw?JLWdQy{r&s*Bx~+x z9;e&c(H5?GwXS>9*nXMsR-C@-Hu-E#a>xE^Gz#XBw2_<3>`rr+vNykH1d8l@k+KMK zov`Bx4ahA1 zIlmj9dzf72yN}Bi0;;9jFUsb3`GMX$CrDQD!9Ra4oIFm!;?(z`#@Zms90#M-av?t) z#f0Wac}x?>S@hK|3=W4i2@(I%+k8`5r@cucAgL{TauI6L;PV4(r|w&HPOyzau083P zN!S$qLd#lMbpcZ7YYj-wNm*Rc<-w~|*x-WNTHAS<3mM^^a?7cdXdLAF=5qsILqUWs zbE+O^+fLX!E*K1pYX-_ENb6Cz4sF$)|6*g%`%Ed3Df+LV0QWt(FLB>!&C)>cBOwH| z81XqG!74a9Rh!SJ_`_Tdld@sVw=3(>E`%Q0GTW*+1_C&{yr(@?-HyPqBkL_A&o(VS z2}Ib^7xGmC-3qv4V`J*I9^_}ld|}6C(PVZR3$r%W$e;yJEYeb?!r}+5@i2Y(XPGeW z=7k<#BYI|Ied454PcLqdvn+lFp%??;Yf>s1FG;ArOecf}2#sLYqH(F;odd&da5jq>K>XZ4x)gk#-cDMqax~VTxB`}si=!ang1L!z7~guLF8T; zDSw4*;b5sYAsOqxBfnhChmGb^V>#t|?Hw1Ps*<(Fb_@1BvriMUqim9^@PN#5e|HxgR5)HG+$nAtI+r>Ev-MJsVBg}(d&w=|3 zWSA~iC^1L1cpkQp&g#kn_4hXc_c6TnSPKh#9pjdDC^6B*i_dI!ZzM95Dn-COLakyY zE&Uv*(uSq57fIA#BjY_}D(B4JGqoO5B?|P~J;F5}x?)YQZeeBN^}Qp@AJTqXro*Ej z*4^NCyEC052qWMF6FLb+M*O^wge1Sr^Rd!dNPcQ;3>>=R)hS(60c%z24*oy;^G%_* z5Us}>CwX1#Bbf?$l50-02pR96Qlo>bqX$r_%Qvg;8bfTD<$!IWL8G2bWT=&WUX~Tg zAo@1!Lg!TT4Bny2PgkczqgI{XyWx@x5Jxsb#DGQVoOwKk$)H2LESu@9~-)jjkV49oh{mF^=eIa zkiTd9x~)^^#jV@!PJYGCYW=QEr-{-%;(~{O*M|U|N*1ktXmHTrusxK9g9G_w9sMKI zX1;WCSVagk28}wrs%pYhM$5Z*j}L&GsM%c1p*lG=sU1`PHc=o~>C*Ycq1fUB<;HX^ z9aJ4rRZMJE6Qq#rPeK5}UJaSYMV|qeZW~#?R+T;Jo1cBLs!AZnA&G}N(f+sYZomCP z6FTqp4q|-;QLquYi(xHnR8koE#-)iQ7hpD|BXy8KjX6KFp|vR!4kI z%|;a-Obnb5o>QOcovo!(d@Ke{oPC&*($Y%f&6f_oK>8aH4v?SCelzHaNLI|WQY-&x z|NV;vl3&;Q?!4>Gn<0xm9JxMNpH$$F0B9NR_nY6?9_Hxve5+?&wsrFO#R&~ck4;l{ zmaaEQ2;=TWXMWjSl`tMiKxESM$ST+*p&54>TaD-PI(cF3s*xic_-0)4e3tNY5qoNd z-3UkQ7uV>;S0$PsYF=xF(dOaR*}Cq9!q12ys?2ztf_$FmIk8Z=kIu%1xs-s{4MxZ` z_>^ud2*Xv+h+Y=f>3>Hc;J1x74SJ$pQ#sNVjce0 zOfdt5VZhFV&xdyFha%#N|Fui@C*dYDcYHMOkqk#6081U6ly7v|y*_W-nC-?`Y<7Ov zoy#JjgH``0rSVU>zXNgf*PLT6JrSEYqwT)g-x)NT2&Sh~bI)iP=5$+K5Ff!Iq5S}o zV~;?rBUNJ;YH_jBA>y=0=Beqmw7|UqQvHTa4yn&Y^)JIPXDbYH4$QX`7|f?j3MKam z2nh56jI1e9(Dz{j*K&j_1t9V2s@? z?Z~!i(qEUD2mt$J@h+L_&qIOyp?hv=%N>2=OWSu8Wy|(hx|>tw^C9E>Mxj%F61;1}Q#GcLiVRagg(Xyj)h4t-d_-%i>~kHO3*> zLM7P4uS)C8j#tJ>Nj2}9Qd0WQPDTqQnr+G0kMa@e0uE$Qn*gsv_g5veO5-tWHmfTo zr@WIM?<++Apr9wiv%~@U`CIT>Xg2e%TZq2*4+wZFq(oT;Y;Jo>XB!8Q!m)-$!%c%W z-8|fWCzAdprD7pRvM8z*X4>j@$Tzuq`CbV1@s!rM)#!thZodUZAmi)M`Q?jfDXq*< zK>Nn)VU9}kR02!f;*nCV`q6@N=|SR`#?&SBRK-sAfH-`%QHon-A@F!zp~oX zA)e(br_qQh*#4kqcT_|&+G}@CMqMV8Zk+afW9})cfMc&S4a?JA@OXF{qOH0q z*H)si5s@i5e!BdH_Y&8vNvw7>2-vjnIjTb|dv`eX`wQYgXrSWFC5*Yn8k!9VR7Ssi zBByqC1lUOVVlhPHu|61&a;a>l+sia-7TF_L@L1ro-@t)+2&;G$g zpOh;N-GCkXiv6ET02H``JyE0GcR|ynPI8 z#`4?5S51^JDrlQ#tKwO7TRjSYp0>C5bJ00CI79ZA@>j18zMCdllNJ}JDMWyT zW)=F5ct1MW(zWC}4e}>};znIQt{7weK_)u1@ULFQ*Dh`ZP3%2XpU*+Nv&s&?wiBs5 z_#%bTACFnwq;gY@b^FW?JKgu`0QyK}l@%nyN_90_Q_J3sO^onBD0bmnMef81TbV^` z$T88w*}WU2Ad_PQ(I2Z8{QM)>;cq{H2bubCK>Cm>5NFg}xV>VBiA+r)akXVg6Lb{y zcsqH#W_9wCkRF6FbxgV~0T%5BAN%C11o9UZssb2)F=->Y_nS1g23Nc}4H6Bn!}?(M z`S7UL?c6e~o6Bi;{MDvF9*b_B7vbw93Vfah!NDM8Wy>F%mk6y_&pQqb9x+?@y>;u= ztFY&eA`-;hza{m*`m$hMF@F0DNp`lu0>5Rs4IRe10Lg~g;ft@Nv+eE8%~+WcQ>e<$ zQ*hDyf%u%HI4H;|d|YJ&1j>x{`v_xA=HG=k78?1VoUBKP-WdK#SO0^f_4EB8)D%`1 zDsw%T=jpo8?kQ&xjD}{@?)9`Y6ulP+A}O`FAB*v|>Q?9*;NanXbU*&pcSqixy!!U; z;oWSDdw9d-bS|RhbP>&>fX4|nACX{CR2@eUBK{M>c4T`8hrsFq8#fP+FsenX$&#oj zLLO2_Q)dc65NAIu7?1@K&OzI+kL@oDuipDM!4;6LxOQ8Qbxcj-xtkyrkt{`Be! zacuVUN+Q+WUF&tj#s(}C6O-4$=_^p%3P1*piqPVl^4UG1Y9$=Twc8Oa(Sq*-K|w*| znZeLGcFT{FQ$>c}$v&t@C*S>E?K(8kbg^nB71=kC^DDFEE7?vM6}CS_3tgZA75)QCG- zN}X}p=rWlgJwIQe$-Na24+sbdo9t?raPQS|aF7ocO*Hxk8XB5o#gmt%4B)jdvDstukNLsBJl>5n?6`JK9`Y3? zt@7K{ROyID_aAspP6$2E&H%Nr`Al1D!*VvnQM<)W;)Wp8yt#K6Nh*O}K{Bs|i)#v- zzrt6KU~I2072o454kFB`Q3bEl+^3iqd%8O#7h)G*tlE)%`E2ynDJ;kd6~rT8MRSmaO;7Ck5A*Q7J;Bw>BU{QH;V+y)~nCT zcx`PJ8D6><5b=9TmIsO>6Te2rpx!f?VO*>*{wi!i)Lq@wJ%?8?lGZV1)T_*BR1{C~ z1X(pIA%^qh@UUaWpz~not5Uo-P|=B0E7vmu9geGaKrJRKFP>L+UT+sOU5z(&u`hmm zJrU&g_PT)U=~f>|WKu%QTSKqepOmN|&%v8ew&JPN(A50?xx;_;DAcG|KF<=f@GDSp zHxMvi{|zEQx4oV-M@Jt}ZMx8=cIQ5~r9sLUrvboW8#tLC^5tWAHok=wL)dj&U- zm?<;SN>669u-w*pse*DMx%LXnS!3sLP>G3oJ%TFgd2!${ zyYZ$8YxZNWC{Y7CDrLr!(CdWA@uBXanHGb(kw>lD81EK8;?b-I@3B$2!9i9&ui$Oy zHp_=aeDw#_9xMjkP)8scHXew6v-E3!URM|OpWor&QF%iSE!C$B+7b0c;WMGgr7=Gw z7mo_TJ|9f3)^9e8ZfLieS5=UTla4p{yt{FSs%=})hgmWx=ECnaEe3)Pga)-w@&>b+ zTv06u&hOF4=M?qOyd_|>Q(7=-<2vEmkv~rMzOk}2r@o1s|N7yK%Xtgq-Me=y9@ljZ z(qqvSQvGD=&++g-+GPqTdKSU4>wgw1WLTuutAuen!v5TPeI6$|SgghvUi(!>VIzmV ze?}@>V@x>k@MP1mu`JyOVvhc}w zk;nNE^w3a{@^RDD(Y*QAm0OFW86N{=mngt1|Ha;NlRKg3&Y97!rpAli&>y`Zi(&GW zDNMFhSL7^^5#qf!cUpa?ZV1uh2|nU4RjX%YbF>IE*Xq6+2}UMT4kIYIq=uQA&5eBj zQNpZQa!sjbpPuyeMJGD}an;UgEAC=cD@$+(Ra~8RJ|DMbq zFkF^7J;B4rBh$h{)V6ORx#Tq)wmxBr&nqy!o&iOP>+)T`&0JblqtqUTE=Wsk4v>5clr1O*}tvyT=uaKgwy>9pgGRS$^Wv zoid<%aDps8#;0MRS-#2sWJvJKIb-lp5)T!B&*TJ`}d}$zW z`t6acm&2_IiZEIBN41y8VmP_hTl)7SvD9eM=ANez5~RiB?(2{6$_($HC5YvHjMb=< zv-58=jL*S-WBJLbNdnhc^+V{?^@3M``f`342i~1NKKd~st8D87nj3#S3`jCe|Gwa- z%xv@KY%2`9u4ULyT5WI{!^<3_ZSC(Btdu;3DSD&rg~b zGyCSp6?^=qk6>_6wittkB{y2MYz9|Q(UdWbqR}(kIE0zLhT0cB0PZLo!s34P3v*XO zG=;}G1tYe>b_g%2h9$O+p)#An`Qz&a#`NabFtOF)&w`MN8HZYZ@7uU6G|`nN62_x$ z_kFS6N2db~cZ`9r)G_UEYl2J$5~X6JD<2y|vZ8rnMr&P$EGNqtq`IZa5+h3)ehntm zm1?mxDV5l4zERh*Lpzs1(QbBOr&TGUhJ?_T`S0=a@K6(aL&i9`ON52rjpbP(OHjXf z<-3zqIerP=$es4AjuOl^wA{c+KunICTe;ZwCeN^-{(ns z8-~}txN+H>(?N^eBz^nJ|A|xyjp2e}KL!m?n^a;M$YEriG{w%`Q7A0#)}@XwKk%3Z ziRN$qgm0QRRz6~omg58xYY7#wwppFqj>VI?&)3>eMG_NW1e7g$N}3HGjzc!KwkT_M zz4ptYip9lEZ#MT=c8k5xV1>%g^ z@tDrewf3vA?QC>UTi3;AUirU&`7mDbEM@ofZRz$kR|bEw?OTM$j$zyWHpB+KrLMC} z^|X|P-eGcj*ktJT|P7ZDfc6D{S3VxjDSbLA^WarR(l#Nu{qOp)#z0rypip0Gvr=usqqr9Jgk-G5G zm6xg>YFF&3s7U4!pb|dvj~{N>#mr{2n|O0+Z|%nLbNEiFMfS^Cw?z>x|C>Qq{ia(- zdaeR(vy8LNC=(IVrYC`roLM$1uh5&I&v^_n>%oFSbUOCktSJ237(H#Ts?IaY%Ka65 zzcCmOlmu}eKZjWE&Qi)nYd5Pix?T8m%xvHkO5CC~I=Cnk{v3*ZEJdJebW~Y@ldtzY z)$@K3?fVHI%8+XF+q!v27xcK4teekhh^BVB_%_9s_ehL;1ONUULd%d3q3wH~_e=cr z;P%4ju*P^z-EDP@HS}ZUTeBT8K)^7Tjij)n^EbJQuhFV>?^iGSzl~Um*!UtNbhWRY5F43##Cad+8D-lrhqq~4Ngq774*Ks=#`u8 zJgg$;DAOvhI@^ZQ-kPt@3TI@4B#CO+X0CVyb8l`a`i~1aiyW=`gr|EixH6PqBTB;* z@@2a(x3zxUn3&C{-r=xVz~ObVmK&E+VxicN+*VVl_$W>9eR+hbiTib&;=`=8!cXO# zVnYfICmZWn@9zF7GJdAy+piyl2@jekrzHf9Vl^xwtX#p8z_Yy2r;0CZHrEEfM5~ntNgVC97H;Zm)K)lTf*2w) zd4l`CERjzN$7Xn6?=_@5V#$N^`dsk1&bGq>)*#`DA>5eT4=48D9BRi`$ewSW0tl8Z z>gG}vB;0Mnnrc(u{)Zs6t;TmYD6gS;6{Po_5KCItN3g>CO)LMV;&kZwrI;P=jD_EGDUEnyCx)(N~QA}G6C>Sd;Rzk z0tYykj;0-Rw(+C6+5+kXo-obxZRUy`OpMXjhZ$YNgj%*Om_}zMI`FIyZkvw&)(bEf z*Zs~h;|mqUmr?LOAir3ryOyR@(!el$eAZD3$RfII51Lh{o9|S!lf?)@+t~hg=CD|LZh=!#x~rPkmUGna zwNzE#lEv_K46%HM?u=&8l|panW)l;_^e5PWkD`>0dq} zKX?E9jSe0pLb_)2zZSC)UkhCXi3+)1nV^29my7mV^&{r7ZF@FUvXx}1jW;x~)+rpU zCY;8UKvg{JTDp@wX8VIM?aev1Fh8VKQQ0c$5F6z(vItKE%~9eek9zi@2c)7p^Gzs1 zqu{h!t3lhc$c?5h6`VEPC&z#gerqMD!K*U><4LW#0x4jUiXJ9tj`GzYB*eVK*j9 z=%bZa8S<`jC%M{>`0{>96gv2K}9V=khe zqYPH5Hf4bPq9PJ0i(v3~v#5g!-6{gdf_KPKI(PLOs( z{%bqz_0&*q0mW3-f{~SW7Nf5HVzpAyW|v)K`m=rPu?1rnPisg3Q*!p}yV*{iBJzbs zDQr@ran1du#z*Y6nKbO^baOpw+ws3@D=NCalUFGZx!N|9xe{sooXP48W^u2wzDF-| z$LEDOfZCx$c^MbC#E;$}_s#d@L5ReRjL5irIH270GIMVMa!$nGHG+XFXcg8p37Ip(8DB@ESJGmIG=X(=*An^%4_E$+tzPJ zHLP>h5m6h)MZngS{9p{plt?4^*1#p)F7{)oSzehYH`I&UWb=FGb#T_rPO-4lGxbRV z_cz8pG5paLx4(GRapQYh&Z<7Ch28Ad-abTHI_)muFk!Bi(SQvW@1%MGLo7@dxIs4} zykIavnCA5}T8Z2;+^MZHGF!(n!WG4cR;*uf(gq39nUwa!gVwbxt>??zQT&gJ!{Y{w ztK~cmr#G?RS4hoxiI6K;g0lqKvK)Kh>};~>z3DI8cCUlsvs7muGS{Su)42QyzuY6- z+(438Ml5Z={TXEK3wJDC@z!gt^62k|UXtiHk;?1)D1(we2N=n+jPNUmkK4mPDXOC* zmz)HyXj&JcQ`;Opt=2TxlQ~<8gw?pkWVH7oe37j}W9i%(&q;>h?pz;+Gf@Lux8xOU z;7OEa*pcRT^!*vfY0-05|5fv*e#}HYuXl!VPS%2TI=A-RXUpsj0%pzPOAHOB#FS6cA7 zspe7-3iqg|h$+I;vy~M_S=e{|8y!tUF?tUnb47D8AQ!kAdCq%r(c)iU&zY8%mU~&G zRvwfi9`$+=jc(4P&8_UsKBhN0YJ8V6L@L63zD|N&vIm#X&E1TE%brv-$ zEZas=BQPlFqiHG6m-q`ZPV}RR%_Eb-Uo4QO{%&OzZva6F043Wnts=`>O16>SXkrDu zazFF&W;Le4R4OUX+vV9xF2}8!i*KE`s8y!%5ONx^hykG7gSVksYohQuj>B#9Jw#H8 zQne-z{=~=oy2we5#q!(OA(>P7K(+-Yc^)RYo(f_%PGd=*ghTns3EpSh=r>m;-IW*< zX-Yp?pWYgupg_`_UOFUL$`NzB$!oj%{)|Er9R5k9g|Cp~I%TP$qu;nu%H_MwL8;y@ z=AvgChAcG7euY0?>qwG(Ot!#JOUxZ$|D=Jdg~xM zCK!W;{>MRUM;#W{{A`*&&+2vII-M0CP3m|&TeQUL>d0bOaM)ufjZ?%kDe^1suhTv6 zsc0q2M%s%EtqQLHsp@>^tUz_%rb4dF^!}Mn{X%E#HF1EDtnj7LGSer%{ge>NHm>}P zNjb*3J$&Uy{M&t1o(sPCw6J<%mZnC(yP^Imm!J5+o48_Yhc3Y9_H19ckA#lcNEs&3 z$C!G6gs~Fem&DHr(?+6#;(G$U3$3=hhjNqa>MVK7HyPX4KTsl)OMNWi!XfZW2& z+gC<+Asg;!lS2wk_ zd%t;iwH&(|uk+3)Hg9k>7nLv64veIeEqIAwK!b)Tx04A zGshVdqSf7s$EE)uUoH`X(`$D1L`IbG`>b;erjpFEivy}fM(LjlJPSr>4bdLa#$0Rj zh4;QLFX#tb@p zea(C%XNpJtw6fJ@q1T5~&w5)4(;xp%I=UoX>5)%(Dvd!6-`(?Y#+LVrD@#7;?|SIc z;tIsUcub6f(c-}2c^YiX#^JLTFxXCE`=Idx8oi?cr4)7s35 zN!WQSB@@rWj`0Ef6QxaKT1J!+)eQBE+V#NtPm7#-WH7 zLfmp6f%mNJSw{-2PKpQ-#V$u9=}E#8n#Fqy!7y28VNwRfwEJ>K1TF4Ro;rbNDLq=e z>KR0hR*~q{cg#9W3f`n@&vs@Men{wt+se;juRY@v|?<2sy{7!*MVqq z^A(WRbda)-mL^Eo@E?9AzGSZ!YOkRWfATM#O3)NbDy)m1XE2q(p|9_~ouWjh%J#2; zC&yS011R~?oP67vk|a9dLBj($1keqULa7)5w4Ub>bkKZK)5A*tNL_YEJ3ierja6+r zq}qu6f^51>1s$7!pv$|vPvD9lBwW6tlC2HDpd7E0{`N*fKpZIN_4wUhL)zm|Y;JFF zN6VKV&@eb#2Y(8(zDTr}K#`LeQ)Ss@ovNZB6{M*Hxr4!E@^BBCuy1p-Ax_^UD&vc% z^+6RlJN&~0MF4DYb|><8=d&G+jroG;ar+~u)}vd^8aEnnS<%lev^XI0@bt$j6w=J~ zB$fet2k6ts^ZcG&3=n7#w_2=I!j+-@GwK$v$?cFVDD~@^`(g?^vxO0iyHh!zrZx-N zIe-Zo-88Ty2^e90GG$FJ4re`D`;bSa!saonKQL_rkbvbFxMgmciXmEdb2xT*N4aTm zw%1fp08FV10}l_Lfx-9e>ALLEPnJGtzg~w;j`oo$W?21_ZiS=!8C$2pTI||jRh)gr8Z zj!D^QK7M$%aE6LnfRQ)%QJLtI35-)dSJ>T>BccMm9f!hkyk)yU%{Vr@>{{LSwCD30 z?~wbH4MUq~N#;d&Vo$s4Flt%JcIhAS{h5RlvI5wKhYr=68wccw_FmW9=mdVL<^J|F zyviY!#?|u)9nU{hkwIAVEL9^m(j0rxS>;+$Vly!wO1dnvqCBC~5v?h_W_yHMD79Mh zTJz?InavPA*=f~+fKMozLVm≫3zegS|FHOobtg#WXZAIV>eY&7xAN*#F1YTfpQM zZQY_RP$&$+Q64Q_n)#SdIKz+Vuo?NOcCbTr7V&DoW$w-!4*E?x? z@ml2GBzNZfi#1yqL(ymg(>aWE%o{9?s38Wz$(M%%ctS-0hZpzUaq;x)XemM) zL*4Jnp1TVz;@=X(Es9pPz^bh z+bd@9atDuy5Yf!goHegmgMut~P*>EOvqw#bj1sJTaD9P$JY$mlLF`kYP;l`tN?dzG zQz?f^HCZ9APPouNVQLX_`$1n1t~oK?Mhx$o4MdkYBP*f`zr{3K&~QWuyvnyN`i1aS}UBRO$)p%_dh zm*IBMpI0A?t*pJ3P!xi%WUDk@f2MZqn@K=r-PamTmW z8WJ4^sVIk*I(pngk1aIk3J1K}VA4>bUACcfO)I}$ z<|qCf4Uyd8z^mCy; z=@Q1;74*b4f5(Pf9zcWLR&h(#pDB!xxEZq0m^txWnl7NnXOLg*@>r7Nw&8a=eY6E+ z%Hpr>?hCZH`1C(tx#xzF0Um?&@ch=>%R_ek=t89q#+zb+iuCmF)kg%Nr2?5-uO?N~ zb9+AH2!F#605lAJf_!$i_bT>r(b#BcaLxz_yF+nM1(FG`N=YOeNutZg`(tFiEXV{0 z8J-lm5+%GRMSWvAg^AEtbM*z#EVFaE@&%tdg@jhcSqmpD8VFo<}IgATJP(lM9qC8qOF#=0Zj`Y&J*C<5$&~?kegpNHAEPOjB zz}sF_M7y4AnMa^59&-ooUj~zyV1_LYP^a1zVeTuPgAuci{Blyf7{X^;6$>(myJLmj2?5IqSzIIKDU6oDv8WYi6r~RoSXLze^RxWd) zZB}EB6#|UEhAoz-JM>*^bF@QNzd}d-?K8;|x`7^()OE#B^VDbDmeUWk^r$Uj!Wsz4 zY+%1fmBiKdJEp@{8I5W=8_AQ;nGF;8$nf0k{J-2Y(Tx!0@Vt^M(5{UT0Lgd+YS$S$ zzs*z^f{_SfGL}2SNgh`PVOpG?=G9SgH@I7DGV%r@qKnse{58b{kH?!a{ zVhn`G#Tw`W0CfGW+`es2Xm?Pht|~nP+XDeN@a$` zeQ4yMFl%cfaKS9v2MmrsPNT;?@>*>}KzLjVdf|e~b?QVo@$c?#h2XT2GbS>5NT)$% zjG^fB!x`8>_>P2Ke1!*hOBD(0@X5Qpx}iiA&I(}86pqDWbc9L)gq()N#(XNNqH{Op zpOROoceHQw1DFq?N5^v&Fd7;f2?$@w3uy}*0Sw`^W4Y548#awuZb+SB*ag_hAKn>Q zx$Xew41b2rOCJ-6Y$?D}*W^B;Ff^}EoRB`1M8pE!+k)f%gZl&Q&+J{St&Sch(V(4b@zxV zo<;!+U?Rsd3AKCf=F)_OTmiK?ehr1?Wz;Pg;#Lt>}0hiucj9v%B87x zst)aPtCW@ha-VmlLT10Sg3Txdjk-r4p66#TemrR#Y6ZW|>p zn&q*Jfc$Gux%H>hFH>#gywt(>d-)G^3(YIW-_r&o>T<0FrAOv$)q#k=75)lziV$CX z(B_zLrROSFt{N|P{Rx$SScp2u)qPC_}PY(C{@1XB;?unN*(>XrDC9eC2seG+3 zUcahEx3zJB@eK+TLMl}v)7ZNG`<@hOed{#$)>A8xSqmP)ZgitfC9V>FmOUq zL%O_$3`qoh1uwV!{;5Za-}eTu9+Hp&VId409Gs~I24ae(KDKSnsji}z(46+$gg&Q4 z0%b@HaUi*40pkzr_6-51A~FXDb}pqrHzcy2?{4(0%(qPI0CVs4%QZi-B>I(21?3CC zFxS>zpPZu!1Q_O&9mZxjd>@~#wn}6vjf5roubW{|9*dw!l3AUlOc z3FA^zA2CpH1KdDRx$-^p6n~jGDZ$(iV12C;p6O3nXxABVooN5OU?5DI>{}I^h`&2S zh$@E*_a-6UW_A(_zsj5w07CjCoQF7+K}6sb&Gy?J&~mb88xA2)Tal71Qx>Z6x;@gD zE<_8557Us-Bfdex`3?{}+fq~rudrFKXRFySVc1rzB#Q~;k4wHkjt0_0c#>U*e*qya7-G2Pm3KS;gn-630uA^U@IgWX~| zWRs>9EAdG4!tqjba)pT5L>i6KSC~9ZaT@E(!!7WHTwC+dMrNlT5y)7Z*DmomT`Q}? z-MXv|sO0-2x{y2vrbg3~&CO3tH%Pho&{HPTE5zPjdu*?$p4^7Pr=P!Y&O|2B_LcCJ zC7Y|A`*AzP^nmybbJ>}quu^>t<_1X#l+*v z`kyG%{Nfx)O_wb-6yF`bs}r%X+rPc_2uQxz5K{D3#}ZzTZ6=$bN7ZmbXVGNhpN+7+ z`X(~;x+KT!+{iAMJbMnhRN?-({K67yM(90GO;oBP*PQ1#G!WJyqO{OMWZ)kxaTHXB zHblCw$WlnDjVk`!`@l4Oyo-7iYH)IN6(MNv1{LV%Z}w#jX+ytrCuIWzB1kw-=pBbV zUPDlMMY%gzPt1iG@5O_EiyMnPhR%!>8oBM_iXopRMhyRw;~R;cg$3ZsL{ny--g{lp zFuXu_&wEIv?Fs9rJ;a?ItfR#G5dOnB-OWcC?Rv)p>?pT~NPiO>%P01!u8)H+#Hjb| zzXayZ34)(SB+s|_kp~kz49<;c>eyxP;VF1!9A@6=_WLw)smqp&1hBZ%bdg+i+&cQ3 zn=!%R;m8FHgIKdwerO{YBoe`$?hl_wMIuoy;s(V|Nzv_%)%sIT0EU|BLQT@`PZpNR zDcawHP)@)clhtrGeJP_ri9hGy)by*GW&gmu9H;P<7_zqoES zJ$^*1-nd>Na#gev0)x& z>vXnUQqKV$(g@hB3KZeTl#md>9d2L%NovSC<~%O9h)(XOm#=*=X6^OpATxc}G4<*`@FqS|CtksNeyx4Jl0EZ_3Y z!^6||C>8}c`Xo;_w}VK8e?}t42eZ2c3z%mdtRE-!CTZlr@OeFchn;{dmul6_`E36} zgyT@4;Ki8(zBzi9<*&PPmU;@dqho1ol5)Ea9pXFvi#39dXWO%=AhUBA3|cX>;3H>O zIMcQ5R+p_OFpK%}xM`x1g=}+BsJk%H@uF>>T%{$4T;BEZN7mRLm9oUw)6;uEh2xo! zYyeZs+UA@G7`aP;RI1d1SS$=FCWp2qX{1bk;@L`_{aSA1KT)obt@Lo^c726dsNDGT zZ?kUOTnLhvdEc1M1Vq{ELn~I!vPDi6B*OB=*Fz&GaDXOIAY-}qdBO4*Ac*>jU&Q0V z>jyBREL*}Zi!m3|7DQG`m%V$gUEu!P;{oz*tF|@2q65i)+Ey&A@5Iyh&u}K;X}Zuo zWD%47y<*(O4u^x#&CToGjWiZ=9jWE3NZ&olEDd!b#xzqgxt4JN8R=%ui-F~8J=|Ct zOaFENvwvc3 z1C?VuX72L3%h3p02`E=%srJ4Yhsg6$&~2M`{Mxe*;{R?g=5OEX!Z_}?6_v#;2pBa0 z@?S(j$On~c7IJdT3U%jxU)PzbQX{4U_Zbt~KTGztPz6D-$1wJF`3YnaD&*WP$e-O7 z_0L}miq%_)0NVQ3Z(o->d(Z(PxnAlXNxc<~JH0<+5{tQ|e?KG~!%}w3=f3~N1<=P4 ziO7TqEq7-BL8T*dP_8y|Z>m3uD4FyMo2|PFJjQ%FpL~&JNGJdniy6~pHpMzl?)5wj zRYuu;K-bIhAy+K@_E!)bY4c4pxZM>dDg1_KB5CszgiF`Yd7RYA`HD|>qqPq-sAg^T zGLG?83-ZB@7g=kRx(A*1pGCUJ!=`p7NJjPfcCA-$2N1=?$vX zqcY$0zLn!#PeHv~XA+xaf&u>@<9sSx_kj$)uIr{*tJPOP02}&ImCP*|+$dxhm4OQ| zf+_fw&}x#SO(ltv3ig;u`RVTA< zPS@I-u^VH__sh*xooEz0NI+0yfZi zN}L?d)oudf;Y9&hnWZgr?YX_c18x7?%8aZ;BVdOC_$c&SNA-aNPCNpelD%xZSsu_x zQw)C###vxOQ+xm4RuGB6)_;0>`e3#C(q{KHrcx!7h@Jbj3=onFkV)>3B7b`Rh54fH zHj~0_M217B(^J#qE|jWY3#=;hG@{;t=g10Vuuyx(xC2HHWE$gtljVR*Ba2!;XnwXu zLk9xt%g!p`9FQobJbpOH;0{dJusZ{hsO5w6){DMCCZ_&;_>k#Jzp8qx*@oV>&-sl> zq}WvJ!v$ZjY+a2hXco-gSVNo_huZ^3GO@D1bxtz7NQJHAs$lsw)-;U*1s3iufS@wj zSDkh_5|0J-?PZ9uVd(5~Do(ZC5KS6yCCK-Sw-=%GLBjnp;D|1(pdi{(TM$4$aesi6 zE#~}2)=yrn_37o|OlUm4HhznrpU`xs6Z?3+B!H#NuwWVZ#PwDS%McHNp9pX~VcS^@ znc2P*F)`oHHv@!HJvGEmfd9Zo7L*^4F_<@nPf1XwxEcj=T`xivceSUTNj;7!(0M`@ zpV~Ryz^*zjM)`zAbvwDq2#JaWJB_`__-J!2JuJnmKOGL+x|}~Vq3GvKD@|FSYZDH8 zy&?Ou^kC&E!hy$>p7xzd=4OdB;$SvzGuM9`9A;b^KLo${(NrL|Vl5ZLUaQZn-OLg4 z65rY~^Eg*rY(nyM{B{d(S@e*&HW3efCPLF)z$1x>j{2M8C95}VEA9fDeVJAyXlf*e z)Z#UTo#?LsKhmH2#PX%MME*#?8!27DDh~0VYeJmq;*@v4Y3r{;E(>9^X&+d1%><3CPaH6m>YAEy**rHeVJEc0B?zc`F3+}muSW!#Z7UQ> zhYT9KMyR$h^^1t8)|-B|1f7vE+;zXbOsBaE7v<&V{*>!YYqAWfQ&G%wT0LZ-XMKOl zDlPrO=k*G4w%ml#M1JfH08+N8Qz%)E$HR|PC;KX972>Dt3sT+ugBlzXJ>`7UQ>WLPEeJ2UVZ80J{LI z#&ATXya)P)$;P2NNd43el44(P8_MndFA7O=BZFDM5>vtqigoR}4~WaMT5pZwBNpx%y%YNLbp zHpWX(1IZL?QX$#sD5T!_D(T@|9Tiz*Qi4BG9N_E}ffM@qEkSriIzvjXQPYfCBX{)R ze`JSZ!X3^ZNHL`^%X>^+Z@9zwf%jE53*FsFi8K59d$mvW^s?io^Q|B@S;d!z5tBak zE)k(@;j&0m&??wW(K`Y-WK=J}ln5y9vb%#k<+DK@fM3bA(c5D*_WnYy4T19L_ivcI zyK(aceVlytJO9XWt2=*`4#?^B#@H?{ROXdaxevc{SZ#CpWPY47|suK`8g( zZ~B;Qh6-s(vN3$ZB*a2U_C`!$snuVY#S4ynrTm7jh8L_;9})VsXI>ol>dqcf1k_Fq zvAekMdcYW2i4(Ssc9I)Zz`|HUD#Zsdq7b|oj1U)Qe$`8j+{L<_oSnf{u~|oRC80|s zQ4kAdh8qH6y036gu(-Gx5S}lW-58y`_=reoAwU#yj%mza%7D6ARqQz-*XP@kM?@vf zCd^QD3alblQ}fX>b~0#RVDJ?cv!S15G7$lchme(CM0g40ii#!CS#|1z?8J(+@`lJd41T zI`pkmS19(4$L}52C*KvS`kr8t=pCQA%e6W%;cmT*Uvs}7y{R|hf$K7u!2%&r{+pYK z^~~q~orP-*PT_VOM9-ap=GDs7I`H#p%FsZd00+EtR8cas9y1`r1SFvAIestQmd$of zl%cg}lS8OILGXX7b7~I>4B{$ti(gx2_(nDd#W7PHkQzWB=MU<*c(?dz6GLQ>I02u7 zE{2$YUhvsinsS~{$o5~t7E`XjmWYrD&nb{McPDIz>lOscv^t-_-?EI_Orw_TPiWs| za=(r+nb7K<`x+%1vq0l=)r)5dzw5XkeAeE13cTV9gWxak#p6#}&J!t7a&Np3l|t zAgdlXKp|`W)i(~pJ8lwq#XQ)}O|K6^IF%iD=6K;%7PNW3Rg0(40*fu|u-nt2pDe{_ zy{ne*!ZrStb~{CC!|TFyDh5UpP44p`9fflmrRHft!l`@!eL`rpRKWyzAazF+n=ydx z>9pFi$zX?vi8f|iMKO>om7!&FfA!fYKp~eegoK^O+PZqv9X(Qki9w>%ty|UzDUIWd z|1B5zt2(_!2Ri?nr_L*v)I<7A5c{Q%T(+EOyGS%qxW$P)1erx6S38QqJR)WytGmE} z0`;*4c{yCue{QF3XTK|GY93I0VuZP4?oHR6E$*_)zCEl=6K}BFV+PGj2XykQ&z_q4 zrSDfs&}nmYV!x>T@{Os1R$rmBXjD-(1PGR%v2dcS;sR@5bJS&d;>-p+|LErBO3%WmTlQY=`?SZ z;Wbe@Q=rrmz@g|2(yUfWL57y#Y#n( zxiY1Gp@W*^?j&Pxr{6Jp>gC!kmk}tnr%aeXWHP)iF0LQAkE@n7ck0(#UE!>rpL2{X zU>vn@SDTdHJ~pq>@PSzYMcLCmTkxe>aSqvH-tzYfv-9ct5wyXMN(ufRe^LL~a&c?l zy_2BQ3S@*j5jzR0H||o#ZV$f>8rTn+*gxqlVSs}4S_rq+V!>5E_QauFlNUkwTbji{ z^aefPkShcvp6F>8e=1eB&VKLEU*e7>`;06W2yx2op(q~U9P!)YpxQ+U=2fO{M4$go%z1(nkncEF5w*<=q0s&=0;Kd{sF9aA~#EZqDIGDkiRPvUon>puPaQUh`m z9j<8ajma`8teP!+3|*#y+XN-~qrGr_wd>vGYzEbb{?g!l@nkcMc|CsNG~z~!heUxW z{7qYEU!(QAQ?w70@yM5vlo$GyQdXkBS=k@2T_~1I4GLyLya+*KSQkyXh$`pxnM&DZ zc|qDU9lFW9#J(OK32BS%4lMPU=qj|Af<&ZYjhtG_9X=#ZdYY-n6((;}rpGxD7Z1h8 zksKMrWee|R7eO}CL!RWzg}XC*>%e;he8m#{oVvHy!OD`TFPOQv&q5ve;S(>VJGKmG zlfn&-MisAQMbnbN&<7%Gr+Xn6P0rs6$G6+DJDJZI4ncOh;1&AgiSb#9ssEVeWQ*6G zFg!f`l4v_X;wnYe+jeQrVo_jhqgjq;FJ3B(mj`f|{zfcF{Q79HP0GxC0|5b%Yg^Yy z>F9Bxtrb1BsJa&4gumzC4|k%MzlM0$xN9r{_=FKSGHLyYRMMA}wfQQt7@>5+)3Z0XgmASZCoG zZ5@{nQ@dOB8QZKdR4VSe1FQ&!?qd}{HkkIP=7r)!?sQGKAd=`_vi*c**u!xG1L3si z^5!fXK`&O9El$Kk7b-)IbGK3VA)H)Bm7z-Jd6q}=$qb&cShf2XQi^Vy5!mb0QOu^* zH1N1jFy8og5;fnGn58wug=w~GyqMB|wCMd-qN}%9VH7U{UGUDcdv{|8Ay~?6rgOU- zl0zckLNAC%7C&2%vg|`n&|qG0e}Ore_%neY?Xx}O-O9e*hMc_D`6(>1{7TO2=H5r+8_+90RUYiO82}<_s zd_2@QQl@ZjOTrCX;C}7{lJ1mxjK@;-fX-z3VUHgT`e8<4m@3y$lxiO3o_7%`?h<+Xy)IXEjx2e)fLlK=Pp@NF(RU_mu`${1 zp>xcv?C6%98nJCZ>M!WR`%>#^x!J=bN#f>J1KT2>;q|h-fCZG0I+0awYi-NYRYkwf|?+Nm=JB<`0seQ;8}N(9xfu zqkmEYf4R5Ee=b4>y{Q5R1s@GKD5#P@cV36%xQgroP31rHx!qzq9cWF(?XlRMl8Ua*Ep7HLqUQ2LD@P?ToJED5NH-?(6r*Wp<5n-18 z5iCGV;$xPH&CtuY{Ry3Kk|S2+mfErnbL{K;%`$Q<_@ujJI&JrBm$ysymaEm8?%>+Q zUa#6^ko_FXW(TqAX?4bQe*zsPW7w?!)+@^E3)w{sM+k{0k-JaFbZK>ki$>vf50c}; z!rm%jm*|v~6@@v7h?EB8&(8WpBInc@GKkkKV6usTSrb>=#IS=f^i~oZ1~UOnztYt- zPa#MdAi@NMK2{b^{1}Bp%hf>m4t} z3Lglj=7o?D5EMnm6X)oqnHMKh*|w6Hherl^2g5>1Wk(xD&TOg<5~_Ymc&sJbWk~O) z^IuteAWJVgMWj}WDW@|}KmI(K1mygtysD;PinT-Mf?YRwu_)jN|` zoDSiKYU!=V755s?Os8NxY1(oX2Ar1n8q8O|$YgOVy)iE&U!H=@A{0I{1J*A2#VnH1 zA)g_mPuZ?N!au*c=V_&(>$rubUl4z#RNC>Owya`L)M~RE}7W=(+w1`+IVl^nt?n1ct@g=T+MTphb zcoq1i^U4*)GqsSluz{`F`vOxvCa3_(k3tAdB)fvbie|^6hvINbnsV7a8OgJ0JczYG zTXY2_aOVaCl~rzM2%e&IfyDGLifI}cQB+qd+W?D7zwDNpF zNCE>S6JG9T_hm;OZvX@Ip!rP*l=P-PHJ@Jvm6|vnCagtix*{@a@dcbmOGspZKpIixl{c(vW2m+=)IT6MRN?f%zQTnDv7EWSDz)#&x`3C=&m;db0lrbX62Vzxx~Z zSzWm)RYG6Fa{X7M(UVpH^vdROGZF$jF+NisT-JY4xq`-~XMs*`szKY2F9Ahm)&5G0 zsz^FZiG`xTdqA3J%ahc0>V9`gjqNJ`iv(kje~MT9LJZ`#M!i-0FN3jK@P=-(&F@Z1W}= zP`kXaP_Yth#&qygo_$2h!`4$wi!0&}jf}8L)f{5L7z_ne;%aXac9eYGjMF25$A=b@ zL;Ycezs8Y8Di0SrU21{j_ri3la4tfhCY0#gLHh%`ezJ)KdZw`)PXEAw9Bn`J!^z4o z<GB)D&LWxU0j6qS{w zg=Bz=S&5*@+)-qteQx_ zbL+--7hlZ~TO^_&A(b3YAD^7))s~@fI-W;(dA0&MyUnP9e+$j;o-s}5ut6)G$a+zD zFWBJaJL9A^h)E6272h}DfyuCalirOReKaF-yU$yq`Vx=lWoI=&ayaDOZSbNXFhZl` z7lDN`O)r2)*EqgdxwujHboUGpP^>MKYX%DhY(t>*zaSxY;^E;%UyKY6iUAfl0(k84 z8`?y@^TkL>@*5)~Fg`v$$6GKI-Gsg^w+UWAa*yni7AA@AiLDX`#s&+RwPr6-+J32s z<$D$-0V^wH4FkjE%tDab);7?`k)EcX{Pun*_mZmT37m_}kgKR*p=3D=A$6*-Sva7^ zdPswqdFA_Kpij4o&{~nmpa>-YwEw9;Pl$hEiI8(+uE#;xko;leHehEsp@N!`!B*Nu zN8Mx{wn8^Ud~$STkho{uHUseY)kiA=Sd-3dzW-pVObaA@!g>{5BlYbCiN*Akb|{ruD$3BquJ!xU>oC++TmvN|}AQkpW* zb9U|8$&B7@iI9eP6t!c+a01QPNbD&p!5~vVanZ-<;1w7o|uDgG1#n$wr zk;K}m0knX|yI@U5x$NdPIiJMNjFzJu!8|k zYpy^*ZLv<1lW*D==krH{ok9@cgPn;SANLJOt?>KB)E7=FVD%9e|vfsX;&G$Z40Fk}GmodMt9MxBy&s_lD#DmZwx+IC@$B0;BNxO~!N0TQ#g4U*|FL-sq$>{7|)@)DAsMpCy&Y!DymoDp+WBy(Ma+jf}4Z8fSb!{BA} zu?X#?JVpY|_jlvFbP z`sclo1fRLzdXERQUB~>ffal_sXjr5wvo~ZYgVueMEul>UMe3iILQyYNHw-2kl=<4Z zPo<0XKfEj~;H2Dk*O~4K?ITx@&s2_LUh*XDC0DuKQL)J$6s$Bta`())y*5GqtDRU$ zcpR+gam#Pv?HfrxK6-Ae>?kT1%ynkG%;#)KEn$iB-r6klV4Vjaf1~#f;;|p}2DL0x zcvYcWkcoQHA6ppBog0PcS8eYcJ3f{}Ky{XgPXde(pA%9a`U{9PE(spT-8n#f0|7Ar z&d_b~F0A;g92s=y;23Ykvzr9H+|vYO~Hx#cYwqQQc$x0b)Azy|4E95odMjL_5VOmP(@A}{q)M6)jQP7C0%p3@iemM=?p2lAcm;L5SOV2vr72neam<1ppH0oi zxJ%|=n3(eVko$${Y9^`*BGQ=$H|j2JliQ3k5CQl1{@Bi{N$TaY{U_qn{&t4hKkpq= ztlFs~bqBP%XPh$O^|-lcb_H?yj4TX8<-NMD<0TRet)=i6rD!nq6lpBdncIC{y}nOO z_4X{*Q=g~grYJ#Xb~Z4bR5FdkJ~I42ck0pfe&Gd112f!86UgUXxhlO8KpO^Be_&M1 zIK_@QSS~hy5rsb&V{K497}W{~(7)0k_T4SmkOuh+yJ6Vd!+B`HoN`(pCT6)KLL*1D z2A|%0ocZnv0j{HHn(SaK4hFa}*3HyFiAMJ0A6Aas?wloDhw_xn(Lq)JUz1mRGUcdZYK z@h6L@nB*DdI(0~QvhjjYiYQncG(VPC`rh#drG6v6mP11dM zyjePa6Dg7CDR|am9Xi@CwcM8X6D3U1L9(Br4O9r~@Yh;sAt5S)AW!(89&K`u!cyGqwTA7`)B0%(m>kKK z7%Pp5fk7N7@Ckpy)oy0thSs>|%To2O1c_~Eli6_lyrq*VWoIg-R>qs1h_6x`FKPp& z(Rt#^&8R9DHJV;^6K53Xd=jwte0;hOXA9Vfh=~|hJcr$(n+*Ed4OYh2OqcTs1K}Ip z1UF+)M@+`GWhvq$6CS@~(7Nng&HSLJQ$&=+m=KSaR;**Q-C6Iz{v`gyZL&@zRw`xt zI`rTcAkh%br}K9{RONqh0krpi&-C75vrV;vRDea!cP&om$xhm;5HZrogI(FA8?Et3 zkl3aIl4`T*7vl-7;EWaS`nwELwCendhQnD%PdDcUX@HQby~q(h^DW!}_lMp}f&pDy>`l@P&zR$D$Yci`RYhs0J**)!sJyB_> zpLJ!MhHq>0bt=0R%emGVCX?}aU+f2rB#?zI_Xc1kf#qsa^m^&wULI##i53f1*-|f7 z$37@##2b3oT3oCBSW?>GMlaentP48qma$BF_od3#Rcp!MYTKuZoH0}#%n_vEwij>* zRXi(mv;eb6r98_1uEa!jrt18`PMaxgsCz59BlYhake^Gw(3th^>3wrW6p)V|v5?Pd zHi;UytvpU5ygSsWul+5)KdRbkS$Y4lcEV=a?;m1ytk(pj1(vFpw>4I&I9_}Q+I5|z zKQEl1u5)vR_fu4m!uxmcb6olQw^e@*-v3U}jQ^dWho4|DVz`{GfJu`)zWt(|mv4j)Lt$CY}3>^TSiK*G-}ujc2Qa3p!pUMABm}DCTcKwZ~Bz z^C+9ubFNYvEwnkAgg5DOU|_cehVaTmi`NpX5n}XgE|>FJcYcULbRWq$A(6iLhYu@d zhhtr};@I@cWX3t=IL(S!pw*B$8p;bfj7G!xCmsRdK@AR2KNI&2y;XAu~y_Cgcf&`Dl3C5$v!yXy(0_p~ay2ob-@@20#rr<8H z(8i$??#{kB+4?thnFtF2bp7{zF)&mRAM&O~o20ryiSP@9)e5i{-z<$n@OpfA&zCg0 zo#)sn;#YKlP1iEXkqYZ4SEQ$f+X(Vs{guAU3RUrL>JRpG<1vVcKYMVS0&}_S458dX zgUtQ?gWs>iq$oggp~THG0(;hDBC{%0R9LvjwU(>Z*(w5Osg9I0l09ahPCIXT&;u6P zMF$MXy6i8mL813PXO1V=rsjV*=P9?@ie-D}+)mi7{z$-Edbw7DfP~m?+VGN^=6TjR ziit~A)U@n+SJs(paID5JOch_A0Ea>-l$(CO@C>Upih5;HbW zoHYtmJ=f6Yvh^hW{R1c%lr^ip8&4rxN-V6jKfOKQDq3xXe~*|dy3kF3ekiwlJvuxr zy&e1lvn#1skGt4~vD|1@vX+}KgK9FdA5j)76}s@yk+_)ouk^|z`^;I)_c#v!y33AA zF^i0^XF1=){c0+~)GnyNN(ek{k*^+Sw}TsB3+Wnvg*NKII)-Kh=Ym3c)UCq*+gq6Z z`#2uvkbr;jSejyFoLY^(SESk&9N6))lG`S1 z5l{DE>zM3ziyJ9@_WpA(v?~2umVQJk1FdFjsFX&B?pjrua`xS_JEjGjWluPTK{TsW zstm`P#sC(}xKu{Ln@w3$qg1I+x~-0dJM8yK6yY$`U-e68T+R%}uguNiO~QrY{rKD% zT!q?Tot<8$Q_EmdSPMaCm;CCsN><9s<=0%-dt-3~9TzA0%Z(@BvQF4g9GB-UCc*R` z&bJn~w5;>N=fVx9S}!s! zy=t9Z9p-2O7|_>#GP0CvvmOZ=Iy04~?kvi=;(jxY^CYatO4BVN;gy9MV#(0H>`g?R z z?=#un8DK-Yq?&)5egPY&CJ#4FuK(25KTycorY}C5>t$(Qi81J0sgjakA71>~JOAYv z&EPC;6s>SI%>_3muC3%L4zWXJ=D$wQ%qUnSJix&s&l}Ca;(fdw9%8D(R|_skSIBmr zmNDBAMIRmxCNoSfEJ#+EDEh-U9V}-MXyi@ix zI;&c!o~cKJw`Dm-uAL2T>?wE8t9JFG`SxArp4#I60iib;dWL@3>66_7qx(Ufksxxg zOm^3u4GxzRjv(ZnU|nIv>;VBS=vtuOY6-`${Dlm7MM* zi5EhgEtdRfuX-d|_8ytfz}#U+0%#)(g=FwwVFhmZxPI!$AmE)O5;<3 z!DB5#0sM3MDjv66Rp^rI?^=y6krFJWPvv2clv%`MevFlIMFw~3GR#)02moG5-c-r0 zN-SMw#b1dvQz!x7u#{`wR(|?B>w+dE&g}GNOF1fRTJ7JlvMPUZ|yhEkstIdT_&zl zXBbsTH-QfVDF96i4%OiQ_g!H7_iiL{awBc+;v;<(T15H$v-cO0D6udw&Z-FTTb2i> zU3?+Hm0`xp$6#qx8VyTxXwFiSnJ(}x#Q!!amjsjS|X zYTmM!uV|vIRd0%c;m~>sx>DgFPqIk4_;R|2YTLi=#F87v8(y%delUxT&CS6qPqP-- z{q>YOrV-wtQ{WuXYt?yCNvCsz2O+&FVNE|0f|=>c25;*pv(f+wtED)Vwz+3cfLaFH z8=ntusyELdcj|Z|@UcPOm8JJNf=f|qc$H(!=6Y5Q_2r7o;bavn)=6ES6Tnzei86=N z1)=VR5~*$Pg7&x#BZ}TTvd#aB^NduYS6ucu2h6?X4YZWhg@%U;nJ#*ge%fOk`D{^U z1udV|DxCq<#pUdyNb2I1Z|dU zg>}!c8L#de*lCFqA>k++EzfRwAEjng2+Zse&fSGHT#6C~PnFS}Nyz^*#leEdvU0p@ z3I;710C^4)Vq>P3<-AeXJOsXHbtYSwdQ6CL*t1GIL!238&H5wrTE{oESzQhyfz2PA zgrOKONauBA76aN{dQ4=$9QmzB%qvG)VM0eFl0-I)*k znTCaJ{mCS5PR>KM!Ak4IbH_VKD@Bv$Kd;k&fFPhwd2oVR$Utn5Ry23X(09W7Fh6r* zF6GnTI_zD!LPC4610w?dcqEVbf0l}!YQT-swUqZF1hWv_$ivwr(o##h)#8fLc(EMi z;cD02F6$*EEV^@n@1RsXX&R2_WzKv#H#DwZsLIi zRqB#7Be*VQN+={>a4M%|0|ykgl-R7NZl*%x@| z4yd*q&-hK^qnHawh^-?0P$C&CCJ4xY?b9d8V%bX6Rwwfkms1{_Um?T7qcFwlT_)pN z0|cNzU%0cq&s zm48L66T9)^^6wV$03tGSAV99qbtu^erm>u7-cWq^2V8%4A3?#MXwt9{I|_HJ)j+QI z_vB4xtkzaeO!J-W^pC3u;49uQ|L?jc-lRSy^qvwB$@(5ue;g;c|PQTyXeWQ@VS2Kt=ynT+k>vW7lVh}UP&cmbsSiBp?W5PTp)Ik@F zXNz)2%;X2dmjsII0J5R?zx$cM$2$6x@QU^2B=1oyX-0KE%lS+mxJ2Tkct|5x2fY4k zatc(xiJrL|1AN3b-qA_qW-}0v8f)H_# zA={>CO;>7b?7$?0#dr<WyOQ((2!38m3^ z(MQcD+U{}%1|As6pOuL#SNj;H?y0XI{6 z+rMD7DnTFy^rXtrf43#hR?3JaUSG{e7bZlOX;f<=tx(PyBH1HmSUU$P#y6lV&y)99 zl?#~BrtX2%OB*a6A+BB8D#68S*B`_2)P=`NfqdRR^=8wXi&qNd_cPAGP5AwU?W`Aw ze2bS1Y3K>!nrVe@|HKD4@`EI8gPTS)j#?b|3)E`7E@^C0v8?+N}x zJ^I%lMB72j)=RaRjAX?8r&^PU{|2OFUF_ObW>nHETG~(yV~+Lnglz^3pDowV3vg;> zvUvR>I+!4D&qA}j$aDLCY#Y&0X*hVQ%{Vo`39Yty>&*FhA|Zu19Kj;JpK`#y>zLRb z{>B@8nnrU!Yo$y7F`>Nk%hC2HXCC_xOMTnhDh1Vc4_wWG6?2RA{<-?K9PPOHe&o(3 zD}&YEl;mx0`Hn)N6{-bA34N*2%r2aw2~9=)+TaG6EFOiUI0FNHC6L+(9oe-q6oaX16(rVtSxI_RUdF28+y7JERd`jkb$di4BqXI+%6#v_Lm=>yV|Zyor)d*8j|-uDkY#u<#g8GD_*m}|}Y%{kZX zoA>9eSsYAklEE5{VVRmQUo5D2Ro_i%x=ww8vNS?1WD~4Z%$B{$vp#e8MLKQ#b-8T& z%_6Jm%vv`U;}$WpWpU|{4w1!i5{kH2jnWxRF5lTMO%;N%MST;41e_D1YH`H!_*m@-L|IDm-^yc`$d%JUEriK zY4Sy)9GZ)=HZ8$bS~l$pJ+E)ox$Cg{Wk_IyTzn=%VHIP^6vl2f(=Va>Y@1H`Dj+%& zX2o8Z5*|(zTKg_p-)5NkXZ3yeb3V(#C!zX}sk5$AZ^F#g29Ei6!{|zLa>7!YeaN=> zum>n6rOrghguEjmxTH3x?7$v?ZOs1o8_mP zP7?Vb*ZlmXO@`0awaWBvQ`YqeWAKbMklrNe33|VBx8&DUD7$WX$FRu<3f+J{3-vkip`J=>pLNOy0S%ALVlvXqvbZPX8G#Xl=hvahVI zwqK~Bq#9Xf&uq11DR#`#uSN$3HI`#3MtYAgGv8_215MYoRKK?e?&QesqW47KX9qxg z(0Aw!t2^25XUPV`Ix#dJ-DPJ$h$Ixb8@_)g0rG{3vExeu594f=5(i_y2-g@_PD}p9 z;6i4dTzwwgWC7wZkd~)T{&Fdz$Sw)p0E!;{mQcj@R%fm;DWB)ce2078DsHHtAkZ3N za)A8|R8*@~$l&6FR0x|(cOZ%z>NKkaUGkx?PLHq}465bo`8wmm+}8SKKdwMX8X6jk z4vJ;UE(&C6EW}Wxq_W6FCP)N|b*0uNDT@vP%lm>D_|o8bKlOz-0v(MtORFoMzb$7I z-E`=j5#$nLFpEY!=z@}K?Hbl0TAdbfRGcZYCP`vDI~oS+tP) z;F!-B=Zk;dz97LM6)10FpVn!bOG-a51*ld2!TQ619-`p|+bd&0uFMW^cJH_#_ zIB@#G4g24}rH?I!(n)^r{Ajl`A=y&VJaO$ii}_>o{q-W(2pIN{5#OAjUlCOi;0}FZ z|E}1PdYNBq_Yq2SZeSk`gG|q{LLOf-p-YR$C^n9D6hC6R~-4~ znIvcVe_KxE-?ulBK*(k~wXWJFt8BL+-^C;9cIOgMLE3Ep^f~&0e9SqQD(VUl`%MI9 zd^!}&jvVG&E{z0PgCf%de0{GK=@uWk-fq*sa&-PSZ%t|>XCiv)O|IVaCY!Sy^~$6X z!U8K{S{;+($teAHFL6aUHF4(Qvy-wjVfT4H0ERHL|I^fbBa!KujB^$2ms_;8P6>(o zcsd&iA@9A_P=Qg@7Qg8=zhQMfrawtyS&P+j!}xAPl~s3@zYAvj6oPhs-k z_4IZ^x@f}AY9P@YNw|F=%+HRWw~`=K?kx(xANpK0KIek-Rmk2Iluv)nCWOO{0L|a6?f{= zC+aU>LSf1ZEBAj4B~XIaZ;*8p<0dyEB%dy8Wj=Vi(wL8e5fm^V@frm>S|AOMpTft- zhwhP&&;vf-oQjUtK*~|Ri^JI@Mo5G3IS%2G0h;|x;|XR>`}crvns?ra)XlK9z_(y0hpeow77D&Q{^qk`-YEskRZT(fz%XRcReQXDK0>lSPm7<6wz9}F^xif2 zJv(bQIQ_2xCL0rH?a{0GR`>Oii>;ZH|%S*7(kdMd1Nr~TRCvVYT|ta z#pL9nAhSw(IPidj-*Dn|!EX5_Ss(mx6miBajBWLk?c;TyG2L4qrG8v6B$do>jZZ+3 zC9zI9!6`kMkkO(Q8ua}tn(>E3c@>T#YxtD#YE27~o}t#Om1#a?@+c#Z?Vx6=$X2*U z?e*yUDOmQiSgo%T^sOd7a;;7N-o&L?h$3lo9cpGwNWQg1x2Q5`IR)M(;VYf2L-n-B&PioRSJoRlx}K#lC!9` zn%NHb=x9fnee96ow==?M(Jp*L%FXahsEY((8$lDC6s*e|m_Z@$H7huhg$j#hrjlF| z+9wb3x+2MosG0$`HxI)##-W}f`n|i<25+TO8Nvz+!teG+3@Qu{$*GbdX%I1 z1fYHqtfM~}@7~c8F}F}5u(O~Y_bJUJ3;Do5?ZZ%MF@P!`BxM6P>r&T7=p)s#fU@P0 z(QfCD)!n!gT}GJwR3nj?8}%d8a?B3kE_S4!$@7}+kTESZ({S0lIGz3Egw|Hc#d9RZ zDeDg^>YY8U3MC9K7&HpDX*u`H$9*mT@+E&f$Kj*rhAsB4Ot8>xv7Ro1Z)_))_2_Wi?FK|9y%J-v2G?{??{ZIb1&Fm%2p2vGh zgwj=s=IsiU#WF0U1#1y-3?8rK80YWDv$*Y6EJDK2mB{J({%XiuSVWM9C?m9%`b|qj zMpt{DEw6`P8X@)xPPHy#ur(9^qq=KAt^kdoGwSidS^%Ns#dcR?B(0=xO*o^$**DDb zVjZpBP-ShKwb0!$+bt6&&xndTIT*jS)&)R!Oy@pStiYR^oEz}SMCJ16Za@FPY|j1m zt+hsrnrnY*74b5cQP+m`Vm0E4V$H_JS_J)>*Zb-L1_@d*AA?QlV?~9A6_R2h8;`vz zw@21NvX~PA!m-9OGFGFEVV{1#EvJ2pTN$u=F-Z)Z#SdQZDn;b8`wbhKQkoaN6rTkQKUr$);kvbEs8VKn))*7QCv#a{=mcCklPFts zO5j$y+LCoHLAQIG*d8JhqbFdzgK39dd*75}>DbRc^NPQGpw6^oV>&$ID(uxp`8ah` z``C)$SvNEze@1X18W%W)8ml=M>}AJBy2~&7wjvHvZ<6*#n)rJbyM`oE89T;Tcpgyt z&f02gKdprf$U#}ebbWOd zt?(-}>9^m^W?l%za_FC8mxqpC`GbGh9CviV0>rF;aeQ(m8Z)ASXdJ>!kVaaW4=U;C zB8IA#n>2E4WQjQqFjq&&O~zrIpzU-3a2!I)e#MQtr4l}xw3~Vh&c?~HD`s9BIz~Un z$8Zp3lxE`6xvQ%=t`@h~C3$f~?VPmKntolLcfyBfLr%SYtEOnaE8K9q9)Vo|x?5r9 z|01Qcf9&-0+zY{gMlbu>?UGg({9z>HB^nrU0^Oj6ac?bJg{ z)u8X(&1x+3_S)IGCG2@pxAlTb+)azfejW)bCceLSiwnEyJstRmtU%z@Ct$%J2_BtnoLUH0A>*#91 zCruZAh_KbTgxkc$hUrfCD#w=xWtmXK!3+jlZD$GklMuN}ECSwMhjp?Yo&v+~eN=^^ zDX1|jCWC14P+ zO*I|jgFsLi@J{&c^f1O>7bmWyYUXIKO(=PqIaP%|W4DI~lXB1T&EQq$hb5G?yXi^B ziRwQLSO5*6=^rzjjmxJt+`#^+?N`L??Esg8Ra-}oa)`<3k<7o^35bUA-r?NMoL~G} zt}72nj{(XPWWEo(U9T}S+Bs;8CC3J9!w-dyWDm7QA8k$=f6ex|Zb$iDBSuSApCG`@ z%oh|yv(Ib)j0brIWVVwI9RU@BMRV$yiiI3nRSKRWrB=p+6L>_AfIw8 zi!;8fa-rSkGVle3;-)7PH9hhBaiizuE$Xc{Z*VP#lA(Ng%FGE%&eT_I^T%)FB)~uA z-YBV;@qdLmTi{=v2)uVuL$2!4JG48p4xr&Mn2nUKF2>>$`1}?v$eC4%^S@WIy**uK zly=WJUp`(?b5!uo9t{=sTRLe^Ms3M)mt8Kc<2N-E=fkY5a_XXqk# zgAg2b6^acnxQ!b9tPx?_6edo+Pj{L_SE~{hmNP=zE9K>x24Pd`4+wTq$)?IFY3}>@ z-3XhUTdScY<0uRrz>u*@=YxqA(Kb9!;2#voH#?G#!bywwdNh~a{K7sJ5lt7!W1Mb72&g37 zP}wJ6JUrf8of8~>x;YE8EOD-js9r6Q*{H|XS(vRN9VcV>*-XRO{c&MFr`yqqB5S&1 zFlKoU0e_H4+K-Xa7GLC39^BVn;TF#Jb$GlJAh~qeFPcQhhZ~)!Wn^TYZDX>Kk&(5| zEgXPVy7gMJQ6*YgI0iLVxg&RMO}{$IgXyw4X%fX> z--u$(;RUu_{2d4ZsKHDDVu_H!8#EHTe*MJFU-2h&twz<*ZSm_ckMb9thDU&^N^)t zai`4-+u#hE-!NC>CI0xa?sp5q{2S>u?!({Z2N+#nhn?vW&*+v}A8xvTrv)Y*!TD(* zg^*n`zmhm&3K1zoz9IHXr9MPJAZRHSAWLkzrDJIE0K1@C^`S7oB<~9k^@eSP;5x8=>CK-UkZ5zFO>6&flVFi;V(?c2} z-3-xh1T75bu=FGd>1Ia^N5Uro#zNpIq>v|ayL)Awo@?yQo6HNZ*RE0Q&+(STA@}d7 zIw>fS?fei_eu?9Rb~1~rm2Fv;YT4_1+Dw2=Cw!L}aKu z#Spzp8FfSI-`vrI7?B4o;a=sD!9M+!Rt#vsgmjZAt5(ueS_xx#sE4ms2GDFxI1pmVZzUB`ejK~ieS5ttFsT28+ zZnIR5HBx`AQ_hZ9H2?5|%l99!p_vr$m4|X&cvr8QMOxsq=j6^9SNDbCt)Mz6v!Fa9 zGv3k0to7`wh~W=21YG=ogs=Vy??Ntu@0c_YJ!>Mih}cV7KLC+UPHyzSS_Xd`?E3>b zW=90OEZ}m?To?h^Tb++w82;~Jb;vEKBl7}mM Date: Wed, 4 Dec 2024 14:53:41 +0100 Subject: [PATCH 022/141] [Security Solution] Fix PATCH rule API test failure in Serverless (#202885) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Resolves: https://github.com/elastic/kibana/issues/202812** ## Summary This PR fixes a problem in the MKI Serverless periodic pipeline that was introduced in #201825. The issue happened because the test tried to delete prebuilt rule assets stored in .kibana_security_solution, but you can’t access this index in Serverless MKI. The fix makes sure this call only runs in non-Serverless MKI environments. --- .../rule_patch/basic_license_essentials_tier/patch_rules.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts index a47f84ef930ad..f4536821dcaaa 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/rules_management/rule_patch/basic_license_essentials_tier/patch_rules.ts @@ -34,7 +34,6 @@ export default ({ getService }: FtrProviderContext) => { describe('patch rules', () => { beforeEach(async () => { await deleteAllRules(supertest, log); - await deleteAllPrebuiltRuleAssets(es, log); }); it('should patch a single rule property of name using a rule_id', async () => { @@ -233,8 +232,8 @@ export default ({ getService }: FtrProviderContext) => { }); }); - // Unskip: https://github.com/elastic/kibana/issues/195921 it('@skipInServerlessMKI throws an error if rule has external rule source and non-customizable fields are changed', async () => { + await deleteAllPrebuiltRuleAssets(es, log); // Install base prebuilt detection rule await createHistoricalPrebuiltRuleAssetSavedObjects(es, [ createRuleAssetSavedObject({ rule_id: 'rule-1', author: ['elastic'] }), From 7cfdd8c4af6572df3923c3bcac19e238b337a950 Mon Sep 17 00:00:00 2001 From: Milton Hultgren Date: Wed, 4 Dec 2024 14:53:57 +0100 Subject: [PATCH 023/141] [EEM] Add create and read APIs for v2 type and source definitions (#201470) ## Summary This PR adds: * Some basic features and privileges for the EEM app * A function that sets up an index with a template for the new definitions * 4 API endpoints to read and create entity types and sources * `POST /internal/entities/v2/definitions/types` * `GET /internal/entities/v2/definitions/types` * `POST /internal/entities/v2/definitions/sources` * `GET /internal/entities/v2/definitions/sources` * Some v2 shuffling around of code --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Maxim Palenov --- x-pack/plugins/entity_manager/kibana.jsonc | 3 +- x-pack/plugins/entity_manager/server/index.ts | 8 + .../entity_manager/server/lib/client/index.ts | 29 --- .../server/lib/entity_client.ts | 190 ++++-------------- .../entity_manager/server/lib/v2/constants.ts | 19 ++ .../setup_entity_definitions_index.ts | 81 ++++++++ .../lib/v2/definitions/source_definition.ts | 68 +++++++ .../lib/v2/definitions/type_definition.ts | 62 ++++++ .../server/lib/v2/entity_client.ts | 142 +++++++++++++ .../v2/errors/entity_definition_conflict.ts | 15 ++ .../errors/unknown_entity_type.ts | 0 .../server/lib/{ => v2}/queries/index.test.ts | 3 +- .../server/lib/{ => v2}/queries/index.ts | 33 +-- .../server/lib/{ => v2}/queries/utils.test.ts | 13 +- .../server/lib/{ => v2}/queries/utils.ts | 47 +---- .../server/lib/v2/run_esql_query.ts | 73 +++++++ .../entity_manager/server/lib/v2/types.ts | 93 +++++++++ .../plugins/entity_manager/server/plugin.ts | 60 +++++- .../server/routes/entities/index.ts | 3 - .../entity_manager/server/routes/index.ts | 2 + .../entity_manager/server/routes/v2/index.ts | 16 ++ .../entity_manager/server/routes/v2/search.ts | 99 ++------- .../routes/v2/source_definition_routes.ts | 78 +++++++ .../routes/v2/type_definition_routes.ts | 78 +++++++ x-pack/plugins/entity_manager/server/types.ts | 2 + x-pack/plugins/entity_manager/tsconfig.json | 2 + .../public/pages/overview/index.tsx | 2 +- .../entity_store/entity_store_data_client.ts | 2 +- .../apis/features/features/features.ts | 2 + .../apis/security/privileges.ts | 1 + .../apis/security/privileges_basic.ts | 2 + .../spaces_only/telemetry/telemetry.ts | 1 + 32 files changed, 893 insertions(+), 336 deletions(-) delete mode 100644 x-pack/plugins/entity_manager/server/lib/client/index.ts create mode 100644 x-pack/plugins/entity_manager/server/lib/v2/constants.ts create mode 100644 x-pack/plugins/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts create mode 100644 x-pack/plugins/entity_manager/server/lib/v2/definitions/source_definition.ts create mode 100644 x-pack/plugins/entity_manager/server/lib/v2/definitions/type_definition.ts create mode 100644 x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts create mode 100644 x-pack/plugins/entity_manager/server/lib/v2/errors/entity_definition_conflict.ts rename x-pack/plugins/entity_manager/server/lib/{entities => v2}/errors/unknown_entity_type.ts (100%) rename x-pack/plugins/entity_manager/server/lib/{ => v2}/queries/index.test.ts (96%) rename x-pack/plugins/entity_manager/server/lib/{ => v2}/queries/index.ts (75%) rename x-pack/plugins/entity_manager/server/lib/{ => v2}/queries/utils.test.ts (95%) rename x-pack/plugins/entity_manager/server/lib/{ => v2}/queries/utils.ts (63%) create mode 100644 x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts create mode 100644 x-pack/plugins/entity_manager/server/lib/v2/types.ts create mode 100644 x-pack/plugins/entity_manager/server/routes/v2/index.ts create mode 100644 x-pack/plugins/entity_manager/server/routes/v2/source_definition_routes.ts create mode 100644 x-pack/plugins/entity_manager/server/routes/v2/type_definition_routes.ts diff --git a/x-pack/plugins/entity_manager/kibana.jsonc b/x-pack/plugins/entity_manager/kibana.jsonc index c18822d48ac0a..02919893a8757 100644 --- a/x-pack/plugins/entity_manager/kibana.jsonc +++ b/x-pack/plugins/entity_manager/kibana.jsonc @@ -13,7 +13,8 @@ "requiredPlugins": [ "security", "encryptedSavedObjects", - "licensing" + "licensing", + "features" ], "requiredBundles": [] } diff --git a/x-pack/plugins/entity_manager/server/index.ts b/x-pack/plugins/entity_manager/server/index.ts index ebb826a500a5a..7327233c1fad2 100644 --- a/x-pack/plugins/entity_manager/server/index.ts +++ b/x-pack/plugins/entity_manager/server/index.ts @@ -18,6 +18,14 @@ export type { }; export { config }; +export { + CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE, + CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITY_TYPE_DEFINITION_PRIVILEGE, + READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITIES_PRIVILEGE, +} from './lib/v2/constants'; + export const plugin = async (context: PluginInitializerContext) => { const { EntityManagerServerPlugin } = await import('./plugin'); return new EntityManagerServerPlugin(context); diff --git a/x-pack/plugins/entity_manager/server/lib/client/index.ts b/x-pack/plugins/entity_manager/server/lib/client/index.ts deleted file mode 100644 index 90562264851ce..0000000000000 --- a/x-pack/plugins/entity_manager/server/lib/client/index.ts +++ /dev/null @@ -1,29 +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 { IScopedClusterClient, SavedObjectsClientContract } from '@kbn/core/server'; -import { EntityDefinition } from '@kbn/entities-schema'; -import { findEntityDefinitions } from '../entities/find_entity_definition'; -import type { EntityDefinitionWithState } from '../entities/types'; - -export class EntityManagerClient { - constructor( - private readonly esClient: IScopedClusterClient, - private readonly soClient: SavedObjectsClientContract - ) {} - - findEntityDefinitions({ page, perPage }: { page?: number; perPage?: number } = {}): Promise< - EntityDefinition[] | EntityDefinitionWithState[] - > { - return findEntityDefinitions({ - esClient: this.esClient.asCurrentUser, - soClient: this.soClient, - page, - perPage, - }); - } -} diff --git a/x-pack/plugins/entity_manager/server/lib/entity_client.ts b/x-pack/plugins/entity_manager/server/lib/entity_client.ts index 35abe63c5fd23..dd4eeedbc4fc2 100644 --- a/x-pack/plugins/entity_manager/server/lib/entity_client.ts +++ b/x-pack/plugins/entity_manager/server/lib/entity_client.ts @@ -5,10 +5,9 @@ * 2.0. */ -import { without } from 'lodash'; -import { EntityV2, EntityDefinition, EntityDefinitionUpdate } from '@kbn/entities-schema'; +import { EntityDefinition, EntityDefinitionUpdate } from '@kbn/entities-schema'; import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; -import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; import { Logger } from '@kbn/logging'; import { installEntityDefinition, @@ -19,40 +18,24 @@ import { startTransforms } from './entities/start_transforms'; import { findEntityDefinitionById, findEntityDefinitions } from './entities/find_entity_definition'; import { uninstallEntityDefinition } from './entities/uninstall_entity_definition'; import { EntityDefinitionNotFound } from './entities/errors/entity_not_found'; - import { stopTransforms } from './entities/stop_transforms'; import { deleteIndices } from './entities/delete_index'; import { EntityDefinitionWithState } from './entities/types'; import { EntityDefinitionUpdateConflict } from './entities/errors/entity_definition_update_conflict'; -import { EntitySource, SortBy, getEntityInstancesQuery } from './queries'; -import { mergeEntitiesList, runESQLQuery } from './queries/utils'; -import { UnknownEntityType } from './entities/errors/unknown_entity_type'; - -interface SearchCommon { - start: string; - end: string; - sort?: SortBy; - metadataFields?: string[]; - filters?: string[]; - limit?: number; -} - -export type SearchByType = SearchCommon & { - type: string; -}; - -export type SearchBySources = SearchCommon & { - sources: EntitySource[]; -}; +import { EntityClient as EntityClient_v2 } from './v2/entity_client'; export class EntityClient { + public v2: EntityClient_v2; + constructor( private options: { - esClient: ElasticsearchClient; + clusterClient: IScopedClusterClient; soClient: SavedObjectsClientContract; logger: Logger; } - ) {} + ) { + this.v2 = new EntityClient_v2(options); + } async createEntityDefinition({ definition, @@ -66,13 +49,17 @@ export class EntityClient { ); const installedDefinition = await installEntityDefinition({ definition, - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, soClient: this.options.soClient, logger: this.options.logger, }); if (!installOnly) { - await startTransforms(this.options.esClient, installedDefinition, this.options.logger); + await startTransforms( + this.options.clusterClient.asCurrentUser, + installedDefinition, + this.options.logger + ); } return installedDefinition; @@ -88,7 +75,7 @@ export class EntityClient { const definition = await findEntityDefinitionById({ id, soClient: this.options.soClient, - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, includeState: true, }); @@ -115,12 +102,16 @@ export class EntityClient { definition, definitionUpdate, soClient: this.options.soClient, - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, logger: this.options.logger, }); if (shouldRestartTransforms) { - await startTransforms(this.options.esClient, updatedDefinition, this.options.logger); + await startTransforms( + this.options.clusterClient.asCurrentUser, + updatedDefinition, + this.options.logger + ); } return updatedDefinition; } @@ -128,7 +119,7 @@ export class EntityClient { async deleteEntityDefinition({ id, deleteData = false }: { id: string; deleteData?: boolean }) { const definition = await findEntityDefinitionById({ id, - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, soClient: this.options.soClient, }); @@ -141,13 +132,17 @@ export class EntityClient { ); await uninstallEntityDefinition({ definition, - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, soClient: this.options.soClient, logger: this.options.logger, }); if (deleteData) { - await deleteIndices(this.options.esClient, definition, this.options.logger); + await deleteIndices( + this.options.clusterClient.asCurrentUser, + definition, + this.options.logger + ); } } @@ -167,7 +162,7 @@ export class EntityClient { builtIn?: boolean; }) { const definitions = await findEntityDefinitions({ - esClient: this.options.esClient, + esClient: this.options.clusterClient.asCurrentUser, soClient: this.options.soClient, page, perPage, @@ -182,124 +177,19 @@ export class EntityClient { async startEntityDefinition(definition: EntityDefinition) { this.options.logger.info(`Starting transforms for definition [${definition.id}]`); - return startTransforms(this.options.esClient, definition, this.options.logger); + return startTransforms( + this.options.clusterClient.asCurrentUser, + definition, + this.options.logger + ); } async stopEntityDefinition(definition: EntityDefinition) { this.options.logger.info(`Stopping transforms for definition [${definition.id}]`); - return stopTransforms(this.options.esClient, definition, this.options.logger); - } - - async getEntitySources({ type }: { type: string }) { - const result = await this.options.esClient.search({ - index: 'kibana_entity_definitions', - query: { - bool: { - must: { - term: { entity_type: type }, - }, - }, - }, - }); - - return result.hits.hits.map((hit) => hit._source) as EntitySource[]; - } - - async searchEntities({ - type, - start, - end, - sort, - metadataFields = [], - filters = [], - limit = 10, - }: SearchByType) { - const sources = await this.getEntitySources({ type }); - if (sources.length === 0) { - throw new UnknownEntityType(`No sources found for entity type [${type}]`); - } - - return this.searchEntitiesBySources({ - sources, - start, - end, - metadataFields, - filters, - sort, - limit, - }); - } - - async searchEntitiesBySources({ - sources, - start, - end, - sort, - metadataFields = [], - filters = [], - limit = 10, - }: SearchBySources) { - const entities = await Promise.all( - sources.map(async (source) => { - const mandatoryFields = [ - ...source.identity_fields, - ...(source.timestamp_field ? [source.timestamp_field] : []), - ...(source.display_name ? [source.display_name] : []), - ]; - const metaFields = [...metadataFields, ...source.metadata_fields]; - - // operations on an unmapped field result in a failing query so we verify - // field capabilities beforehand - const { fields } = await this.options.esClient.fieldCaps({ - index: source.index_patterns, - fields: [...mandatoryFields, ...metaFields], - }); - - const sourceHasMandatoryFields = mandatoryFields.every((field) => !!fields[field]); - if (!sourceHasMandatoryFields) { - // we can't build entities without id fields so we ignore the source. - // TODO filters should likely behave similarly. we should also throw - const missingFields = mandatoryFields.filter((field) => !fields[field]); - this.options.logger.info( - `Ignoring source for type [${source.type}] with index_patterns [${ - source.index_patterns - }] because some mandatory fields [${missingFields.join(', ')}] are not mapped` - ); - return []; - } - - // but metadata field not being available is fine - const availableMetadataFields = metaFields.filter((field) => fields[field]); - if (availableMetadataFields.length < metaFields.length) { - this.options.logger.info( - `Ignoring unmapped fields [${without(metaFields, ...availableMetadataFields).join( - ', ' - )}]` - ); - } - - const query = getEntityInstancesQuery({ - source: { - ...source, - metadata_fields: availableMetadataFields, - filters: [...source.filters, ...filters], - }, - start, - end, - sort, - limit, - }); - this.options.logger.debug(`Entity query: ${query}`); - - const rawEntities = await runESQLQuery({ - query, - esClient: this.options.esClient, - }); - - return rawEntities; - }) - ).then((results) => results.flat()); - - return mergeEntitiesList(sources, entities).slice(0, limit); + return stopTransforms( + this.options.clusterClient.asCurrentUser, + definition, + this.options.logger + ); } } diff --git a/x-pack/plugins/entity_manager/server/lib/v2/constants.ts b/x-pack/plugins/entity_manager/server/lib/v2/constants.ts new file mode 100644 index 0000000000000..71d9369318225 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/constants.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. + */ + +// Definitions index + +export const DEFINITIONS_ALIAS = '.kibana-entities-definitions'; +export const TEMPLATE_VERSION = 1; + +// Privileges + +export const CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE = 'create_entity_type_definition'; +export const CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE = 'create_entity_source_definition'; +export const READ_ENTITY_TYPE_DEFINITION_PRIVILEGE = 'read_entity_type_definition'; +export const READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE = 'read_entity_source_definition'; +export const READ_ENTITIES_PRIVILEGE = 'read_entities'; diff --git a/x-pack/plugins/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts b/x-pack/plugins/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts new file mode 100644 index 0000000000000..b9e3f39a3dd62 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts @@ -0,0 +1,81 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { errors } from '@elastic/elasticsearch'; +import { IClusterClient, Logger } from '@kbn/core/server'; +import { DEFINITIONS_ALIAS, TEMPLATE_VERSION } from '../constants'; + +const definitionsIndexTemplate = { + name: `${DEFINITIONS_ALIAS}-template`, + index_patterns: [`${DEFINITIONS_ALIAS}-*`], + _meta: { + description: "Index template for the Elastic Entity Model's entity definitions index.", + managed: true, + managed_by: 'elastic_entity_model', + }, + version: TEMPLATE_VERSION, + template: { + settings: { + hidden: true, + }, + aliases: { + [DEFINITIONS_ALIAS]: { + is_hidden: true, + }, + }, + mappings: { + dynamic: false, + properties: { + template_version: { + type: 'short', + }, + definition_type: { + type: 'keyword', + }, + source: { + type: 'object', + properties: { + type_id: { + type: 'keyword', + }, + }, + }, + }, + }, + }, +}; + +const CURRENT_INDEX = `${DEFINITIONS_ALIAS}-${TEMPLATE_VERSION}` as const; + +export async function setupEntityDefinitionsIndex(clusterClient: IClusterClient, logger: Logger) { + const esClient = clusterClient.asInternalUser; + try { + logger.debug(`Installing entity definitions index template for version ${TEMPLATE_VERSION}`); + await esClient.indices.putIndexTemplate(definitionsIndexTemplate); + + await esClient.indices.get({ + index: CURRENT_INDEX, + }); + + logger.debug(`Entity definitions index already exists (${CURRENT_INDEX})`); + } catch (error) { + if ( + error instanceof errors.ResponseError && + error.message.includes('index_not_found_exception') + ) { + logger.debug(`Creating entity definitions index (${CURRENT_INDEX})`); + + await esClient.indices.create({ + index: CURRENT_INDEX, + }); + + return; + } + + throw error; + } +} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/definitions/source_definition.ts b/x-pack/plugins/entity_manager/server/lib/v2/definitions/source_definition.ts new file mode 100644 index 0000000000000..7ed1779708e54 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/definitions/source_definition.ts @@ -0,0 +1,68 @@ +/* + * 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 { IScopedClusterClient, Logger } from '@kbn/core/server'; +import { DEFINITIONS_ALIAS, TEMPLATE_VERSION } from '../constants'; +import { EntitySourceDefinition, StoredEntitySourceDefinition } from '../types'; +import { SourceAs, runESQLQuery } from '../run_esql_query'; +import { EntityDefinitionConflict } from '../errors/entity_definition_conflict'; + +export async function storeSourceDefinition( + source: EntitySourceDefinition, + clusterClient: IScopedClusterClient, + logger: Logger +): Promise { + const esClient = clusterClient.asInternalUser; + + const sources = await runESQLQuery('fetch source definition for conflict check', { + esClient, + query: `FROM ${DEFINITIONS_ALIAS} METADATA _id | WHERE definition_type == "source" AND _id == "source:${source.id}" | KEEP _id`, + logger, + }); + + if (sources.length !== 0) { + throw new EntityDefinitionConflict('source', source.id); + } + + const definition: StoredEntitySourceDefinition = { + template_version: TEMPLATE_VERSION, + definition_type: 'source', + source, + }; + + await esClient.index({ + index: DEFINITIONS_ALIAS, + id: `source:${definition.source.id}`, + document: definition, + }); + + return definition.source; +} + +export interface ReadSourceDefinitionOptions { + type?: string; +} + +export async function readSourceDefinitions( + clusterClient: IScopedClusterClient, + logger: Logger, + options?: ReadSourceDefinitionOptions +): Promise { + const esClient = clusterClient.asInternalUser; + + const typeFilter = options?.type ? `AND source.type_id == "${options.type}"` : ''; + const sources = await runESQLQuery>( + 'fetch all source definitions', + { + esClient, + query: `FROM ${DEFINITIONS_ALIAS} METADATA _source | WHERE definition_type == "source" ${typeFilter} | KEEP _source`, + logger, + } + ); + + return sources.map((storedTypeDefinition) => storedTypeDefinition._source.source); +} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/definitions/type_definition.ts b/x-pack/plugins/entity_manager/server/lib/v2/definitions/type_definition.ts new file mode 100644 index 0000000000000..710e176a4a128 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/definitions/type_definition.ts @@ -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 { IScopedClusterClient, Logger } from '@kbn/core/server'; +import { DEFINITIONS_ALIAS, TEMPLATE_VERSION } from '../constants'; +import { EntityTypeDefinition, StoredEntityTypeDefinition } from '../types'; +import { SourceAs, runESQLQuery } from '../run_esql_query'; +import { EntityDefinitionConflict } from '../errors/entity_definition_conflict'; + +export async function storeTypeDefinition( + type: EntityTypeDefinition, + clusterClient: IScopedClusterClient, + logger: Logger +): Promise { + const esClient = clusterClient.asInternalUser; + + const types = await runESQLQuery('fetch type definition for conflict check', { + esClient, + query: `FROM ${DEFINITIONS_ALIAS} METADATA _id | WHERE definition_type == "type" AND _id == "type:${type.id}" | KEEP _id`, + logger, + }); + + if (types.length !== 0) { + throw new EntityDefinitionConflict('type', type.id); + } + + const definition: StoredEntityTypeDefinition = { + template_version: TEMPLATE_VERSION, + definition_type: 'type', + type, + }; + + await esClient.index({ + index: DEFINITIONS_ALIAS, + id: `type:${definition.type.id}`, + document: definition, + }); + + return definition.type; +} + +export async function readTypeDefinitions( + clusterClient: IScopedClusterClient, + logger: Logger +): Promise { + const esClient = clusterClient.asInternalUser; + + const types = await runESQLQuery>( + 'fetch all type definitions', + { + esClient, + query: `FROM ${DEFINITIONS_ALIAS} METADATA _source | WHERE definition_type == "type" | KEEP _source`, + logger, + } + ); + + return types.map((storedTypeDefinition) => storedTypeDefinition._source.type); +} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts b/x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts new file mode 100644 index 0000000000000..9eb2127ddc818 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts @@ -0,0 +1,142 @@ +/* + * 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 { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { IScopedClusterClient, Logger } from '@kbn/core/server'; +import { EntityV2 } from '@kbn/entities-schema'; +import { without } from 'lodash'; +import { + ReadSourceDefinitionOptions, + readSourceDefinitions, + storeSourceDefinition, +} from './definitions/source_definition'; +import { readTypeDefinitions, storeTypeDefinition } from './definitions/type_definition'; +import { getEntityInstancesQuery } from './queries'; +import { mergeEntitiesList } from './queries/utils'; +import { + EntitySourceDefinition, + EntityTypeDefinition, + SearchByType, + SearchBySources, +} from './types'; +import { UnknownEntityType } from './errors/unknown_entity_type'; +import { runESQLQuery } from './run_esql_query'; + +export class EntityClient { + constructor( + private options: { + clusterClient: IScopedClusterClient; + soClient: SavedObjectsClientContract; + logger: Logger; + } + ) {} + + async searchEntities({ type, ...options }: SearchByType) { + const sources = await this.readSourceDefinitions({ + type, + }); + + if (sources.length === 0) { + throw new UnknownEntityType(`No sources found for entity type [${type}]`); + } + + return this.searchEntitiesBySources({ + sources, + ...options, + }); + } + + async searchEntitiesBySources({ + sources, + metadata_fields: metadataFields, + filters, + start, + end, + sort, + limit, + }: SearchBySources) { + const entities = await Promise.all( + sources.map(async (source) => { + const mandatoryFields = [ + ...source.identity_fields, + ...(source.timestamp_field ? [source.timestamp_field] : []), + ...(source.display_name ? [source.display_name] : []), + ]; + const metaFields = [...metadataFields, ...source.metadata_fields]; + + // operations on an unmapped field result in a failing query so we verify + // field capabilities beforehand + const { fields } = await this.options.clusterClient.asCurrentUser.fieldCaps({ + index: source.index_patterns, + fields: [...mandatoryFields, ...metaFields], + }); + + const sourceHasMandatoryFields = mandatoryFields.every((field) => !!fields[field]); + if (!sourceHasMandatoryFields) { + // we can't build entities without id fields so we ignore the source. + // TODO filters should likely behave similarly. we should also throw + const missingFields = mandatoryFields.filter((field) => !fields[field]); + this.options.logger.info( + `Ignoring source for type [${source.type_id}] with index_patterns [${ + source.index_patterns + }] because some mandatory fields [${missingFields.join(', ')}] are not mapped` + ); + return []; + } + + // but metadata field not being available is fine + const availableMetadataFields = metaFields.filter((field) => fields[field]); + if (availableMetadataFields.length < metaFields.length) { + this.options.logger.info( + `Ignoring unmapped fields [${without(metaFields, ...availableMetadataFields).join( + ', ' + )}]` + ); + } + + const query = getEntityInstancesQuery({ + source: { + ...source, + metadata_fields: availableMetadataFields, + filters: [...source.filters, ...filters], + }, + start, + end, + sort, + limit, + }); + this.options.logger.debug(`Entity query: ${query}`); + + const rawEntities = await runESQLQuery('resolve entities', { + query, + esClient: this.options.clusterClient.asCurrentUser, + logger: this.options.logger, + }); + + return rawEntities; + }) + ).then((results) => results.flat()); + + return mergeEntitiesList(sources, entities).slice(0, limit); + } + + async storeTypeDefinition(type: EntityTypeDefinition) { + return storeTypeDefinition(type, this.options.clusterClient, this.options.logger); + } + + async readTypeDefinitions() { + return readTypeDefinitions(this.options.clusterClient, this.options.logger); + } + + async storeSourceDefinition(source: EntitySourceDefinition) { + return storeSourceDefinition(source, this.options.clusterClient, this.options.logger); + } + + async readSourceDefinitions(options?: ReadSourceDefinitionOptions) { + return readSourceDefinitions(this.options.clusterClient, this.options.logger, options); + } +} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/errors/entity_definition_conflict.ts b/x-pack/plugins/entity_manager/server/lib/v2/errors/entity_definition_conflict.ts new file mode 100644 index 0000000000000..9000685713e36 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/errors/entity_definition_conflict.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DefinitionType } from '../types'; + +export class EntityDefinitionConflict extends Error { + constructor(definitionType: DefinitionType, id: string) { + super(`An entity ${definitionType} definition with the ID "${id}" already exists.`); + this.name = 'EntityDefinitionConflict'; + } +} diff --git a/x-pack/plugins/entity_manager/server/lib/entities/errors/unknown_entity_type.ts b/x-pack/plugins/entity_manager/server/lib/v2/errors/unknown_entity_type.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/errors/unknown_entity_type.ts rename to x-pack/plugins/entity_manager/server/lib/v2/errors/unknown_entity_type.ts diff --git a/x-pack/plugins/entity_manager/server/lib/queries/index.test.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts similarity index 96% rename from x-pack/plugins/entity_manager/server/lib/queries/index.test.ts rename to x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts index d8b3c9347cdd1..7485b19a2c7c0 100644 --- a/x-pack/plugins/entity_manager/server/lib/queries/index.test.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts @@ -12,7 +12,8 @@ describe('getEntityInstancesQuery', () => { it('generates a valid esql query', () => { const query = getEntityInstancesQuery({ source: { - type: 'service', + id: 'service_source', + type_id: 'service', index_patterns: ['logs-*', 'metrics-*'], identity_fields: ['service.name'], metadata_fields: ['host.name'], diff --git a/x-pack/plugins/entity_manager/server/lib/queries/index.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts similarity index 75% rename from x-pack/plugins/entity_manager/server/lib/queries/index.ts rename to x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts index 83c25d756c170..7926b67849f5d 100644 --- a/x-pack/plugins/entity_manager/server/lib/queries/index.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts @@ -5,26 +5,9 @@ * 2.0. */ -import { z } from '@kbn/zod'; - -export const entitySourceSchema = z.object({ - type: z.string(), - timestamp_field: z.optional(z.string()), - index_patterns: z.array(z.string()), - identity_fields: z.array(z.string()), - metadata_fields: z.array(z.string()), - filters: z.array(z.string()), - display_name: z.optional(z.string()), -}); - -export interface SortBy { - field: string; - direction: 'ASC' | 'DESC'; -} - -export type EntitySource = z.infer; +import { EntitySourceDefinition, SortBy } from '../types'; -const sourceCommand = ({ source }: { source: EntitySource }) => { +const sourceCommand = ({ source }: { source: EntitySourceDefinition }) => { let query = `FROM ${source.index_patterns.join(', ')}`; const esMetadataFields = source.metadata_fields.filter((field) => @@ -42,7 +25,7 @@ const whereCommand = ({ start, end, }: { - source: EntitySource; + source: EntitySourceDefinition; start: string; end: string; }) => { @@ -60,7 +43,7 @@ const whereCommand = ({ return filters.map((filter) => `WHERE ${filter}`).join(' | '); }; -const statsCommand = ({ source }: { source: EntitySource }) => { +const statsCommand = ({ source }: { source: EntitySourceDefinition }) => { const aggs = source.metadata_fields .filter((field) => !source.identity_fields.some((idField) => idField === field)) .map((field) => `${field} = VALUES(${field})`); @@ -78,7 +61,7 @@ const statsCommand = ({ source }: { source: EntitySource }) => { return `STATS ${aggs.join(', ')} BY ${source.identity_fields.join(', ')}`; }; -const evalCommand = ({ source }: { source: EntitySource }) => { +const evalCommand = ({ source }: { source: EntitySourceDefinition }) => { const id = source.identity_fields.length === 1 ? source.identity_fields[0] @@ -89,13 +72,13 @@ const evalCommand = ({ source }: { source: EntitySource }) => { : 'entity.id'; return `EVAL ${[ - `entity.type = "${source.type}"`, + `entity.type = "${source.type_id}"`, `entity.id = ${id}`, `entity.display_name = ${displayName}`, ].join(', ')}`; }; -const sortCommand = ({ source, sort }: { source: EntitySource; sort?: SortBy }) => { +const sortCommand = ({ source, sort }: { source: EntitySourceDefinition; sort?: SortBy }) => { if (sort) { return `SORT ${sort.field} ${sort.direction}`; } @@ -114,7 +97,7 @@ export function getEntityInstancesQuery({ end, sort, }: { - source: EntitySource; + source: EntitySourceDefinition; limit: number; start: string; end: string; diff --git a/x-pack/plugins/entity_manager/server/lib/queries/utils.test.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.test.ts similarity index 95% rename from x-pack/plugins/entity_manager/server/lib/queries/utils.test.ts rename to x-pack/plugins/entity_manager/server/lib/v2/queries/utils.test.ts index df5c8a2a4a826..295ab7796585c 100644 --- a/x-pack/plugins/entity_manager/server/lib/queries/utils.test.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { EntitySource } from '.'; +import { EntitySourceDefinition } from '../types'; import { mergeEntitiesList } from './utils'; describe('mergeEntitiesList', () => { @@ -68,7 +68,7 @@ describe('mergeEntitiesList', () => { { metadata_fields: ['host.name', 'agent.name', 'service.environment', 'only_in_record_2'], }, - ] as EntitySource[], + ] as EntitySourceDefinition[], entities ); expect(mergedEntities.length).toEqual(1); @@ -124,7 +124,7 @@ describe('mergeEntitiesList', () => { { metadata_fields: ['host.name'], }, - ] as EntitySource[], + ] as EntitySourceDefinition[], entities ); expect(mergedEntities.length).toEqual(1); @@ -154,7 +154,10 @@ describe('mergeEntitiesList', () => { ]; const mergedEntities = mergeEntitiesList( - [{ metadata_fields: ['host.name'] }, { metadata_fields: ['host.name'] }] as EntitySource[], + [ + { metadata_fields: ['host.name'] }, + { metadata_fields: ['host.name'] }, + ] as EntitySourceDefinition[], entities ); expect(mergedEntities.length).toEqual(1); @@ -199,7 +202,7 @@ describe('mergeEntitiesList', () => { { metadata_fields: ['host.name'], }, - ] as EntitySource[], + ] as EntitySourceDefinition[], entities ); expect(mergedEntities.length).toEqual(1); diff --git a/x-pack/plugins/entity_manager/server/lib/queries/utils.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts similarity index 63% rename from x-pack/plugins/entity_manager/server/lib/queries/utils.ts rename to x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts index a18f6fb837140..1d20d3caea0dc 100644 --- a/x-pack/plugins/entity_manager/server/lib/queries/utils.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts @@ -5,11 +5,9 @@ * 2.0. */ -import { compact, uniq } from 'lodash'; -import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { EntityV2 } from '@kbn/entities-schema'; -import { ESQLSearchResponse } from '@kbn/es-types'; -import { EntitySource } from '.'; +import { compact, uniq } from 'lodash'; +import { EntitySourceDefinition } from '../types'; function getLatestDate(date1?: string, date2?: string) { if (!date1 && !date2) return; @@ -45,7 +43,10 @@ function mergeEntities(metadataFields: string[], entity1: EntityV2, entity2: Ent return merged; } -export function mergeEntitiesList(sources: EntitySource[], entities: EntityV2[]): EntityV2[] { +export function mergeEntitiesList( + sources: EntitySourceDefinition[], + entities: EntityV2[] +): EntityV2[] { const metadataFields = uniq( sources.flatMap((source) => compact([source.timestamp_field, ...source.metadata_fields])) ); @@ -64,39 +65,3 @@ export function mergeEntitiesList(sources: EntitySource[], entities: EntityV2[]) return Object.values(instances); } - -export async function runESQLQuery({ - esClient, - query, -}: { - esClient: ElasticsearchClient; - query: string; -}): Promise { - const esqlResponse = (await esClient.esql.query( - { - query, - format: 'json', - }, - { querystring: { drop_null_columns: true } } - )) as unknown as ESQLSearchResponse; - - const documents = esqlResponse.values.map((row) => - row.reduce>((acc, value, index) => { - const column = esqlResponse.columns[index]; - - if (!column) { - return acc; - } - - // Removes the type suffix from the column name - const name = column.name.replace(/\.(text|keyword)$/, ''); - if (!acc[name]) { - acc[name] = value; - } - - return acc; - }, {}) - ) as T[]; - - return documents; -} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts b/x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts new file mode 100644 index 0000000000000..eda36a007ffe6 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { withSpan } from '@kbn/apm-utils'; +import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { ESQLColumn, ESQLRow, ESQLSearchResponse } from '@kbn/es-types'; + +export interface SourceAs { + _source: T; +} + +export async function runESQLQuery( + operationName: string, + { + esClient, + logger, + query, + }: { + esClient: ElasticsearchClient; + logger: Logger; + query: string; + } +): Promise { + logger.trace(() => `Request (${operationName}):\n${query}`); + return withSpan( + { name: operationName, labels: { plugin: '@kbn/entityManager-plugin' } }, + async () => + esClient.esql.query( + { + query, + format: 'json', + }, + { querystring: { drop_null_columns: true } } + ) + ) + .then((response) => { + logger.trace(() => `Response (${operationName}):\n${JSON.stringify(response, null, 2)}`); + + const esqlResponse = response as unknown as ESQLSearchResponse; + + const documents = esqlResponse.values.map((row) => + rowToObject(row, esqlResponse.columns) + ) as T[]; + + return documents; + }) + .catch((error) => { + logger.trace(() => `Error (${operationName}):\n${error.message}`); + throw error; + }); +} + +function rowToObject(row: ESQLRow, columns: ESQLColumn[]) { + return row.reduce>((object, value, index) => { + const column = columns[index]; + + if (!column) { + return object; + } + + // Removes the type suffix from the column name + const name = column.name.replace(/\.(text|keyword)$/, ''); + if (!object[name]) { + object[name] = value; + } + + return object; + }, {}); +} diff --git a/x-pack/plugins/entity_manager/server/lib/v2/types.ts b/x-pack/plugins/entity_manager/server/lib/v2/types.ts new file mode 100644 index 0000000000000..e9815942592de --- /dev/null +++ b/x-pack/plugins/entity_manager/server/lib/v2/types.ts @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from '@kbn/zod'; +import moment from 'moment'; + +// Definitions + +export const entityTypeDefinitionRt = z.object({ + id: z.string(), +}); + +export type EntityTypeDefinition = z.TypeOf; + +export const entitySourceDefinitionRt = z.object({ + id: z.string(), + type_id: z.string(), + index_patterns: z.array(z.string()), + identity_fields: z.array(z.string()), + metadata_fields: z.array(z.string()), + filters: z.array(z.string()), + timestamp_field: z.optional(z.string()), + display_name: z.optional(z.string()), +}); + +export type EntitySourceDefinition = z.TypeOf; + +// Stored definitions + +export type DefinitionType = 'type' | 'source'; + +export interface BaseEntityDefinition { + definition_type: DefinitionType; + template_version: number; +} + +export interface StoredEntityTypeDefinition extends BaseEntityDefinition { + type: EntityTypeDefinition; +} + +export interface StoredEntitySourceDefinition extends BaseEntityDefinition { + source: EntitySourceDefinition; +} + +// API parameters + +const sortByRt = z.object({ + field: z.string(), + direction: z.enum(['ASC', 'DESC']), +}); + +export type SortBy = z.TypeOf; + +const searchCommonRt = z.object({ + start: z + .optional(z.string()) + .default(() => moment().subtract(5, 'minutes').toISOString()) + .refine((val) => moment(val).isValid(), { + message: '[start] should be a date in ISO format', + }), + end: z + .optional(z.string()) + .default(() => moment().toISOString()) + .refine((val) => moment(val).isValid(), { + message: '[end] should be a date in ISO format', + }), + sort: z.optional(sortByRt), + limit: z.optional(z.number()).default(10), + metadata_fields: z.optional(z.array(z.string())).default([]), + filters: z.optional(z.array(z.string())).default([]), +}); + +export const searchByTypeRt = z.intersection( + searchCommonRt, + z.object({ + type: z.string(), + }) +); + +export type SearchByType = z.output; + +export const searchBySourcesRt = z.intersection( + searchCommonRt, + z.object({ + sources: z.array(entitySourceDefinitionRt), + }) +); + +export type SearchBySources = z.output; diff --git a/x-pack/plugins/entity_manager/server/plugin.ts b/x-pack/plugins/entity_manager/server/plugin.ts index 101fdde95c9dc..d2e9d12a33797 100644 --- a/x-pack/plugins/entity_manager/server/plugin.ts +++ b/x-pack/plugins/entity_manager/server/plugin.ts @@ -8,6 +8,7 @@ import { CoreSetup, CoreStart, + DEFAULT_APP_CATEGORIES, KibanaRequest, Logger, Plugin, @@ -16,6 +17,7 @@ import { } from '@kbn/core/server'; import { registerRoutes } from '@kbn/server-route-repository'; import { firstValueFrom } from 'rxjs'; +import { KibanaFeatureScope } from '@kbn/features-plugin/common'; import { EntityManagerConfig, configSchema, exposeToBrowserConfig } from '../common/config'; import { builtInDefinitions } from './lib/entities/built_in'; import { upgradeBuiltInEntityDefinitions } from './lib/entities/upgrade_entity_definition'; @@ -29,6 +31,14 @@ import { EntityManagerPluginStartDependencies, EntityManagerServerSetup, } from './types'; +import { setupEntityDefinitionsIndex } from './lib/v2/definitions/setup_entity_definitions_index'; +import { + CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE, + CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITY_TYPE_DEFINITION_PRIVILEGE, + READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITIES_PRIVILEGE, +} from './lib/v2/constants'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface EntityManagerServerPluginSetup {} @@ -63,6 +73,46 @@ export class EntityManagerServerPlugin core: CoreSetup, plugins: EntityManagerPluginSetupDependencies ): EntityManagerServerPluginSetup { + const ENTITY_MANAGER_FEATURE_ID = 'entityManager'; + plugins.features.registerKibanaFeature({ + id: ENTITY_MANAGER_FEATURE_ID, + name: 'Entity Manager', + description: 'All features related to the Elastic Entity model', + category: DEFAULT_APP_CATEGORIES.management, + scope: [KibanaFeatureScope.Spaces, KibanaFeatureScope.Security], + app: [ENTITY_MANAGER_FEATURE_ID], + privileges: { + all: { + app: [ENTITY_MANAGER_FEATURE_ID], + api: [ + CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE, + CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITY_TYPE_DEFINITION_PRIVILEGE, + READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITIES_PRIVILEGE, + ], + ui: [], + savedObject: { + all: [], + read: [], + }, + }, + read: { + app: [ENTITY_MANAGER_FEATURE_ID], + api: [ + READ_ENTITY_TYPE_DEFINITION_PRIVILEGE, + READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITIES_PRIVILEGE, + ], + ui: [], + savedObject: { + all: [], + read: [], + }, + }, + }, + }); + core.savedObjects.registerType(entityDefinition); core.savedObjects.registerType(EntityDiscoveryApiKeyType); plugins.encryptedSavedObjects.registerType({ @@ -99,9 +149,9 @@ export class EntityManagerServerPlugin request: KibanaRequest; coreStart: CoreStart; }) { - const esClient = coreStart.elasticsearch.client.asScoped(request).asCurrentUser; + const clusterClient = coreStart.elasticsearch.client.asScoped(request); const soClient = coreStart.savedObjects.getScopedClient(request); - return new EntityClient({ esClient, soClient, logger: this.logger }); + return new EntityClient({ clusterClient, soClient, logger: this.logger }); } public start( @@ -117,6 +167,7 @@ export class EntityManagerServerPlugin const esClient = core.elasticsearch.client.asInternalUser; + // Setup v1 definitions index installEntityManagerTemplates({ esClient, logger: this.logger }) .then(async () => { // the api key validation requires a check against the cluster license @@ -133,6 +184,11 @@ export class EntityManagerServerPlugin }) .catch((err) => this.logger.error(err)); + // Setup v2 definitions index + setupEntityDefinitionsIndex(core.elasticsearch.client, this.logger).catch((error) => { + this.logger.error(error); + }); + return { getScopedClient: async ({ request }: { request: KibanaRequest }) => { return this.getScopedClient({ request, coreStart: core }); diff --git a/x-pack/plugins/entity_manager/server/routes/entities/index.ts b/x-pack/plugins/entity_manager/server/routes/entities/index.ts index 52300ab2601b6..539423c6a5e17 100644 --- a/x-pack/plugins/entity_manager/server/routes/entities/index.ts +++ b/x-pack/plugins/entity_manager/server/routes/entities/index.ts @@ -10,7 +10,6 @@ import { deleteEntityDefinitionRoute } from './delete'; import { getEntityDefinitionRoute } from './get'; import { resetEntityDefinitionRoute } from './reset'; import { updateEntityDefinitionRoute } from './update'; -import { searchEntitiesRoute, searchEntitiesPreviewRoute } from '../v2/search'; export const entitiesRoutes = { ...createEntityDefinitionRoute, @@ -18,6 +17,4 @@ export const entitiesRoutes = { ...getEntityDefinitionRoute, ...resetEntityDefinitionRoute, ...updateEntityDefinitionRoute, - ...searchEntitiesRoute, - ...searchEntitiesPreviewRoute, }; diff --git a/x-pack/plugins/entity_manager/server/routes/index.ts b/x-pack/plugins/entity_manager/server/routes/index.ts index e3f2d3a75bbef..487dfe86028d7 100644 --- a/x-pack/plugins/entity_manager/server/routes/index.ts +++ b/x-pack/plugins/entity_manager/server/routes/index.ts @@ -7,10 +7,12 @@ import { enablementRoutes } from './enablement'; import { entitiesRoutes } from './entities'; +import { v2Routes } from './v2'; export const entityManagerRouteRepository = { ...enablementRoutes, ...entitiesRoutes, + ...v2Routes, }; export type EntityManagerRouteRepository = typeof entityManagerRouteRepository; diff --git a/x-pack/plugins/entity_manager/server/routes/v2/index.ts b/x-pack/plugins/entity_manager/server/routes/v2/index.ts new file mode 100644 index 0000000000000..c601ebe988a29 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/routes/v2/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { searchRoutes } from './search'; +import { typeDefinitionRoutes } from './type_definition_routes'; +import { sourceDefinitionRoutes } from './source_definition_routes'; + +export const v2Routes = { + ...searchRoutes, + ...typeDefinitionRoutes, + ...sourceDefinitionRoutes, +}; diff --git a/x-pack/plugins/entity_manager/server/routes/v2/search.ts b/x-pack/plugins/entity_manager/server/routes/v2/search.ts index 451ff7cfff43f..82d0e5e84f2da 100644 --- a/x-pack/plugins/entity_manager/server/routes/v2/search.ts +++ b/x-pack/plugins/entity_manager/server/routes/v2/search.ts @@ -5,62 +5,26 @@ * 2.0. */ -import moment from 'moment'; import { z } from '@kbn/zod'; import { createEntityManagerServerRoute } from '../create_entity_manager_server_route'; -import { entitySourceSchema } from '../../lib/queries'; -import { UnknownEntityType } from '../../lib/entities/errors/unknown_entity_type'; +import { UnknownEntityType } from '../../lib/v2/errors/unknown_entity_type'; +import { searchBySourcesRt, searchByTypeRt } from '../../lib/v2/types'; +import { READ_ENTITIES_PRIVILEGE } from '../../lib/v2/constants'; export const searchEntitiesRoute = createEntityManagerServerRoute({ endpoint: 'POST /internal/entities/v2/_search', + security: { + authz: { + requiredPrivileges: [READ_ENTITIES_PRIVILEGE], + }, + }, params: z.object({ - body: z.object({ - type: z.string(), - metadata_fields: z.optional(z.array(z.string())).default([]), - filters: z.optional(z.array(z.string())).default([]), - start: z - .optional(z.string()) - .default(() => moment().subtract(5, 'minutes').toISOString()) - .refine((val) => moment(val).isValid(), { - message: '[start] should be a date in ISO format', - }), - end: z - .optional(z.string()) - .default(() => moment().toISOString()) - .refine((val) => moment(val).isValid(), { - message: '[end] should be a date in ISO format', - }), - sort: z.optional( - z.object({ - field: z.string(), - direction: z.enum(['ASC', 'DESC']), - }) - ), - limit: z.optional(z.number()).default(10), - }), + body: searchByTypeRt, }), handler: async ({ request, response, params, logger, getScopedClient }) => { try { - const { - type, - start, - end, - limit, - filters, - sort, - metadata_fields: metadataFields, - } = params.body; - const client = await getScopedClient({ request }); - const entities = await client.searchEntities({ - type, - filters, - metadataFields, - start, - end, - sort, - limit, - }); + const entities = await client.v2.searchEntities(params.body); return response.ok({ body: { entities } }); } catch (e) { @@ -77,42 +41,23 @@ export const searchEntitiesRoute = createEntityManagerServerRoute({ export const searchEntitiesPreviewRoute = createEntityManagerServerRoute({ endpoint: 'POST /internal/entities/v2/_search/preview', + security: { + authz: { + requiredPrivileges: [READ_ENTITIES_PRIVILEGE], + }, + }, params: z.object({ - body: z.object({ - sources: z.array(entitySourceSchema), - start: z - .optional(z.string()) - .default(() => moment().subtract(5, 'minutes').toISOString()) - .refine((val) => moment(val).isValid(), { - message: '[start] should be a date in ISO format', - }), - end: z - .optional(z.string()) - .default(() => moment().toISOString()) - .refine((val) => moment(val).isValid(), { - message: '[end] should be a date in ISO format', - }), - sort: z.optional( - z.object({ - field: z.string(), - direction: z.enum(['ASC', 'DESC']), - }) - ), - limit: z.optional(z.number()).default(10), - }), + body: searchBySourcesRt, }), handler: async ({ request, response, params, getScopedClient }) => { - const { sources, start, end, limit, sort } = params.body; - const client = await getScopedClient({ request }); - const entities = await client.searchEntitiesBySources({ - sources, - start, - end, - sort, - limit, - }); + const entities = await client.v2.searchEntitiesBySources(params.body); return response.ok({ body: { entities } }); }, }); + +export const searchRoutes = { + ...searchEntitiesRoute, + ...searchEntitiesPreviewRoute, +}; diff --git a/x-pack/plugins/entity_manager/server/routes/v2/source_definition_routes.ts b/x-pack/plugins/entity_manager/server/routes/v2/source_definition_routes.ts new file mode 100644 index 0000000000000..4fdfa281cfd72 --- /dev/null +++ b/x-pack/plugins/entity_manager/server/routes/v2/source_definition_routes.ts @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from '@kbn/zod'; +import { + CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE, + READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE, +} from '../../lib/v2/constants'; +import { entitySourceDefinitionRt } from '../../lib/v2/types'; +import { createEntityManagerServerRoute } from '../create_entity_manager_server_route'; +import { EntityDefinitionConflict } from '../../lib/v2/errors/entity_definition_conflict'; + +const createSourceDefinitionRoute = createEntityManagerServerRoute({ + endpoint: 'POST /internal/entities/v2/definitions/sources', + security: { + authz: { + requiredPrivileges: [CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE], + }, + }, + params: z.object({ + body: z.object({ + source: entitySourceDefinitionRt, + }), + }), + handler: async ({ request, response, params, getScopedClient }) => { + try { + const client = await getScopedClient({ request }); + const source = await client.v2.storeSourceDefinition(params.body.source); + + return response.created({ + body: { + source, + }, + headers: { + location: `GET /internal/entities/v2/definitions/sources/${source.id}`, + }, + }); + } catch (error) { + if (error instanceof EntityDefinitionConflict) { + response.conflict({ + body: { + message: error.message, + }, + }); + } + + throw error; + } + }, +}); + +const readSourceDefinitionsRoute = createEntityManagerServerRoute({ + endpoint: 'GET /internal/entities/v2/definitions/sources', + security: { + authz: { + requiredPrivileges: [READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE], + }, + }, + handler: async ({ request, response, getScopedClient }) => { + const client = await getScopedClient({ request }); + const sources = await client.v2.readSourceDefinitions(); + + return response.ok({ + body: { + sources, + }, + }); + }, +}); + +export const sourceDefinitionRoutes = { + ...createSourceDefinitionRoute, + ...readSourceDefinitionsRoute, +}; diff --git a/x-pack/plugins/entity_manager/server/routes/v2/type_definition_routes.ts b/x-pack/plugins/entity_manager/server/routes/v2/type_definition_routes.ts new file mode 100644 index 0000000000000..8de41f7caf62f --- /dev/null +++ b/x-pack/plugins/entity_manager/server/routes/v2/type_definition_routes.ts @@ -0,0 +1,78 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from '@kbn/zod'; +import { + CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE, + READ_ENTITY_TYPE_DEFINITION_PRIVILEGE, +} from '../../lib/v2/constants'; +import { entityTypeDefinitionRt } from '../../lib/v2/types'; +import { createEntityManagerServerRoute } from '../create_entity_manager_server_route'; +import { EntityDefinitionConflict } from '../../lib/v2/errors/entity_definition_conflict'; + +const createTypeDefinitionRoute = createEntityManagerServerRoute({ + endpoint: 'POST /internal/entities/v2/definitions/types', + security: { + authz: { + requiredPrivileges: [CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE], + }, + }, + params: z.object({ + body: z.object({ + type: entityTypeDefinitionRt, + }), + }), + handler: async ({ request, response, params, getScopedClient }) => { + try { + const client = await getScopedClient({ request }); + const type = await client.v2.storeTypeDefinition(params.body.type); + + return response.created({ + body: { + type, + }, + headers: { + location: `GET /internal/entities/v2/definitions/types/${type.id}`, + }, + }); + } catch (error) { + if (error instanceof EntityDefinitionConflict) { + return response.conflict({ + body: { + message: error.message, + }, + }); + } + + throw error; + } + }, +}); + +const readTypeDefinitionsRoute = createEntityManagerServerRoute({ + endpoint: 'GET /internal/entities/v2/definitions/types', + security: { + authz: { + requiredPrivileges: [READ_ENTITY_TYPE_DEFINITION_PRIVILEGE], + }, + }, + handler: async ({ request, response, getScopedClient }) => { + const client = await getScopedClient({ request }); + const types = await client.v2.readTypeDefinitions(); + + return response.ok({ + body: { + types, + }, + }); + }, +}); + +export const typeDefinitionRoutes = { + ...createTypeDefinitionRoute, + ...readTypeDefinitionsRoute, +}; diff --git a/x-pack/plugins/entity_manager/server/types.ts b/x-pack/plugins/entity_manager/server/types.ts index cd7a4a49b9882..0841ba8a2c950 100644 --- a/x-pack/plugins/entity_manager/server/types.ts +++ b/x-pack/plugins/entity_manager/server/types.ts @@ -12,6 +12,7 @@ import { EncryptedSavedObjectsPluginStart, } from '@kbn/encrypted-saved-objects-plugin/server'; import { LicensingPluginStart } from '@kbn/licensing-plugin/server'; +import { FeaturesPluginSetup } from '@kbn/features-plugin/server'; import { EntityManagerConfig } from '../common/config'; export interface EntityManagerServerSetup { @@ -29,6 +30,7 @@ export interface ElasticsearchAccessorOptions { export interface EntityManagerPluginSetupDependencies { encryptedSavedObjects: EncryptedSavedObjectsPluginSetup; + features: FeaturesPluginSetup; } export interface EntityManagerPluginStartDependencies { diff --git a/x-pack/plugins/entity_manager/tsconfig.json b/x-pack/plugins/entity_manager/tsconfig.json index 2ef8551f373fd..4c75ac101f6ad 100644 --- a/x-pack/plugins/entity_manager/tsconfig.json +++ b/x-pack/plugins/entity_manager/tsconfig.json @@ -36,5 +36,7 @@ "@kbn/licensing-plugin", "@kbn/core-saved-objects-server", "@kbn/es-types", + "@kbn/apm-utils", + "@kbn/features-plugin", ] } diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx b/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx index 59740fb8f8135..d628ab306a1b1 100644 --- a/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx +++ b/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx @@ -185,7 +185,7 @@ export function EntityManagerOverviewPage() { .filter( (source) => source.index_patterns.length > 0 && source.identity_fields.length > 0 ) - .map((source) => ({ ...source, type: entityType })), + .map((source) => ({ ...source, type_id: entityType })), }, }, } diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts index 72d650846fc55..dc4e9d7af2ff6 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/entity_store_data_client.ts @@ -132,7 +132,7 @@ export class EntityStoreDataClient { this.esClient = clusterClient.asCurrentUser; this.entityClient = new EntityClient({ - esClient: this.esClient, + clusterClient, soClient, logger, }); diff --git a/x-pack/test/api_integration/apis/features/features/features.ts b/x-pack/test/api_integration/apis/features/features/features.ts index 4ded1782c9086..7541b2171b2cb 100644 --- a/x-pack/test/api_integration/apis/features/features/features.ts +++ b/x-pack/test/api_integration/apis/features/features/features.ts @@ -136,6 +136,7 @@ export default function ({ getService }: FtrProviderContext) { 'securitySolutionCasesV2', 'fleet', 'fleetv2', + 'entityManager', ].sort() ); }); @@ -186,6 +187,7 @@ export default function ({ getService }: FtrProviderContext) { 'securitySolutionCasesV2', 'fleet', 'fleetv2', + 'entityManager', ]; const features = body.filter( diff --git a/x-pack/test/api_integration/apis/security/privileges.ts b/x-pack/test/api_integration/apis/security/privileges.ts index dc84f6c33d200..0d34480910a25 100644 --- a/x-pack/test/api_integration/apis/security/privileges.ts +++ b/x-pack/test/api_integration/apis/security/privileges.ts @@ -180,6 +180,7 @@ export default function ({ getService }: FtrProviderContext) { guidedOnboardingFeature: ['all', 'read', 'minimal_all', 'minimal_read'], aiAssistantManagementSelection: ['all', 'read', 'minimal_all', 'minimal_read'], inventory: ['all', 'read', 'minimal_all', 'minimal_read'], + entityManager: ['all', 'read', 'minimal_all', 'minimal_read'], }, reserved: ['fleet-setup', 'ml_user', 'ml_admin', 'ml_apm_user', 'monitoring'], }; diff --git a/x-pack/test/api_integration/apis/security/privileges_basic.ts b/x-pack/test/api_integration/apis/security/privileges_basic.ts index 2bbd70fcf730d..94cfe21cbbd02 100644 --- a/x-pack/test/api_integration/apis/security/privileges_basic.ts +++ b/x-pack/test/api_integration/apis/security/privileges_basic.ts @@ -63,6 +63,7 @@ export default function ({ getService }: FtrProviderContext) { aiAssistantManagementSelection: ['all', 'read', 'minimal_all', 'minimal_read'], inventory: ['all', 'read', 'minimal_all', 'minimal_read'], dataQuality: ['all', 'read', 'minimal_all', 'minimal_read'], + entityManager: ['all', 'read', 'minimal_all', 'minimal_read'], }, global: ['all', 'read'], space: ['all', 'read'], @@ -265,6 +266,7 @@ export default function ({ getService }: FtrProviderContext) { guidedOnboardingFeature: ['all', 'read', 'minimal_all', 'minimal_read'], aiAssistantManagementSelection: ['all', 'read', 'minimal_all', 'minimal_read'], inventory: ['all', 'read', 'minimal_all', 'minimal_read'], + entityManager: ['all', 'read', 'minimal_all', 'minimal_read'], }, reserved: ['fleet-setup', 'ml_user', 'ml_admin', 'ml_apm_user', 'monitoring'], }; diff --git a/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts b/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts index 4a43c3831627c..a74fbf6b75383 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts +++ b/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts @@ -100,6 +100,7 @@ export default function ({ getService }: FtrProviderContext) { savedObjectsManagement: 1, savedQueryManagement: 0, dataQuality: 0, + entityManager: 0, }); }); From 7688492165724d1d1b065f51b1a8bab363192085 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arturo=20Lidue=C3=B1a?= Date: Wed, 4 Dec 2024 14:56:28 +0100 Subject: [PATCH 024/141] Enhance access query logic to handle user ID and name conditions (#202833) [Obs AI Assistant] Fetch user instructions and conversation using user id instead of user name - https://github.com/elastic/kibana/issues/192701 To avoid potential collisions when fetching data, we should query for the user id instead of the user name when getting instructions or conversations. **If user.id is provided:** - Matches documents with user.id equal to the provided value. - Falls back to user.name when user.id does not exist in the document. **If user.id is not provided:** - Matches only documents with user.name. ## Summary Summarize your PR. If it involves visual changes include a screenshot or gif. ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [ ] 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 - [ ] 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 was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations. - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../server/service/util/get_access_query.ts | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_access_query.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_access_query.ts index 6b654731a264b..b517273630f56 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_access_query.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/util/get_access_query.ts @@ -17,12 +17,7 @@ export function getAccessQuery({ filter: [ { bool: { - should: [ - { term: { public: true } }, - ...(user - ? [{ term: user.id ? { 'user.id': user.id } : { 'user.name': user.name } }] - : []), - ], + should: [{ term: { public: true } }, ...getUserAccessFilters(user)], minimum_should_match: 1, }, }, @@ -51,3 +46,23 @@ export function getAccessQuery({ }, ]; } + +function getUserAccessFilters(user?: { name: string; id?: string }) { + if (!user) { + return []; + } + + if (user.id) { + return [ + { term: { 'user.id': user.id } }, + { + bool: { + must_not: { exists: { field: 'user.id' } }, + must: { term: { 'user.name': user.name } }, + }, + }, + ]; + } + + return [{ term: { 'user.name': user.name } }]; +} From 68dafb7f4895dd252566e515d4a29e25b64c387a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georgiana-Andreea=20Onolea=C8=9B=C4=83?= Date: Wed, 4 Dec 2024 16:05:38 +0200 Subject: [PATCH 025/141] [ResponseOps][Alerting] Show missing Slack connectors in the new rule form (#202315) Closes https://github.com/elastic/kibana/issues/201673 ## Summary - changed the logic to create the connectorsMap (which gives us the connector type filters): - Only the '**slack'** and **'slack API'** connector types include a `subtype` array. I updated the logic so that when the `actionTypeModel` has **hideInUi** set to true (indicating a 'slack API' connector), it searches for a **'slack'** connector in the subtype. If a **'slack'** connector is found, `otherActionTypeId` is set to 'slack'; otherwise, it is set to `undefined`. This effectively "maps" the 'slack API' type to the 'slack' type within the `connectorsMap` - changed the logic to create the `filteredConnectors` (which gives us the connectors to display, filtered after the type): - The **selectedConnectorType** can only be '**slack'** because, in the `connectorsMap`, the '**slack API'** option has already been mapped to '**slack'** and is no longer included as a separate type. - If the `subtype` includes **'slack',** the filter will return connectors with `actionTypeId` of either 'slack' or 'slack API'. - This ensures that both 'slack' and 'slack API' connectors are displayed, as 'slack API' is associated with the 'slack' type through the subtype. https://github.com/user-attachments/assets/9cccaf42-b6db-4eea-b2fd-8f37f0e24745 ## Release note Fix Slack API connectors not displayed under Slack connector type when adding new connector to rule. --- .../rule_actions_connectors_modal.test.tsx | 86 +++++++++++++++++++ .../rule_actions_connectors_modal.tsx | 37 +++++--- 2 files changed, 111 insertions(+), 12 deletions(-) diff --git a/packages/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.test.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.test.tsx index aaf2ff0658f5d..d8c183820d3cb 100644 --- a/packages/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.test.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.test.tsx @@ -195,6 +195,92 @@ describe('ruleActionsConnectorsModal', () => { expect(screen.queryByText('connector2')).not.toBeInTheDocument(); }); + test('should not render connector filter if hideInUi is true', async () => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register( + getActionTypeModel('1', { + id: 'actionType-1', + subtype: [ + { id: 'actionType-1', name: 'connector-1' }, + { id: 'actionType-2', name: 'connector-2' }, + ], + }) + ); + actionTypeRegistry.register( + getActionTypeModel('2', { + id: 'actionType-2', + hideInUi: true, + subtype: [ + { id: 'actionType-1', name: 'connector-1' }, + { id: 'actionType-2', name: 'connector-2' }, + ], + }) + ); + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: mockConnectors, + connectorTypes: mockActionTypes, + }); + + render( + + ); + const filterButtonGroup = screen.getByTestId('ruleActionsConnectorsModalFilterButtonGroup'); + expect(within(filterButtonGroup).getByText('actionType: 1')).toBeInTheDocument(); + expect(within(filterButtonGroup).queryByText('actionType: 2')).not.toBeInTheDocument(); + expect(within(filterButtonGroup).getByText('All')).toBeInTheDocument(); + + expect(screen.getAllByTestId('ruleActionsConnectorsModalFilterButton').length).toEqual(2); + }); + + test('should display connectors if hideInUi is true and it has subtype', async () => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register( + getActionTypeModel('1', { + id: 'actionType-1', + subtype: [ + { id: 'actionType-1', name: 'connector-1' }, + { id: 'actionType-2', name: 'connector-2' }, + ], + }) + ); + actionTypeRegistry.register( + getActionTypeModel('2', { + id: 'actionType-2', + hideInUi: true, + subtype: [ + { id: 'actionType-1', name: 'connector-1' }, + { id: 'actionType-2', name: 'connector-2' }, + ], + }) + ); + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: mockConnectors, + connectorTypes: mockActionTypes, + }); + + render( + + ); + const filterButtonGroup = screen.getByTestId('ruleActionsConnectorsModalFilterButtonGroup'); + + await userEvent.click(within(filterButtonGroup).getByText('actionType: 1')); + expect(screen.getAllByTestId('ruleActionsConnectorsModalCard').length).toEqual(2); + expect(screen.getByText('connector-1')).toBeInTheDocument(); + expect(screen.getByText('connector-2')).toBeInTheDocument(); + }); + test('should not render connector if actionsParamsField doesnt exist', () => { const actionTypeRegistry = new TypeRegistry(); actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); diff --git a/packages/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.tsx b/packages/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.tsx index 64db54845530a..d411e468a8a83 100644 --- a/packages/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.tsx +++ b/packages/response-ops/rule_form/src/rule_actions/rule_actions_connectors_modal.tsx @@ -77,9 +77,7 @@ export const RuleActionsConnectorsModal = (props: RuleActionsConnectorsModalProp if (!actionType) { return false; } - if (actionTypeModel.hideInUi) { - return false; - } + if (!actionTypeModel.actionParamsFields) { return false; } @@ -92,6 +90,7 @@ export const RuleActionsConnectorsModal = (props: RuleActionsConnectorsModalProp if (!actionType.enabledInConfig && !checkEnabledResult.isEnabled) { return false; } + return true; }); }, [connectors, connectorTypes, preconfiguredConnectors, actionTypeRegistry]); @@ -119,29 +118,43 @@ export const RuleActionsConnectorsModal = (props: RuleActionsConnectorsModalProp const connectorsMap: ConnectorsMap | null = useMemo(() => { return availableConnectors.reduce((result, { actionTypeId }) => { - if (result[actionTypeId]) { - result[actionTypeId].total += 1; + const actionTypeModel = actionTypeRegistry.get(actionTypeId); + const subtype = actionTypeModel.subtype; + + const shownActionTypeId = actionTypeModel.hideInUi + ? subtype?.filter((type) => type.id !== actionTypeId)[0].id + : undefined; + + const currentActionTypeId = shownActionTypeId ? shownActionTypeId : actionTypeId; + + if (result[currentActionTypeId]) { + result[currentActionTypeId].total += 1; } else { - result[actionTypeId] = { - actionTypeId, + result[currentActionTypeId] = { + actionTypeId: currentActionTypeId, total: 1, - name: connectorTypes.find(({ id }) => actionTypeId === id)?.name || '', + name: connectorTypes.find(({ id }) => id === currentActionTypeId)?.name || '', }; } + return result; }, {}); - }, [availableConnectors, connectorTypes]); + }, [availableConnectors, connectorTypes, actionTypeRegistry]); const filteredConnectors = useMemo(() => { return availableConnectors .filter(({ actionTypeId }) => { + const subtype = actionTypeRegistry.get(actionTypeId).subtype?.map((type) => type.id); + if (selectedConnectorType === 'all' || selectedConnectorType === '') { return true; } - if (selectedConnectorType === actionTypeId) { - return true; + + if (subtype?.includes(selectedConnectorType)) { + return subtype.includes(actionTypeId); } - return false; + + return selectedConnectorType === actionTypeId; }) .filter(({ actionTypeId, name }) => { const trimmedSearchValue = searchValue.trim().toLocaleLowerCase(); From 529585b240360ea9b68cc1a531d8f37585d1d64a Mon Sep 17 00:00:00 2001 From: Mark Hopkin Date: Wed, 4 Dec 2024 14:06:56 +0000 Subject: [PATCH 026/141] [Entity Analytics][Entity Store] Clear error on second entity engine init API call (#202903) ## Summary If the first call to init an entity engine fails, we add the `error` property to the engine status, if we then call the API a second time this error was not being wiped. This PR resets the error on the second call. ### Test steps - Do not visit the UI of a kibana so that the security default data view does not exist - Call the init API for an entity engine e,g host - Call the engine status API, notice the status has an error - Visait the security solution UI and wait for the data view to be created - Re-call the init API and notice the error has gone --- .../entity_store/saved_object/engine_descriptor.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/saved_object/engine_descriptor.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/saved_object/engine_descriptor.ts index cfaea1b1da0ff..a3c7a7d0266a1 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/saved_object/engine_descriptor.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/entity_store/saved_object/engine_descriptor.ts @@ -49,6 +49,7 @@ export class EngineDescriptorClient { const old = engineDescriptor.saved_objects[0].attributes; const update = { ...old, + error: undefined, // if the engine is being re-initialized, clear any previous error status: ENGINE_STATUS.INSTALLING, filter, fieldHistoryLength, From ea7b743fb4dcc677c139399b5be67b162ebe283d Mon Sep 17 00:00:00 2001 From: Elena Stoeva <59341489+ElenaStoeva@users.noreply.github.com> Date: Wed, 4 Dec 2024 14:48:16 +0000 Subject: [PATCH 027/141] [Console] Add highlighting for painless language (#202695) Closes https://github.com/elastic/kibana/issues/201672?reload=1?reload=1 ## Summary This PR adds existing painless rules to the console language so that the painless scripts are correctly highlighted. We are adding a painless starting rule that matches a string `"*_script"`, `"inline"`, or `"source"`, followed by a triple quote, in order to prevent clashing with the existing rules for triple-quote strings. Example request with a script: ``` POST _ingest/pipeline/_simulate { "pipeline": { "processors": [ { "script": { "description": "Extract 'tags' from 'env' field", "lang": "painless", "source": """ String[] envSplit = ctx['env'].splitOnToken(params['delimiter']); ArrayList tags = new ArrayList(); tags.add(envSplit[params['position']].trim()); ctx['tags'] = tags; """, "params": { "delimiter": "-", "position": 1 } } } ] }, "docs": [ { "_source": { "env": "es01-prod" } } ] } ``` Screenshot 2024-12-03 at 12 02 52 --- .../console/lexer_rules/nested_painless.ts | 71 +++++++++++++++++++ .../src/console/lexer_rules/shared.ts | 14 ++++ 2 files changed, 85 insertions(+) create mode 100644 packages/kbn-monaco/src/console/lexer_rules/nested_painless.ts diff --git a/packages/kbn-monaco/src/console/lexer_rules/nested_painless.ts b/packages/kbn-monaco/src/console/lexer_rules/nested_painless.ts new file mode 100644 index 0000000000000..8b4fcda56a64a --- /dev/null +++ b/packages/kbn-monaco/src/console/lexer_rules/nested_painless.ts @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { lexerRules as painlessLexerRules } from '../../painless/lexer_rules'; + +/* + * This rule is used inside json root to start a painless highlighting sequence + */ +export const buildPainlessStartRule = (painlessRoot: string = 'painless_root') => { + return [ + /("(?:[^"]*_)?script"|"inline"|"source")(\s*?)(:)(\s*?)(""")/, + [ + 'variable', + 'whitespace', + 'punctuation.colon', + 'whitespace', + { + token: 'punctuation', + next: `@${painlessRoot}`, + }, + ], + ]; +}; + +/* + * This function creates a group of rules needed for painless highlighting in console. + * It reuses the lexer rules from the "painless" language, but since not all rules are referenced in the root + * tokenizer and to avoid conflicts with existing console rules, only selected rules are used. + */ +export const buildPainlessRules = (painlessRoot: string = 'painless_root') => { + // eslint-disable-next-line @typescript-eslint/naming-convention + const { root, comment, string_dq, string_sq } = painlessLexerRules.tokenizer; + return { + [painlessRoot]: [ + // the rule to end painless highlighting and get back to the previous tokenizer state + [ + /"""/, + { + token: 'punctuation', + next: '@pop', + }, + ], + ...root, + ], + comment, + string_dq, + string_sq, + }; +}; + +/* + * These language attributes need to be added to the console language definition for painless tokenizer + * to work correctly. + */ +export const painlessLanguageAttributes = { + keywords: painlessLexerRules.keywords, + primitives: painlessLexerRules.primitives, + constants: painlessLexerRules.constants, + operators: painlessLexerRules.operators, + symbols: painlessLexerRules.symbols, + digits: painlessLexerRules.digits, + octaldigits: painlessLexerRules.octaldigits, + binarydigits: painlessLexerRules.binarydigits, + hexdigits: painlessLexerRules.hexdigits, +}; diff --git a/packages/kbn-monaco/src/console/lexer_rules/shared.ts b/packages/kbn-monaco/src/console/lexer_rules/shared.ts index 62c8a28d31c65..b508d5954a3f7 100644 --- a/packages/kbn-monaco/src/console/lexer_rules/shared.ts +++ b/packages/kbn-monaco/src/console/lexer_rules/shared.ts @@ -8,6 +8,11 @@ */ import { buildSqlRules, buildSqlStartRule, sqlLanguageAttributes } from './nested_sql'; +import { + buildPainlessRules, + buildPainlessStartRule, + painlessLanguageAttributes, +} from './nested_painless'; import { monaco } from '../../..'; import { globals } from '../../common/lexer_rules'; import { buildXjsonRules } from '../../xjson/lexer_rules/xjson'; @@ -16,11 +21,13 @@ export const consoleSharedLanguageConfiguration: monaco.languages.LanguageConfig brackets: [ ['{', '}'], ['[', ']'], + ['(', ')'], ['"""', '"""\n'], ], autoClosingPairs: [ { open: '{', close: '}' }, { open: '[', close: ']' }, + { open: '(', close: ')' }, { open: '"', close: '"' }, { open: '"""', close: '"""' }, ], @@ -100,10 +107,13 @@ xjsonRules.json_root = [ matchToken('variable.template', /("\${\w+}")/), // @ts-expect-error include a rule to start sql highlighting buildSqlStartRule(), + // @ts-expect-error include a rule to start painless highlighting + buildPainlessStartRule(), ...xjsonRules.json_root, ]; const sqlRules = buildSqlRules(); +const painlessRules = buildPainlessRules(); /* Lexer rules that are shared between the Console editor and the Console output panel. */ @@ -111,6 +121,8 @@ export const consoleSharedLexerRules: monaco.languages.IMonarchLanguage = { ...(globals as any), defaultToken: 'invalid', ...sqlLanguageAttributes, + ...painlessLanguageAttributes, + keywords: [...sqlLanguageAttributes.keywords, ...painlessLanguageAttributes.keywords], tokenizer: { root: [ // warning comment @@ -138,5 +150,7 @@ export const consoleSharedLexerRules: monaco.languages.IMonarchLanguage = { ...xjsonRules, // include sql rules ...sqlRules, + // include painless rules + ...painlessRules, }, }; From a954fd19c842db9a74817646b2a646fe134dd9a8 Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Wed, 4 Dec 2024 15:48:38 +0100 Subject: [PATCH 028/141] Fix agents for on-merge AI-Infra test suite (#202946) ## Summary Add missing explicit agent-targeting rules for newly added pipeline step. --- .buildkite/pipelines/on_merge.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.buildkite/pipelines/on_merge.yml b/.buildkite/pipelines/on_merge.yml index adcd7ef37e6ac..2f1562ef1d741 100644 --- a/.buildkite/pipelines/on_merge.yml +++ b/.buildkite/pipelines/on_merge.yml @@ -179,6 +179,9 @@ steps: timeout_in_minutes: 50 parallelism: 1 agents: + image: family/kibana-ubuntu-2004 + imageProject: elastic-images-prod + provider: gcp machineType: n2-standard-4 preemptible: true retry: From 3acd91cb7a9b08a2162c634148065e2296de29b5 Mon Sep 17 00:00:00 2001 From: Bena Kansara <69037875+benakansara@users.noreply.github.com> Date: Wed, 4 Dec 2024 15:57:05 +0100 Subject: [PATCH 029/141] [RCA] [Events timeline] Show all events (#202235) As part of https://github.com/elastic/kibana/issues/200799, this PR removes filter (previously the filter was based on any group by field, which was changed to focus only on `service.name` for kubecon demo) so that all events are shown on events timeline. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Faisal Kanout --- .../components/events_timeline/events_timeline.tsx | 12 ------------ .../investigate_app/tsconfig.json | 1 - 2 files changed, 13 deletions(-) diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/events_timeline/events_timeline.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/events_timeline/events_timeline.tsx index c3f92139bd936..45b245f68b4b0 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/events_timeline/events_timeline.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/events_timeline/events_timeline.tsx @@ -11,9 +11,6 @@ import { Chart, Axis, AreaSeries, Position, ScaleType, Settings } from '@elastic import { useActiveCursor } from '@kbn/charts-plugin/public'; import { EuiSkeletonText } from '@elastic/eui'; import { getBrushData } from '@kbn/observability-utils-browser/chart/utils'; -import { Group } from '@kbn/observability-alerting-rule-utils'; -import { ALERT_GROUP } from '@kbn/rule-data-utils'; -import { SERVICE_NAME } from '@kbn/observability-shared-plugin/common'; import { AnnotationEvent } from './annotation_event'; import { TIME_LINE_THEME } from './timeline_theme'; import { useFetchEvents } from '../../../../hooks/use_fetch_events'; @@ -27,19 +24,10 @@ export const EventsTimeLine = () => { const baseTheme = dependencies.start.charts.theme.useChartsBaseTheme(); const { globalParams, updateInvestigationParams } = useInvestigation(); - const { alert } = useInvestigation(); - - const filter = useMemo(() => { - const group = (alert?.[ALERT_GROUP] as unknown as Group[])?.find( - ({ field }) => field === SERVICE_NAME - ); - return group ? `{"${SERVICE_NAME}":"${alert?.[SERVICE_NAME]}"}` : ''; - }, [alert]); const { data: events, isLoading } = useFetchEvents({ rangeFrom: globalParams.timeRange.from, rangeTo: globalParams.timeRange.to, - filter, }); const chartRef = useRef(null); diff --git a/x-pack/plugins/observability_solution/investigate_app/tsconfig.json b/x-pack/plugins/observability_solution/investigate_app/tsconfig.json index 0851a13367091..bc67b591a57b8 100644 --- a/x-pack/plugins/observability_solution/investigate_app/tsconfig.json +++ b/x-pack/plugins/observability_solution/investigate_app/tsconfig.json @@ -66,7 +66,6 @@ "@kbn/calculate-auto", "@kbn/ml-random-sampler-utils", "@kbn/charts-plugin", - "@kbn/observability-alerting-rule-utils", "@kbn/observability-utils-browser", "@kbn/usage-collection-plugin", "@kbn/inference-common", From b9d48690b7386dde357b468a92c6d64946f53dce Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Wed, 4 Dec 2024 10:09:30 -0500 Subject: [PATCH 030/141] [Response Ops][Alerting] Alerting event logger should not throw error when ad hoc task runner cannot load saved object (#201637) ## Summary The ad-hoc task runner loads the `ad_hoc_run` saved object that contains rule information when it first starts running. If the saved object cannot be loaded due to saved object not found (likely because the SO was deleted), the alerting event logger was throwing an error because it didn't have the rule information to populate the `execute-backfill` event. This PR fixes it so we're not throwing an error and writes the `execute-backfill` event with whatever information is available. ## To Verify 1. Modify the ad-hoc task runner to load a random saved object ``` --- a/x-pack/plugins/alerting/server/task_runner/ad_hoc_task_runner.ts +++ b/x-pack/plugins/alerting/server/task_runner/ad_hoc_task_runner.ts @@ -294,7 +294,8 @@ export class AdHocTaskRunner implements CancellableTask { const adHocRunSO: SavedObject = await this.context.encryptedSavedObjectsClient.getDecryptedAsInternalUser( AD_HOC_RUN_SAVED_OBJECT_TYPE, - adHocRunParamsId, + `abcdefgh`, + // adHocRunParamsId, { namespace } ``` 2. Create a detection rule and then schedule backfill run for it. You should see the execution fail with `Executing ad hoc run with id \"7401d1f1-73fc-4483-acd5-edf6180028ce\" has resulted in Error: Saved object [ad_hoc_run_params/abcdefgh] not found` but you should NOT see any errors from task manager like `Task ad_hoc_run-backfill "40fd4c52-411f-462c-b285-87e33520bd5b" failed: Error: AlertingEventLogger not initialized` Co-authored-by: Elastic Machine --- .../alerting_event_logger.test.ts | 62 +++++++++++++++++++ .../alerting_event_logger.ts | 11 ++-- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts b/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts index 082d5ea6381df..a206f4e058eed 100644 --- a/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts +++ b/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.test.ts @@ -1148,6 +1148,68 @@ describe('AlertingEventLogger', () => { expect(eventLogger.logEvent).toHaveBeenCalledWith(loggedEvent); }); + test('should set fields from backfill even when no rule data is provided', () => { + alertingEventLogger.initialize({ + context: backfillContext, + runDate, + type: executionType.BACKFILL, + }); + + alertingEventLogger.done({ + backfill: { + id: 'abc', + start: '2024-03-13T00:00:00.000Z', + interval: '1h', + }, + status: { + lastExecutionDate: new Date('2022-05-05T15:59:54.480Z'), + status: 'error', + error: { + reason: RuleExecutionStatusErrorReasons.Execute, + message: 'something went wrong', + }, + }, + }); + + const event = initializeExecuteBackfillRecord(backfillContextWithScheduleDelay, [adHocRunSO]); + const loggedEvent = { + ...event, + event: { + ...event?.event, + outcome: 'failure', + reason: RuleExecutionStatusErrorReasons.Execute, + }, + error: { + message: 'something went wrong', + }, + message: 'def: execution failed', + kibana: { + ...event.kibana, + alert: { + ...event.kibana?.alert, + rule: { + ...event.kibana?.alert?.rule, + execution: { + ...event.kibana?.alert?.rule?.execution, + backfill: { + id: 'abc', + start: '2024-03-13T00:00:00.000Z', + interval: '1h', + }, + }, + }, + }, + alerting: { + outcome: 'failure', + status: 'error', + }, + }, + }; + + expect(alertingEventLogger.getEvent()).toEqual(loggedEvent); + expect(eventLogger.logEvent).toHaveBeenCalledWith(loggedEvent); + }); + test('should set fields from execution metrics if provided', () => { alertingEventLogger.initialize({ context: ruleContext, runDate, ruleData }); alertingEventLogger.done({ diff --git a/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.ts b/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.ts index 1607f6090b10c..d344a8f2a240b 100644 --- a/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.ts +++ b/x-pack/plugins/alerting/server/lib/alerting_event_logger/alerting_event_logger.ts @@ -346,7 +346,7 @@ export class AlertingEventLogger { } public done({ status, metrics, timings, backfill }: DoneOpts) { - if (!this.isInitialized || !this.event || !this.context || !this.ruleData) { + if (!this.isInitialized || !this.event || !this.context) { throw new Error('AlertingEventLogger not initialized'); } @@ -360,16 +360,15 @@ export class AlertingEventLogger { updateEvent(this.event, { status: status.status }); if (status.error) { + const message = this.ruleData + ? `${this.ruleData.type?.id}:${this.context.savedObjectId}: execution failed` + : `${this.context.savedObjectId}: execution failed`; updateEvent(this.event, { outcome: 'failure', alertingOutcome: 'failure', reason: status.error?.reason || 'unknown', error: this.event?.error?.message || status.error.message, - ...(this.event.message && this.event.event?.outcome === 'failure' - ? {} - : { - message: `${this.ruleData.type?.id}:${this.context.savedObjectId}: execution failed`, - }), + ...(this.event.message && this.event.event?.outcome === 'failure' ? {} : { message }), }); } else { if (status.warning) { From 5ade99c80b21912c0942d7d494f2b3b3e533a13b Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Wed, 4 Dec 2024 16:25:09 +0100 Subject: [PATCH 031/141] [skip CI] [ftr] add migration steps for deployment-agnostic tests (#202913) ## Summary This PR adds example of tests, that doesn't meet deployment-agnostic criteria. I also added steps explaining how to migrate existing tests to DA. --- .../deployment_agnostic/README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/x-pack/test/api_integration/deployment_agnostic/README.md b/x-pack/test/api_integration/deployment_agnostic/README.md index 3bc1c70dda1ab..6064d52cdcf6b 100644 --- a/x-pack/test/api_integration/deployment_agnostic/README.md +++ b/x-pack/test/api_integration/deployment_agnostic/README.md @@ -9,6 +9,12 @@ A deployment-agnostic API integration test is a test suite that fulfills the fol A deployment-agnostic test should be loaded in stateful and at least 1 serverless FTR config files. +## Tests, that are not deployment-agnostic: +- tests verifying Kibana behavior under a basic license. +- tests dependent on ES/Kibana server arguments, that are not set in Elastic Cloud +- tests requiring a custom plugin to be loaded specifically for testing purposes. +- tests dependent on varying user privileges between serverless and stateful environments. + ## Tests Design Requirements A deployment-agnostic test is contained within a single test file and always utilizes the [DeploymentAgnosticFtrProviderContext](https://github.com/elastic/kibana/blob/main/x-pack/test/api_integration/deployment_agnostic/ftr_provider_context.d.ts) to load compatible FTR services. A compatible FTR service must support: @@ -243,3 +249,15 @@ node scripts/functional_test_runner --config x-pack/test/api_integration/deploym Since deployment-agnostic tests are designed to run both locally and on MKI/Cloud, we believe no extra tagging is required. If a test is not working on MKI/Cloud or both, there is most likely an issue with the FTR service or the configuration file it uses. When a test fails on CI, automation will apply `.skip` to the top-level describe block. This means the test will be skipped in **both serverless and stateful environments**. If a test is unstable in a specific environment only, it is probably a sign that the test is not truly deployment-agnostic. + +## Migrating existing tests +If your tests align with the outlined criteria and requirements, you can migrate them to deployment-agnostic by following these steps: + +1. Move your tests to the `x-pack/test/api_integration/deployment_agnostic/apis/` directory. +2. Update each test file to use the `DeploymentAgnosticFtrProviderContext` context and load the required FTR services it provides. +3. Ensure the `roleScopedSupertest` or `samlAuth` service is used instead for `supertest` for authentication and test API calls. +4. Remove all usage of the `supertest` service. It is authenticated as system index superuser and often causes test failures on Cloud, where priveleges are more strict. +5. Avoid modifying `config` files, as this could disrupt test runs in Cloud environments. +6. Include your tests in both the platform and at least one solution index file. +7. Execute your tests locally against a local environment. +8. Verify your tests by running them locally against a real MKI project and an ESS deployment to ensure full compatibility. From 1f7788ae6ffe3fb5e651a514e476459e9bc917c0 Mon Sep 17 00:00:00 2001 From: Sonia Sanz Vivas Date: Wed, 4 Dec 2024 16:53:36 +0100 Subject: [PATCH 032/141] Check for indices before enabling get search profile in serverless (#201630) Closes [#195342](https://github.com/elastic/kibana/issues/195342) ## Summary In serverless, the default query for the search profiler fails if there is not indices. For avoiding this error, when there are no indices present, this PR disabled the "Profile" button and add a tooltip explaining why it is disabled. ### New strings This is the tooltip for string verification @kibana-docs [[Code](https://github.com/elastic/kibana/pull/201630/commits/5832a76683ad0cf55558655ca5981d623f344b72?diff=unified&w=0#diff-bf48cd9834b39a2a1634680225fc63c9a4ddb3ca881d9120f648006ad0277046R154-R1552?diff=unified&w=0#diff-bf48cd9834b39a2a1634680225fc63c9a4ddb3ca881d9120f648006ad0277046R155)]: Screenshot 2024-11-25 at 16 15 08 ### How to test * Run Kibana in serverless * Go to Index Management and verify you haven't indices (or delete them if you do have indices). * Go to Dev Tools and click the Search Profiler tab. Verify that the button is disabled and the tooltip displayed if you hover over it. * Go back to Index Management and create one or more indices. * Go back to Dev Tools > Search Profiler. Now the button should be enabled and the profile should be created if you click it. ### Demo https://github.com/user-attachments/assets/9bda072e-7897-4418-a906-14807e736c44 ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [ ] 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 - [ ] 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 was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations. - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Elastic Machine --- .../searchprofiler/common/constants.ts | 2 + .../profile_query_editor.tsx | 50 ++++++++++++++----- .../public/application/hooks/index.ts | 1 + .../application/hooks/use_has_indices.ts | 22 ++++++++ .../searchprofiler/server/routes/profile.ts | 45 ++++++++++++++++- .../apis/management/index_management/index.ts | 1 + .../index_management/searchprofiler.ts | 21 ++++++++ .../common/dev_tools/search_profiler.ts | 2 + 8 files changed, 130 insertions(+), 14 deletions(-) create mode 100644 x-pack/plugins/searchprofiler/public/application/hooks/use_has_indices.ts create mode 100644 x-pack/test/api_integration/apis/management/index_management/searchprofiler.ts diff --git a/x-pack/plugins/searchprofiler/common/constants.ts b/x-pack/plugins/searchprofiler/common/constants.ts index a50ed281c2bd0..0d586e9b1fb68 100644 --- a/x-pack/plugins/searchprofiler/common/constants.ts +++ b/x-pack/plugins/searchprofiler/common/constants.ts @@ -9,6 +9,8 @@ import { LicenseType } from '@kbn/licensing-plugin/common/types'; const basicLicense: LicenseType = 'basic'; +export const API_BASE_PATH = '/api/searchprofiler'; + /** @internal */ export const PLUGIN = Object.freeze({ id: 'searchprofiler', diff --git a/x-pack/plugins/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx b/x-pack/plugins/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx index a88f1040caa3a..d80cbc4f0394d 100644 --- a/x-pack/plugins/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx +++ b/x-pack/plugins/searchprofiler/public/application/components/profile_query_editor/profile_query_editor.tsx @@ -16,11 +16,12 @@ import { EuiFlexGroup, EuiSpacer, EuiFlexItem, + EuiToolTip, } from '@elastic/eui'; import { decompressFromEncodedURIComponent } from 'lz-string'; -import { useRequestProfile } from '../../hooks'; +import { useHasIndices, useRequestProfile } from '../../hooks'; import { useAppContext } from '../../contexts/app_context'; import { useProfilerActionContext } from '../../contexts/profiler_context'; import { Editor, type EditorProps } from './editor'; @@ -46,6 +47,8 @@ export const ProfileQueryEditor = memo(() => { const { getLicenseStatus, notifications, location } = useAppContext(); + const { data: indicesData, isLoading, error: indicesDataError } = useHasIndices(); + const queryParams = new URLSearchParams(location.search); const indexName = queryParams.get('index'); const searchProfilerQueryURI = queryParams.get('load_from'); @@ -86,6 +89,32 @@ export const ProfileQueryEditor = memo(() => { ); const licenseEnabled = getLicenseStatus().valid; + const hasIndices = isLoading || indicesDataError ? false : indicesData?.hasIndices; + + const isDisabled = !licenseEnabled || !hasIndices; + const tooltipContent = !licenseEnabled + ? i18n.translate('xpack.searchProfiler.formProfileButton.noLicenseTooltip', { + defaultMessage: 'You need an active license to use Search Profiler', + }) + : i18n.translate('xpack.searchProfiler.formProfileButton.noIndicesTooltip', { + defaultMessage: 'You must have at least one index to use Search Profiler', + }); + + const button = ( + + + {i18n.translate('xpack.searchProfiler.formProfileButtonLabel', { + defaultMessage: 'Profile', + })} + + + ); + return ( {/* Form */} @@ -135,18 +164,13 @@ export const ProfileQueryEditor = memo(() => { - handleProfileClick()} - > - - {i18n.translate('xpack.searchProfiler.formProfileButtonLabel', { - defaultMessage: 'Profile', - })} - - + {isDisabled ? ( + + {button} + + ) : ( + button + )} diff --git a/x-pack/plugins/searchprofiler/public/application/hooks/index.ts b/x-pack/plugins/searchprofiler/public/application/hooks/index.ts index 9c1b3bfb8e9ed..156ad6bc8b163 100644 --- a/x-pack/plugins/searchprofiler/public/application/hooks/index.ts +++ b/x-pack/plugins/searchprofiler/public/application/hooks/index.ts @@ -6,3 +6,4 @@ */ export { useRequestProfile } from './use_request_profile'; +export { useHasIndices } from './use_has_indices'; diff --git a/x-pack/plugins/searchprofiler/public/application/hooks/use_has_indices.ts b/x-pack/plugins/searchprofiler/public/application/hooks/use_has_indices.ts new file mode 100644 index 0000000000000..43938d14a421f --- /dev/null +++ b/x-pack/plugins/searchprofiler/public/application/hooks/use_has_indices.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 { useRequest } from '@kbn/es-ui-shared-plugin/public'; +import { API_BASE_PATH } from '../../../common/constants'; +import { useAppContext } from '../contexts/app_context'; + +interface ReturnValue { + hasIndices: boolean; +} + +export const useHasIndices = () => { + const { http } = useAppContext(); + return useRequest(http, { + path: `${API_BASE_PATH}/has_indices`, + method: 'get', + }); +}; diff --git a/x-pack/plugins/searchprofiler/server/routes/profile.ts b/x-pack/plugins/searchprofiler/server/routes/profile.ts index 9e76bf0df96a1..7141a51c2c7f5 100644 --- a/x-pack/plugins/searchprofiler/server/routes/profile.ts +++ b/x-pack/plugins/searchprofiler/server/routes/profile.ts @@ -6,12 +6,13 @@ */ import { schema } from '@kbn/config-schema'; +import { API_BASE_PATH } from '../../common/constants'; import { RouteDependencies } from '../types'; export const register = ({ router, getLicenseStatus, log }: RouteDependencies) => { router.post( { - path: '/api/searchprofiler/profile', + path: `${API_BASE_PATH}/profile`, validate: { body: schema.object({ query: schema.object({}, { unknowns: 'allow' }), @@ -56,6 +57,48 @@ export const register = ({ router, getLicenseStatus, log }: RouteDependencies) = log.error(err); const { statusCode, body: errorBody } = err; + return response.customError({ + statusCode: statusCode || 500, + body: errorBody + ? { + message: errorBody.error?.reason, + attributes: errorBody, + } + : err, + }); + } + } + ); + router.get( + { + path: `${API_BASE_PATH}/has_indices`, + validate: false, + }, + async (ctx, _request, response) => { + const currentLicenseStatus = getLicenseStatus(); + if (!currentLicenseStatus.valid) { + return response.forbidden({ + body: { + message: currentLicenseStatus.message!, + }, + }); + } + + try { + const client = (await ctx.core).elasticsearch.client.asCurrentUser; + const resp = await client.cat.indices({ format: 'json' }); + + const hasIndices = resp.length > 0; + + return response.ok({ + body: { + hasIndices, + }, + }); + } catch (err) { + log.error(err); + const { statusCode, body: errorBody } = err; + return response.customError({ statusCode: statusCode || 500, body: errorBody diff --git a/x-pack/test/api_integration/apis/management/index_management/index.ts b/x-pack/test/api_integration/apis/management/index_management/index.ts index 63ab1f3371941..e17da6cae3b6f 100644 --- a/x-pack/test/api_integration/apis/management/index_management/index.ts +++ b/x-pack/test/api_integration/apis/management/index_management/index.ts @@ -22,5 +22,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./enrich_policies')); loadTestFile(require.resolve('./create_enrich_policy')); loadTestFile(require.resolve('./data_enrichers')); + loadTestFile(require.resolve('./searchprofiler')); }); } diff --git a/x-pack/test/api_integration/apis/management/index_management/searchprofiler.ts b/x-pack/test/api_integration/apis/management/index_management/searchprofiler.ts new file mode 100644 index 0000000000000..01c4347945118 --- /dev/null +++ b/x-pack/test/api_integration/apis/management/index_management/searchprofiler.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 expect from 'expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; + +const API_BASE_PATH = '/api/searchprofiler'; + +export default function ({ getService }: FtrProviderContext) { + const supertest = getService('supertest'); + + describe('Searchprofiler', function () { + it('Can retrive has indices', async () => { + const { body } = await supertest.get(`${API_BASE_PATH}/has_indices`).expect(200); + expect(body).toStrictEqual({ hasIndices: true }); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/dev_tools/search_profiler.ts b/x-pack/test_serverless/functional/test_suites/common/dev_tools/search_profiler.ts index 979943ffa602c..169f266e0c296 100644 --- a/x-pack/test_serverless/functional/test_suites/common/dev_tools/search_profiler.ts +++ b/x-pack/test_serverless/functional/test_suites/common/dev_tools/search_profiler.ts @@ -18,6 +18,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const PageObjects = getPageObjects(['svlCommonPage', 'common', 'searchProfiler']); const retry = getService('retry'); const es = getService('es'); + const browser = getService('browser'); describe('Search Profiler Editor', () => { before(async () => { @@ -81,6 +82,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); it('profiles a simple query', async () => { + await browser.refresh(); await PageObjects.searchProfiler.setIndexName(indexName); await PageObjects.searchProfiler.setQuery(testQuery); From c14701610527eecb0fab3291d80d60b1bd920b6a Mon Sep 17 00:00:00 2001 From: Janki Salvi <117571355+js-jankisalvi@users.noreply.github.com> Date: Wed, 4 Dec 2024 15:55:08 +0000 Subject: [PATCH 033/141] [ResponseOps][Cases] Fix edit cases settings privilege (#202053) ## Summary Fixes https://github.com/elastic/kibana/issues/197650 Also fixes an issue where user has `cases: all ` and `edit case settings: false`, user was able to edit settings. Used `permissions.settings` instead of `permissions.update` and `permissions.create` for custom fields and templates. ### How to test - Verify by creating a user with different combinations of cases and edit case settings privileges ### 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 --- .../cases/common/utils/capabilities.test.tsx | 1 - .../cases/common/utils/capabilities.ts | 1 - .../components/configure_cases/index.test.tsx | 6 +- .../components/configure_cases/index.tsx | 24 +++---- .../public/components/custom_fields/index.tsx | 8 +-- .../public/components/templates/index.tsx | 51 +++++++-------- .../apps/cases/common/roles.ts | 26 +++++++- .../apps/cases/common/users.ts | 28 +++++--- .../apps/cases/group1/index.ts | 2 +- .../group1/{deletion.ts => sub_privileges.ts} | 65 ++++++++++++++++++- 10 files changed, 146 insertions(+), 66 deletions(-) rename x-pack/test/functional_with_es_ssl/apps/cases/group1/{deletion.ts => sub_privileges.ts} (69%) diff --git a/x-pack/plugins/cases/common/utils/capabilities.test.tsx b/x-pack/plugins/cases/common/utils/capabilities.test.tsx index 11f74af8e02d8..6194cfd9aef02 100644 --- a/x-pack/plugins/cases/common/utils/capabilities.test.tsx +++ b/x-pack/plugins/cases/common/utils/capabilities.test.tsx @@ -17,7 +17,6 @@ describe('createUICapabilities', () => { "update_cases", "push_cases", "cases_connectors", - "cases_settings", ], "createComment": Array [ "create_comment", diff --git a/x-pack/plugins/cases/common/utils/capabilities.ts b/x-pack/plugins/cases/common/utils/capabilities.ts index 6897dc6bae774..79f67b7b5445e 100644 --- a/x-pack/plugins/cases/common/utils/capabilities.ts +++ b/x-pack/plugins/cases/common/utils/capabilities.ts @@ -36,7 +36,6 @@ export const createUICapabilities = (): CasesUiCapabilities => ({ UPDATE_CASES_CAPABILITY, PUSH_CASES_CAPABILITY, CASES_CONNECTORS_CAPABILITY, - CASES_SETTINGS_CAPABILITY, ] as const, read: [READ_CASES_CAPABILITY, CASES_CONNECTORS_CAPABILITY] as const, delete: [DELETE_CASES_CAPABILITY] as const, diff --git a/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx b/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx index 7a29c959d2525..c309509d563a3 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx +++ b/x-pack/plugins/cases/public/components/configure_cases/index.test.tsx @@ -12,7 +12,7 @@ import { waitFor, screen, within } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { ConfigureCases } from '.'; -import { noUpdateCasesPermissions, TestProviders, createAppMockRenderer } from '../../common/mock'; +import { noCasesSettingsPermission, TestProviders, createAppMockRenderer } from '../../common/mock'; import { customFieldsConfigurationMock, templatesConfigurationMock } from '../../containers/mock'; import type { AppMockRenderer } from '../../common/mock'; import { Connectors } from './connectors'; @@ -200,10 +200,10 @@ describe('ConfigureCases', () => { expect(wrapper.find('[data-test-subj="edit-connector-flyout"]').exists()).toBe(false); }); - test('it disables correctly when the user cannot update', () => { + test('it disables correctly when the user does not have settings privilege', () => { const newWrapper = mount(, { wrappingComponent: TestProviders as ComponentType>, - wrappingComponentProps: { permissions: noUpdateCasesPermissions() }, + wrappingComponentProps: { permissions: noCasesSettingsPermission() }, }); expect(newWrapper.find('button[data-test-subj="dropdown-connectors"]').prop('disabled')).toBe( diff --git a/x-pack/plugins/cases/public/components/configure_cases/index.tsx b/x-pack/plugins/cases/public/components/configure_cases/index.tsx index 641482ceca4fe..071a4c5cfac4e 100644 --- a/x-pack/plugins/cases/public/components/configure_cases/index.tsx +++ b/x-pack/plugins/cases/public/components/configure_cases/index.tsx @@ -480,12 +480,7 @@ export const ConfigureCases: React.FC = React.memo(() => { flyOutVisibility?.type === 'customField' && flyOutVisibility?.visible ? ( isLoading={loadingCaseConfigure || isPersistingConfiguration} - disabled={ - !permissions.create || - !permissions.update || - loadingCaseConfigure || - isPersistingConfiguration - } + disabled={!permissions.settings || loadingCaseConfigure || isPersistingConfiguration} onCloseFlyout={onCloseCustomFieldFlyout} onSaveField={onCustomFieldSave} renderHeader={() => ( @@ -502,12 +497,7 @@ export const ConfigureCases: React.FC = React.memo(() => { flyOutVisibility?.type === 'template' && flyOutVisibility?.visible ? ( isLoading={loadingCaseConfigure || isPersistingConfiguration} - disabled={ - !permissions.create || - !permissions.update || - loadingCaseConfigure || - isPersistingConfiguration - } + disabled={!permissions.settings || loadingCaseConfigure || isPersistingConfiguration} onCloseFlyout={onCloseTemplateFlyout} onSaveField={onTemplateSave} renderHeader={() => ( @@ -565,7 +555,9 @@ export const ConfigureCases: React.FC = React.memo(() => {
@@ -574,13 +566,15 @@ export const ConfigureCases: React.FC = React.memo(() => { diff --git a/x-pack/plugins/cases/public/components/custom_fields/index.tsx b/x-pack/plugins/cases/public/components/custom_fields/index.tsx index d749a7aba9bea..f93c72eb6a18e 100644 --- a/x-pack/plugins/cases/public/components/custom_fields/index.tsx +++ b/x-pack/plugins/cases/public/components/custom_fields/index.tsx @@ -17,7 +17,6 @@ import { } from '@elastic/eui'; import * as i18n from './translations'; -import { useCasesContext } from '../cases_context/use_cases_context'; import type { CustomFieldsConfiguration } from '../../../common/types/domain'; import { MAX_CUSTOM_FIELDS_PER_CASE } from '../../../common/constants'; import { CustomFieldsList } from './custom_fields_list'; @@ -38,8 +37,6 @@ const CustomFieldsComponent: React.FC = ({ handleEditCustomField, customFields, }) => { - const { permissions } = useCasesContext(); - const canAddCustomFields = permissions.create && permissions.update; const [error, setError] = useState(false); const onAddCustomField = useCallback(() => { @@ -64,7 +61,7 @@ const CustomFieldsComponent: React.FC = ({ setError(false); } - return canAddCustomFields ? ( + return ( {i18n.TITLE}} @@ -113,10 +110,11 @@ const CustomFieldsComponent: React.FC = ({ )} + - ) : null; + ); }; CustomFieldsComponent.displayName = 'CustomFields'; diff --git a/x-pack/plugins/cases/public/components/templates/index.tsx b/x-pack/plugins/cases/public/components/templates/index.tsx index 479101d2889ad..6c15f1e9ef464 100644 --- a/x-pack/plugins/cases/public/components/templates/index.tsx +++ b/x-pack/plugins/cases/public/components/templates/index.tsx @@ -17,7 +17,6 @@ import { } from '@elastic/eui'; import { MAX_TEMPLATES_LENGTH } from '../../../common/constants'; import type { CasesConfigurationUITemplate } from '../../../common/ui'; -import { useCasesContext } from '../cases_context/use_cases_context'; import { ExperimentalBadge } from '../experimental_badge/experimental_badge'; import * as i18n from './translations'; import { TemplatesList } from './templates_list'; @@ -39,8 +38,6 @@ const TemplatesComponent: React.FC = ({ onEditTemplate, onDeleteTemplate, }) => { - const { permissions } = useCasesContext(); - const canAddTemplates = permissions.create && permissions.update; const [error, setError] = useState(false); const handleAddTemplate = useCallback(() => { @@ -103,31 +100,29 @@ const TemplatesComponent: React.FC = ({ ) : null} - {canAddTemplates ? ( - - - {templates.length < MAX_TEMPLATES_LENGTH ? ( - - {i18n.ADD_TEMPLATE} - - ) : ( - - - {i18n.MAX_TEMPLATE_LIMIT(MAX_TEMPLATES_LENGTH)} - - - )} - - - - ) : null} + + + {templates.length < MAX_TEMPLATES_LENGTH ? ( + + {i18n.ADD_TEMPLATE} + + ) : ( + + + {i18n.MAX_TEMPLATE_LIMIT(MAX_TEMPLATES_LENGTH)} + + + )} + + + ); diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/common/roles.ts b/x-pack/test/functional_with_es_ssl/apps/cases/common/roles.ts index 0e8cb455ad299..f10fc0394569f 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/common/roles.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/common/roles.ts @@ -59,6 +59,30 @@ export const casesNoDelete: Role = { }, }; +export const casesReadAndEditSettings: Role = { + name: 'cases_read_and_edit_settings', + privileges: { + elasticsearch: { + indices: [ + { + names: ['*'], + privileges: ['all'], + }, + ], + }, + kibana: [ + { + feature: { + generalCasesV2: ['minimal_read', 'cases_settings'], + actions: ['all'], + actionsSimulators: ['all'], + }, + spaces: ['*'], + }, + ], + }, +}; + export const casesAll: Role = { name: 'cases_all_role', privileges: { @@ -83,4 +107,4 @@ export const casesAll: Role = { }, }; -export const roles = [casesReadDelete, casesNoDelete, casesAll]; +export const roles = [casesReadDelete, casesNoDelete, casesAll, casesReadAndEditSettings]; diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/common/users.ts b/x-pack/test/functional_with_es_ssl/apps/cases/common/users.ts index 8d213e5b78075..8964f414662fc 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/common/users.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/common/users.ts @@ -6,7 +6,7 @@ */ import { User } from '../../../../cases_api_integration/common/lib/authentication/types'; -import { casesAll, casesNoDelete, casesReadDelete } from './roles'; +import { casesAll, casesNoDelete, casesReadDelete, casesReadAndEditSettings } from './roles'; /** * Users for Cases in the Stack @@ -18,12 +18,6 @@ export const casesReadDeleteUser: User = { roles: [casesReadDelete.name], }; -export const casesNoDeleteUser: User = { - username: 'cases_no_delete_user', - password: 'password', - roles: [casesNoDelete.name], -}; - export const casesAllUser: User = { username: 'cases_all_user', password: 'password', @@ -36,4 +30,22 @@ export const casesAllUser2: User = { roles: [casesAll.name], }; -export const users = [casesReadDeleteUser, casesNoDeleteUser, casesAllUser, casesAllUser2]; +export const casesReadAndEditSettingsUser: User = { + username: 'cases_read_and_edit_settings_user', + password: 'password', + roles: [casesReadAndEditSettings.name], +}; + +export const casesNoDeleteUser: User = { + username: 'cases_no_delete_user', + password: 'password', + roles: [casesNoDelete.name], +}; + +export const users = [ + casesReadDeleteUser, + casesNoDeleteUser, + casesAllUser, + casesAllUser2, + casesReadAndEditSettingsUser, +]; diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/group1/index.ts b/x-pack/test/functional_with_es_ssl/apps/cases/group1/index.ts index 330bd820aea85..c7a1405c562b4 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/group1/index.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/group1/index.ts @@ -11,6 +11,6 @@ export default ({ loadTestFile }: FtrProviderContext) => { describe('Cases - group 1', function () { loadTestFile(require.resolve('./create_case_form')); loadTestFile(require.resolve('./view_case')); - loadTestFile(require.resolve('./deletion')); + loadTestFile(require.resolve('./sub_privileges')); }); }; diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/group1/deletion.ts b/x-pack/test/functional_with_es_ssl/apps/cases/group1/sub_privileges.ts similarity index 69% rename from x-pack/test/functional_with_es_ssl/apps/cases/group1/deletion.ts rename to x-pack/test/functional_with_es_ssl/apps/cases/group1/sub_privileges.ts index f23d0d01867cf..aecdb1623ff3d 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/group1/deletion.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/group1/sub_privileges.ts @@ -5,8 +5,16 @@ * 2.0. */ +import expect from '@kbn/expect'; import { FtrProviderContext } from '../../../ftr_provider_context'; -import { users, roles, casesReadDeleteUser, casesAllUser, casesNoDeleteUser } from '../common'; +import { + users, + roles, + casesReadDeleteUser, + casesAllUser, + casesNoDeleteUser, + casesReadAndEditSettingsUser, +} from '../common'; import { createUsersAndRoles, deleteUsersAndRoles, @@ -16,8 +24,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const PageObjects = getPageObjects(['security', 'header']); const testSubjects = getService('testSubjects'); const cases = getService('cases'); + const toasts = getService('toasts'); - describe('cases deletion sub privilege', () => { + describe('cases sub privilege', () => { before(async () => { await createUsersAndRoles(getService, users, roles); await PageObjects.security.forceLogout(); @@ -29,7 +38,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await PageObjects.security.forceLogout(); }); - describe('create two cases', () => { + describe('cases_delete', () => { beforeEach(async () => { await cases.api.createNthRandomCases(2); }); @@ -119,6 +128,56 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); } }); + + describe('cases_settings', () => { + afterEach(async () => { + await cases.api.deleteAllCases(); + }); + + for (const user of [casesReadAndEditSettingsUser, casesAllUser]) { + describe(`logging in with user ${user.username}`, () => { + before(async () => { + await PageObjects.security.login(user.username, user.password); + }); + + after(async () => { + await PageObjects.security.forceLogout(); + }); + + it(`User ${user.username} can navigate to settings`, async () => { + await cases.navigation.navigateToConfigurationPage(); + }); + + it(`User ${user.username} can update settings`, async () => { + await cases.common.selectRadioGroupValue( + 'closure-options-radio-group', + 'close-by-pushing' + ); + const toast = await toasts.getElementByIndex(1); + expect(await toast.getVisibleText()).to.be('Settings successfully updated'); + await toasts.dismissAll(); + }); + }); + } + + // below users do not have access to settings + for (const user of [casesNoDeleteUser, casesReadDeleteUser]) { + describe(`cannot access settings page with user ${user.username}`, () => { + before(async () => { + await PageObjects.security.login(user.username, user.password); + }); + + after(async () => { + await PageObjects.security.forceLogout(); + }); + + it(`User ${user.username} cannot navigate to settings`, async () => { + await cases.navigation.navigateToApp(); + await testSubjects.missingOrFail('configure-case-button'); + }); + }); + } + }); }); }; From abb61c9670cf77d76b78c0b63bb244b4520ca426 Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Wed, 4 Dec 2024 11:02:22 -0500 Subject: [PATCH 034/141] Dependency ownership for Kibana Management team, part 1 (#202776) ## Summary This updates our `renovate.json` configuration to mark the Kibana Management team as owners of their set of dependencies. --- renovate.json | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/renovate.json b/renovate.json index 4d2e1a2daf5e3..1121043865aa2 100644 --- a/renovate.json +++ b/renovate.json @@ -400,6 +400,70 @@ "enabled": true, "minimumReleaseAge": "7 days" }, + { + "groupName": "@elastic/kibana-management dependencies", + "matchDepNames": [ + "@mapbox/vector-tile", + "cronstrue", + "file-saver", + "@types/mapbox__vector-tile" + ], + "reviewers": [ + "team:kibana-management" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Kibana Management", + "release_note:skip", + "backport:all-open" + ], + "enabled": true, + "minimumReleaseAge": "7 days" + }, + { + "groupName": "moment-duration-format", + "matchDepNames": [ + "moment-duration-format", + "@types/moment-duration-format" + ], + "reviewers": [ + "team:kibana-management", + "team:stack-monitoring" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Kibana Management", + "Team:Monitoring", + "release_note:skip", + "backport:all-open" + ], + "enabled": true, + "minimumReleaseAge": "7 days" + }, + { + "groupName": "@elastic/kibana-visualizations test dependencies", + "matchDepNames": [ + "@types/faker", + "faker" + ], + "reviewers": [ + "team:visualizations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Visualizations", + "release_note:skip", + "backport:prev-minor" + ], + "enabled": true, + "minimumReleaseAge": "7 days" + }, { "groupName": "@elastic/charts", "matchDepNames": [ From 0ed26d314394be389e09b624eec17f306da82215 Mon Sep 17 00:00:00 2001 From: Ievgen Sorokopud Date: Wed, 4 Dec 2024 17:06:10 +0100 Subject: [PATCH 035/141] [Rules migration] Post merge feedback followups (#202815) ## Summary These are the followup updated to address feedback from my previous PRs: * Make sure to use descriptive names specific to the `siem_migrations` subdomain ([comment](https://github.com/elastic/kibana/pull/200978#pullrequestreview-2454582368)): > Make sure you use descriptive names specific to the siem_migrations subdomain. Names like RulesPage, RulesTable, useRulesColumns etc are way too generic and conflict with the rule management terminology, which would make code search more difficult. * Export the memo component directly everywhere ([comment](https://github.com/elastic/kibana/pull/201597#discussion_r1858069127)): > Could we export the memo component directly everywhere? It's shorter and it makes it easier to find the references in the IDE. * Use one hook to access APIs instead of two ([comment](https://github.com/elastic/kibana/pull/202494#discussion_r1867967135)): > I see that for every API request we have to implement 2 separate hooks. Why don't we add error handling to the same hook that does the useQuery? so we have everything in one hook. Or is there a reason to have them separate? --- .../common/siem_migrations/constants.ts | 8 + .../public/siem_migrations/routes.tsx | 11 +- .../hooks/use_get_migration_rules_query.ts | 78 ----- ...e_get_migration_translation_stats_query.ts | 60 ---- .../use_install_migration_rules_mutation.ts | 40 --- ...all_translated_migration_rules_mutation.ts | 43 --- .../rules/api/{api.ts => index.ts} | 12 +- .../rules/components/header_buttons/index.tsx | 99 +++--- .../constants.ts | 0 .../components/rule_details_flyout/index.tsx | 194 ++++++++++++ .../translation_tab/header.tsx | 5 +- .../translation_tab/index.tsx | 11 +- .../translation_tab/migration_rule_query.tsx | 73 +++++ .../translation_tab/translations.ts | 0 .../translations.ts | 0 ..._items_message.tsx => empty_migration.tsx} | 7 +- .../rules/components/rules_table/index.tsx | 293 +++++++++--------- .../components/rules_table/search_field.tsx | 14 +- .../rules_table_columns/actions.tsx | 12 +- .../components/rules_table_columns/name.tsx | 12 +- .../rules/components/status_badge/index.tsx | 38 +-- .../translation_details_flyout/index.tsx | 246 --------------- .../translation_tab/rule_query.tsx | 49 --- .../components/unknown_migration/index.tsx | 8 +- ... => use_migration_rule_preview_flyout.tsx} | 36 +-- ... => use_migration_rules_table_columns.tsx} | 12 +- .../rules/{api/hooks => logic}/constants.ts | 0 .../rules/logic/use_get_migration_rules.ts | 51 ++- .../use_get_migration_translation_stats.ts | 52 +++- .../logic/use_install_migration_rules.ts | 31 +- .../use_install_translated_migration_rules.ts | 34 +- .../siem_migrations/rules/pages/index.tsx | 34 +- .../rules/service/rule_migrations_service.ts | 2 +- .../public/siem_migrations/rules/types.ts | 11 - .../rules/api/util/installation.ts | 2 +- 35 files changed, 730 insertions(+), 848 deletions(-) delete mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_get_migration_rules_query.ts delete mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_get_migration_translation_stats_query.ts delete mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_migration_rules_mutation.ts delete mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_translated_migration_rules_mutation.ts rename x-pack/plugins/security_solution/public/siem_migrations/rules/api/{api.ts => index.ts} (95%) rename x-pack/plugins/security_solution/public/siem_migrations/rules/components/{translation_details_flyout => rule_details_flyout}/constants.ts (100%) create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx rename x-pack/plugins/security_solution/public/siem_migrations/rules/components/{translation_details_flyout => rule_details_flyout}/translation_tab/header.tsx (82%) rename x-pack/plugins/security_solution/public/siem_migrations/rules/components/{translation_details_flyout => rule_details_flyout}/translation_tab/index.tsx (92%) create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/migration_rule_query.tsx rename x-pack/plugins/security_solution/public/siem_migrations/rules/components/{translation_details_flyout => rule_details_flyout}/translation_tab/translations.ts (100%) rename x-pack/plugins/security_solution/public/siem_migrations/rules/components/{translation_details_flyout => rule_details_flyout}/translations.ts (100%) rename x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/{no_items_message.tsx => empty_migration.tsx} (93%) delete mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/index.tsx delete mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/rule_query.tsx rename x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/{use_rule_preview_flyout.tsx => use_migration_rule_preview_flyout.tsx} (55%) rename x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/{use_rules_table_columns.tsx => use_migration_rules_table_columns.tsx} (78%) rename x-pack/plugins/security_solution/public/siem_migrations/rules/{api/hooks => logic}/constants.ts (100%) diff --git a/x-pack/plugins/security_solution/common/siem_migrations/constants.ts b/x-pack/plugins/security_solution/common/siem_migrations/constants.ts index a910cb90f1664..789947150a67e 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/constants.ts +++ b/x-pack/plugins/security_solution/common/siem_migrations/constants.ts @@ -46,3 +46,11 @@ export enum SiemMigrationRuleTranslationResult { export const DEFAULT_TRANSLATION_RISK_SCORE = 21; export const DEFAULT_TRANSLATION_SEVERITY: Severity = 'low'; + +export const DEFAULT_TRANSLATION_FIELDS = { + risk_score: DEFAULT_TRANSLATION_RISK_SCORE, + severity: DEFAULT_TRANSLATION_SEVERITY, + from: 'now-360s', + to: 'now', + interval: '5m', +} as const; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/routes.tsx b/x-pack/plugins/security_solution/public/siem_migrations/routes.tsx index cc2b9fbad3451..179cf064c4926 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/routes.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/routes.tsx @@ -10,16 +10,19 @@ import { Routes, Route } from '@kbn/shared-ux-router'; import type { SecuritySubPluginRoutes } from '../app/types'; import { SIEM_MIGRATIONS_RULES_PATH, SecurityPageName } from '../../common/constants'; -import { RulesPage } from './rules/pages'; +import { MigrationRulesPage } from './rules/pages'; import { PluginTemplateWrapper } from '../common/components/plugin_template_wrapper'; import { SecurityRoutePageWrapper } from '../common/components/security_route_page_wrapper'; -export const RulesRoutes = () => { +export const SiemMigrationsRoutes = () => { return ( - + @@ -29,6 +32,6 @@ export const RulesRoutes = () => { export const routes: SecuritySubPluginRoutes = [ { path: SIEM_MIGRATIONS_RULES_PATH, - component: RulesRoutes, + component: SiemMigrationsRoutes, }, ]; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_get_migration_rules_query.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_get_migration_rules_query.ts deleted file mode 100644 index 138b2a31e9727..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_get_migration_rules_query.ts +++ /dev/null @@ -1,78 +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 { UseQueryOptions } from '@tanstack/react-query'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; -import { replaceParams } from '@kbn/openapi-common/shared'; -import { useCallback } from 'react'; -import type { RuleMigration } from '../../../../../common/siem_migrations/model/rule_migration.gen'; -import { DEFAULT_QUERY_OPTIONS } from './constants'; -import { getRuleMigrations } from '../api'; -import { SIEM_RULE_MIGRATION_PATH } from '../../../../../common/siem_migrations/constants'; - -interface UseGetMigrationRulesQueryProps { - migrationId: string; - page?: number; - perPage?: number; - searchTerm?: string; -} - -export interface MigrationRulesQueryResponse { - ruleMigrations: RuleMigration[]; - total: number; -} - -export const useGetMigrationRulesQuery = ( - queryArgs: UseGetMigrationRulesQueryProps, - queryOptions?: UseQueryOptions< - MigrationRulesQueryResponse, - Error, - MigrationRulesQueryResponse, - [...string[], UseGetMigrationRulesQueryProps] - > -) => { - const { migrationId } = queryArgs; - const SPECIFIC_MIGRATION_PATH = replaceParams(SIEM_RULE_MIGRATION_PATH, { - migration_id: migrationId, - }); - return useQuery( - ['GET', SPECIFIC_MIGRATION_PATH, queryArgs], - async ({ signal }) => { - const response = await getRuleMigrations({ signal, ...queryArgs }); - - return { ruleMigrations: response.data, total: response.total }; - }, - { - ...DEFAULT_QUERY_OPTIONS, - ...queryOptions, - } - ); -}; - -/** - * We should use this hook to invalidate the rule migrations cache. For - * example, rule migrations mutations, like installing a rule, should lead to cache invalidation. - * - * @returns A rule migrations cache invalidation callback - */ -export const useInvalidateGetMigrationRulesQuery = (migrationId: string) => { - const queryClient = useQueryClient(); - - const SPECIFIC_MIGRATION_PATH = replaceParams(SIEM_RULE_MIGRATION_PATH, { - migration_id: migrationId, - }); - - return useCallback(() => { - /** - * Invalidate all queries that start with SPECIFIC_MIGRATION_PATH. This - * includes the in-memory query cache and paged query cache. - */ - queryClient.invalidateQueries(['GET', SPECIFIC_MIGRATION_PATH], { - refetchType: 'active', - }); - }, [SPECIFIC_MIGRATION_PATH, queryClient]); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_get_migration_translation_stats_query.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_get_migration_translation_stats_query.ts deleted file mode 100644 index e58b9be20d19c..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_get_migration_translation_stats_query.ts +++ /dev/null @@ -1,60 +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 { UseQueryOptions } from '@tanstack/react-query'; -import { useQuery, useQueryClient } from '@tanstack/react-query'; -import { replaceParams } from '@kbn/openapi-common/shared'; -import { useCallback } from 'react'; -import { DEFAULT_QUERY_OPTIONS } from './constants'; -import { getRuleMigrationTranslationStats } from '../api'; -import type { GetRuleMigrationTranslationStatsResponse } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -import { SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH } from '../../../../../common/siem_migrations/constants'; - -export const useGetMigrationTranslationStatsQuery = ( - migrationId: string, - options?: UseQueryOptions -) => { - const SPECIFIC_MIGRATION_TRANSLATION_PATH = replaceParams( - SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, - { - migration_id: migrationId, - } - ); - return useQuery( - ['GET', SPECIFIC_MIGRATION_TRANSLATION_PATH], - async ({ signal }) => { - return getRuleMigrationTranslationStats({ migrationId, signal }); - }, - { - ...DEFAULT_QUERY_OPTIONS, - ...options, - } - ); -}; - -/** - * We should use this hook to invalidate the translation stats cache. For - * example, rule migrations mutations, like installing a rule, should lead to cache invalidation. - * - * @returns A translation stats cache invalidation callback - */ -export const useInvalidateGetMigrationTranslationStatsQuery = (migrationId: string) => { - const queryClient = useQueryClient(); - - const SPECIFIC_MIGRATION_TRANSLATION_PATH = replaceParams( - SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, - { - migration_id: migrationId, - } - ); - - return useCallback(() => { - queryClient.invalidateQueries(['GET', SPECIFIC_MIGRATION_TRANSLATION_PATH], { - refetchType: 'active', - }); - }, [SPECIFIC_MIGRATION_TRANSLATION_PATH, queryClient]); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_migration_rules_mutation.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_migration_rules_mutation.ts deleted file mode 100644 index 536f9e772e5d8..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_migration_rules_mutation.ts +++ /dev/null @@ -1,40 +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 { UseMutationOptions } from '@tanstack/react-query'; -import { useMutation } from '@tanstack/react-query'; -import type { InstallMigrationRulesResponse } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -import { SIEM_RULE_MIGRATION_INSTALL_PATH } from '../../../../../common/siem_migrations/constants'; -import { installMigrationRules } from '../api'; -import { useInvalidateGetMigrationRulesQuery } from './use_get_migration_rules_query'; -import { useInvalidateGetMigrationTranslationStatsQuery } from './use_get_migration_translation_stats_query'; - -export const INSTALL_MIGRATION_RULES_MUTATION_KEY = ['POST', SIEM_RULE_MIGRATION_INSTALL_PATH]; - -export const useInstallMigrationRulesMutation = ( - migrationId: string, - options?: UseMutationOptions -) => { - const invalidateGetRuleMigrationsQuery = useInvalidateGetMigrationRulesQuery(migrationId); - const invalidateGetMigrationTranslationStatsQuery = - useInvalidateGetMigrationTranslationStatsQuery(migrationId); - - return useMutation( - (ids: string[]) => installMigrationRules({ migrationId, ids }), - { - ...options, - mutationKey: INSTALL_MIGRATION_RULES_MUTATION_KEY, - onSettled: (...args) => { - invalidateGetRuleMigrationsQuery(); - invalidateGetMigrationTranslationStatsQuery(); - - if (options?.onSettled) { - options.onSettled(...args); - } - }, - } - ); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_translated_migration_rules_mutation.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_translated_migration_rules_mutation.ts deleted file mode 100644 index 3c1dda0b457c4..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/use_install_translated_migration_rules_mutation.ts +++ /dev/null @@ -1,43 +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 { UseMutationOptions } from '@tanstack/react-query'; -import { useMutation } from '@tanstack/react-query'; -import type { InstallTranslatedMigrationRulesResponse } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -import { SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH } from '../../../../../common/siem_migrations/constants'; -import { installTranslatedMigrationRules } from '../api'; -import { useInvalidateGetMigrationRulesQuery } from './use_get_migration_rules_query'; -import { useInvalidateGetMigrationTranslationStatsQuery } from './use_get_migration_translation_stats_query'; - -export const INSTALL_ALL_MIGRATION_RULES_MUTATION_KEY = [ - 'POST', - SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH, -]; - -export const useInstallTranslatedMigrationRulesMutation = ( - migrationId: string, - options?: UseMutationOptions -) => { - const invalidateGetRuleMigrationsQuery = useInvalidateGetMigrationRulesQuery(migrationId); - const invalidateGetMigrationTranslationStatsQuery = - useInvalidateGetMigrationTranslationStatsQuery(migrationId); - - return useMutation( - () => installTranslatedMigrationRules({ migrationId }), - { - ...options, - mutationKey: INSTALL_ALL_MIGRATION_RULES_MUTATION_KEY, - onSettled: (...args) => { - invalidateGetRuleMigrationsQuery(); - invalidateGetMigrationTranslationStatsQuery(); - - if (options?.onSettled) { - options.onSettled(...args); - } - }, - } - ); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/api.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts similarity index 95% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/api/api.ts rename to x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts index 160d78f1edbb6..592b93f438197 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/api.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts @@ -25,7 +25,6 @@ import type { InstallMigrationRulesResponse, StartRuleMigrationRequestBody, } from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -import type { InstallTranslatedRulesProps, InstallRulesProps } from '../types'; /** * Retrieves the stats for all the existing migrations, aggregated by `migration_id`. @@ -134,7 +133,11 @@ export const installMigrationRules = async ({ migrationId, ids, signal, -}: InstallRulesProps): Promise => { +}: { + migrationId: string; + ids: string[]; + signal?: AbortSignal; +}): Promise => { return KibanaServices.get().http.fetch( replaceParams(SIEM_RULE_MIGRATION_INSTALL_PATH, { migration_id: migrationId }), { @@ -149,7 +152,10 @@ export const installMigrationRules = async ({ export const installTranslatedMigrationRules = async ({ migrationId, signal, -}: InstallTranslatedRulesProps): Promise => { +}: { + migrationId: string; + signal?: AbortSignal; +}): Promise => { return KibanaServices.get().http.fetch( replaceParams(SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH, { migration_id: migrationId }), { diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx index ba73bd9c84946..728873f046d2e 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx @@ -10,12 +10,13 @@ import React, { useMemo } from 'react'; import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import * as i18n from './translations'; +import type { RuleMigrationTask } from '../../types'; export interface HeaderButtonsProps { /** - * Available rule migrations ids + * Available rule migrations stats */ - migrationsIds: string[]; + ruleMigrationsStats: RuleMigrationTask[]; /** * Selected rule migration id @@ -30,55 +31,53 @@ export interface HeaderButtonsProps { onMigrationIdChange: (selectedId?: string) => void; } -const HeaderButtonsComponent: React.FC = ({ - migrationsIds, - selectedMigrationId, - onMigrationIdChange, -}) => { - const migrationOptions = useMemo(() => { - const options: Array> = migrationsIds.map((id, index) => ({ - value: id, - 'data-test-subj': `migrationSelectionOption-${index}`, - label: i18n.SIEM_MIGRATIONS_OPTION_LABEL(index + 1), - })); - return options; - }, [migrationsIds]); - const selectedMigrationOption = useMemo>>(() => { - const index = migrationsIds.findIndex((id) => id === selectedMigrationId); - return index !== -1 - ? [ - { - value: selectedMigrationId, - 'data-test-subj': `migrationSelectionOption-${index}`, - label: i18n.SIEM_MIGRATIONS_OPTION_LABEL(index + 1), - }, - ] - : []; - }, [migrationsIds, selectedMigrationId]); +export const HeaderButtons: React.FC = React.memo( + ({ ruleMigrationsStats, selectedMigrationId, onMigrationIdChange }) => { + const migrationOptions = useMemo(() => { + const options: Array> = ruleMigrationsStats.map( + ({ id, number }) => ({ + value: id, + 'data-test-subj': `migrationSelectionOption-${number}`, + label: i18n.SIEM_MIGRATIONS_OPTION_LABEL(number), + }) + ); + return options; + }, [ruleMigrationsStats]); + const selectedMigrationOption = useMemo>>(() => { + const stats = ruleMigrationsStats.find(({ id }) => id === selectedMigrationId); + return stats + ? [ + { + value: selectedMigrationId, + 'data-test-subj': `migrationSelectionOption-${stats.number}`, + label: i18n.SIEM_MIGRATIONS_OPTION_LABEL(stats.number), + }, + ] + : []; + }, [ruleMigrationsStats, selectedMigrationId]); - const onChange = (selected: Array>) => { - onMigrationIdChange(selected[0].value); - }; + const onChange = (selected: Array>) => { + onMigrationIdChange(selected[0].value); + }; - if (!migrationsIds.length) { - return null; - } - - return ( - - - - - - ); -}; + if (!ruleMigrationsStats.length) { + return null; + } -export const HeaderButtons = React.memo(HeaderButtonsComponent); + return ( + + + + + + ); + } +); HeaderButtons.displayName = 'HeaderButtons'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/constants.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/constants.ts similarity index 100% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/constants.ts rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/constants.ts diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx new file mode 100644 index 0000000000000..9353d0063b8ab --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx @@ -0,0 +1,194 @@ +/* + * 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 { FC, PropsWithChildren } from 'react'; +import React, { useMemo, useState, useEffect } from 'react'; +import { css } from '@emotion/css'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { + EuiButtonEmpty, + EuiTitle, + EuiFlyout, + EuiFlyoutHeader, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiTabbedContent, + EuiSpacer, + EuiFlexGroup, + EuiFlexItem, + useGeneratedHtmlId, +} from '@elastic/eui'; +import type { EuiTabbedContentTab, EuiTabbedContentProps, EuiFlyoutProps } from '@elastic/eui'; + +import { + DEFAULT_TRANSLATION_SEVERITY, + DEFAULT_TRANSLATION_FIELDS, +} from '../../../../../common/siem_migrations/constants'; +import type { RuleMigration } from '../../../../../common/siem_migrations/model/rule_migration.gen'; +import { + RuleOverviewTab, + useOverviewTabSections, +} from '../../../../detection_engine/rule_management/components/rule_details/rule_overview_tab'; +import { + type RuleResponse, + type Severity, +} from '../../../../../common/api/detection_engine/model/rule_schema'; + +import * as i18n from './translations'; +import { + DEFAULT_DESCRIPTION_LIST_COLUMN_WIDTHS, + LARGE_DESCRIPTION_LIST_COLUMN_WIDTHS, +} from './constants'; +import { TranslationTab } from './translation_tab'; + +/* + * Fixes tabs to the top and allows the content to scroll. + */ +const ScrollableFlyoutTabbedContent = (props: EuiTabbedContentProps) => ( + + + + + +); + +const tabPaddingClassName = css` + padding: 0 ${euiThemeVars.euiSizeM} ${euiThemeVars.euiSizeXL} ${euiThemeVars.euiSizeM}; +`; + +export const TabContentPadding: FC> = ({ children }) => ( +
{children}
+); + +interface MigrationRuleDetailsFlyoutProps { + ruleActions?: React.ReactNode; + ruleMigration: RuleMigration; + size?: EuiFlyoutProps['size']; + extraTabs?: EuiTabbedContentTab[]; + closeFlyout: () => void; +} + +export const MigrationRuleDetailsFlyout: React.FC = React.memo( + ({ + ruleActions, + ruleMigration, + size = 'm', + extraTabs = [], + closeFlyout, + }: MigrationRuleDetailsFlyoutProps) => { + const { expandedOverviewSections, toggleOverviewSection } = useOverviewTabSections(); + + const rule: RuleResponse = useMemo(() => { + const esqlLanguage = ruleMigration.elastic_rule?.query_language ?? 'esql'; + return { + type: esqlLanguage, + language: esqlLanguage, + name: ruleMigration.elastic_rule?.title, + description: ruleMigration.elastic_rule?.description, + query: ruleMigration.elastic_rule?.query, + + ...DEFAULT_TRANSLATION_FIELDS, + severity: + (ruleMigration.elastic_rule?.severity as Severity) ?? DEFAULT_TRANSLATION_SEVERITY, + } as RuleResponse; // TODO: we need to adjust RuleOverviewTab to allow partial RuleResponse as a parameter + }, [ruleMigration]); + + const translationTab: EuiTabbedContentTab = useMemo( + () => ({ + id: 'translation', + name: i18n.TRANSLATION_TAB_LABEL, + content: ( + + + + ), + }), + [ruleMigration] + ); + + const overviewTab: EuiTabbedContentTab = useMemo( + () => ({ + id: 'overview', + name: i18n.OVERVIEW_TAB_LABEL, + content: ( + + + + ), + }), + [rule, size, expandedOverviewSections, toggleOverviewSection] + ); + + const tabs = useMemo(() => { + return [...extraTabs, translationTab, overviewTab]; + }, [extraTabs, translationTab, overviewTab]); + + const [selectedTabId, setSelectedTabId] = useState(tabs[0].id); + const selectedTab = tabs.find((tab) => tab.id === selectedTabId) ?? tabs[0]; + + useEffect(() => { + if (!tabs.find((tab) => tab.id === selectedTabId)) { + // Switch to first tab if currently selected tab is not available for this rule + setSelectedTabId(tabs[0].id); + } + }, [tabs, selectedTabId]); + + const onTabClick = (tab: EuiTabbedContentTab) => { + setSelectedTabId(tab.id); + }; + + const migrationsRulesFlyoutTitleId = useGeneratedHtmlId({ + prefix: 'migrationRulesFlyoutTitle', + }); + + return ( + + + +

{rule.name}

+
+ +
+ + + + + + + + {i18n.DISMISS_BUTTON_LABEL} + + + {ruleActions} + + +
+ ); + } +); +MigrationRuleDetailsFlyout.displayName = 'MigrationRuleDetailsFlyout'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/header.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/header.tsx similarity index 82% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/header.tsx rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/header.tsx index 57e99440e60a1..2775c9569917a 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/header.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/header.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { EuiFlexGroup, EuiTitle } from '@elastic/eui'; import * as i18n from './translations'; -export function TranslationTabHeader(): JSX.Element { +export const TranslationTabHeader: React.FC = React.memo(() => { return ( @@ -17,4 +17,5 @@ export function TranslationTabHeader(): JSX.Element { ); -} +}); +TranslationTabHeader.displayName = 'TranslationTabHeader'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/index.tsx similarity index 92% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/index.tsx rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/index.tsx index f2ac76c78434b..a2e590b85ac09 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/index.tsx @@ -22,7 +22,7 @@ import { css } from '@emotion/css'; import { FormattedMessage } from '@kbn/i18n-react'; import type { RuleMigration } from '../../../../../../common/siem_migrations/model/rule_migration.gen'; import { TranslationTabHeader } from './header'; -import { RuleQueryComponent } from './rule_query'; +import { MigrationRuleQuery } from './migration_rule_query'; import * as i18n from './translations'; import { convertTranslationResultIntoColor, @@ -33,7 +33,7 @@ interface TranslationTabProps { ruleMigration: RuleMigration; } -export const TranslationTab = ({ ruleMigration }: TranslationTabProps) => { +export const TranslationTab: React.FC = React.memo(({ ruleMigration }) => { const { euiTheme } = useEuiTheme(); const name = ruleMigration.elastic_rule?.title ?? ruleMigration.original_rule.title; @@ -81,7 +81,7 @@ export const TranslationTab = ({ ruleMigration }: TranslationTabProps) => { - { `} /> - { ); -}; +}); +TranslationTab.displayName = 'TranslationTab'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/migration_rule_query.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/migration_rule_query.tsx new file mode 100644 index 0000000000000..534f765da97bc --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/migration_rule_query.tsx @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useMemo } from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiHorizontalRule, + EuiMarkdownEditor, + EuiMarkdownFormat, + EuiTitle, + useEuiTheme, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import * as i18n from './translations'; + +interface MigrationRuleQueryProps { + title: string; + query: string; + canEdit?: boolean; +} + +export const MigrationRuleQuery: React.FC = React.memo( + ({ title, query, canEdit }) => { + const { euiTheme } = useEuiTheme(); + + const headerComponent = useMemo(() => { + return ( + + + +

{title}

+
+
+
+ ); + }, [euiTheme, title]); + + const queryTextComponent = useMemo(() => { + if (canEdit) { + return ( + {}} + height={400} + initialViewMode={'viewing'} + /> + ); + } else { + return {query}; + } + }, [canEdit, query]); + + return ( + <> + {headerComponent} + + {queryTextComponent} + + ); + } +); +MigrationRuleQuery.displayName = 'MigrationRuleQuery'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/translations.ts similarity index 100% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/translations.ts rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/translations.ts diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translations.ts similarity index 100% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translations.ts rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translations.ts diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/no_items_message.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/empty_migration.tsx similarity index 93% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/no_items_message.tsx rename to x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/empty_migration.tsx index 7aeaac7ab2f6b..a8bd20d4a557e 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/no_items_message.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/empty_migration.tsx @@ -11,7 +11,7 @@ import { SecurityPageName } from '../../../../../common'; import { useGetSecuritySolutionLinkProps } from '../../../../common/components/links'; import * as i18n from './translations'; -const NoItemsMessageComponent = () => { +export const EmptyMigration: React.FC = React.memo(() => { const getSecuritySolutionLinkProps = useGetSecuritySolutionLinkProps(); const { onClick: onClickLink } = getSecuritySolutionLinkProps({ deepLinkId: SecurityPageName.landing, @@ -47,6 +47,5 @@ const NoItemsMessageComponent = () => {
); -}; - -export const NoItemsMessage = React.memo(NoItemsMessageComponent); +}); +EmptyMigration.displayName = 'EmptyMigration'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx index 82793d3e1fd8c..e7af1af93e2ba 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx @@ -17,20 +17,22 @@ import { } from '@elastic/eui'; import React, { useCallback, useMemo, useState } from 'react'; +import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import type { RuleMigration } from '../../../../../common/siem_migrations/model/rule_migration.gen'; -import { NoItemsMessage } from './no_items_message'; -import { useRulesTableColumns } from '../../hooks/use_rules_table_columns'; -import { useRulePreviewFlyout } from '../../hooks/use_rule_preview_flyout'; +import { EmptyMigration } from './empty_migration'; +import { useMigrationRulesTableColumns } from '../../hooks/use_migration_rules_table_columns'; +import { useMigrationRuleDetailsFlyout } from '../../hooks/use_migration_rule_preview_flyout'; import { useInstallMigrationRules } from '../../logic/use_install_migration_rules'; import { useGetMigrationRules } from '../../logic/use_get_migration_rules'; import { useInstallTranslatedMigrationRules } from '../../logic/use_install_translated_migration_rules'; -import { BulkActions } from './bulk_actions'; import { useGetMigrationTranslationStats } from '../../logic/use_get_migration_translation_stats'; +import * as logicI18n from '../../logic/translations'; +import { BulkActions } from './bulk_actions'; import { SearchField } from './search_field'; const DEFAULT_PAGE_SIZE = 10; -export interface RulesTableComponentProps { +export interface MigrationRulesTableProps { /** * Selected rule migration id */ @@ -40,143 +42,152 @@ export interface RulesTableComponentProps { /** * Table Component for displaying SIEM rules migrations */ -const RulesTableComponent: React.FC = ({ migrationId }) => { - const [pageIndex, setPageIndex] = useState(0); - const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE); - const [searchTerm, setSearchTerm] = useState(); - - const { data: translationStats, isLoading: isStatsLoading } = - useGetMigrationTranslationStats(migrationId); - - const { - data: { ruleMigrations, total } = { ruleMigrations: [], total: 0 }, - isLoading: isDataLoading, - } = useGetMigrationRules({ - migrationId, - page: pageIndex, - perPage: pageSize, - searchTerm, - }); - - const [selectedRuleMigrations, setSelectedRuleMigrations] = useState([]); - - const pagination = useMemo(() => { - return { - pageIndex, - pageSize, - totalItemCount: total, - }; - }, [pageIndex, pageSize, total]); - - const onTableChange = useCallback(({ page, sort }: CriteriaWithPagination) => { - if (page) { - setPageIndex(page.index); - setPageSize(page.size); - } - }, []); - - const handleOnSearch = useCallback((value: string) => { - setSearchTerm(value.trim()); - }, []); - - const { mutateAsync: installMigrationRules } = useInstallMigrationRules(migrationId); - const { mutateAsync: installTranslatedMigrationRules } = - useInstallTranslatedMigrationRules(migrationId); - - const [isTableLoading, setTableLoading] = useState(false); - const installSingleRule = useCallback( - async (migrationRule: RuleMigration, enable?: boolean) => { - setTableLoading(true); - try { - await installMigrationRules([migrationRule.id]); - } finally { - setTableLoading(false); - } - }, - [installMigrationRules] - ); - - const installTranslatedRules = useCallback( - async (enable?: boolean) => { - setTableLoading(true); - try { - await installTranslatedMigrationRules(); - } finally { - setTableLoading(false); +export const MigrationRulesTable: React.FC = React.memo( + ({ migrationId }) => { + const { addError } = useAppToasts(); + + const [pageIndex, setPageIndex] = useState(0); + const [pageSize, setPageSize] = useState(DEFAULT_PAGE_SIZE); + const [searchTerm, setSearchTerm] = useState(); + + const { data: translationStats, isLoading: isStatsLoading } = + useGetMigrationTranslationStats(migrationId); + + const { + data: { ruleMigrations, total } = { ruleMigrations: [], total: 0 }, + isLoading: isDataLoading, + } = useGetMigrationRules({ + migrationId, + page: pageIndex, + perPage: pageSize, + searchTerm, + }); + + const [selectedRuleMigrations, setSelectedRuleMigrations] = useState([]); + + const pagination = useMemo(() => { + return { + pageIndex, + pageSize, + totalItemCount: total, + }; + }, [pageIndex, pageSize, total]); + + const onTableChange = useCallback(({ page, sort }: CriteriaWithPagination) => { + if (page) { + setPageIndex(page.index); + setPageSize(page.size); } - }, - [installTranslatedMigrationRules] - ); - - const ruleActionsFactory = useCallback( - (ruleMigration: RuleMigration, closeRulePreview: () => void) => { - // TODO: Add flyout action buttons - return null; - }, - [] - ); - - const { rulePreviewFlyout, openRulePreview } = useRulePreviewFlyout({ - ruleActionsFactory, - }); - - const rulesColumns = useRulesTableColumns({ - disableActions: isTableLoading, - openMigrationRulePreview: openRulePreview, - installMigrationRule: installSingleRule, - }); - - return ( - <> - - - - + }, []); + + const handleOnSearch = useCallback((value: string) => { + setSearchTerm(value.trim()); + }, []); + + const { mutateAsync: installMigrationRules } = useInstallMigrationRules(migrationId); + const { mutateAsync: installTranslatedMigrationRules } = + useInstallTranslatedMigrationRules(migrationId); + + const [isTableLoading, setTableLoading] = useState(false); + const installSingleRule = useCallback( + async (migrationRule: RuleMigration, enable?: boolean) => { + setTableLoading(true); + try { + await installMigrationRules([migrationRule.id]); + } catch (error) { + addError(error, { title: logicI18n.INSTALL_MIGRATION_RULES_FAILURE }); + } finally { + setTableLoading(false); } - loadedContent={ - !translationStats?.rules.total ? ( - - ) : ( + }, + [addError, installMigrationRules] + ); + + const installTranslatedRules = useCallback( + async (enable?: boolean) => { + setTableLoading(true); + try { + await installTranslatedMigrationRules(); + } catch (error) { + addError(error, { title: logicI18n.INSTALL_MIGRATION_RULES_FAILURE }); + } finally { + setTableLoading(false); + } + }, + [addError, installTranslatedMigrationRules] + ); + + const ruleActionsFactory = useCallback( + (ruleMigration: RuleMigration, closeRulePreview: () => void) => { + // TODO: Add flyout action buttons + return null; + }, + [] + ); + + const { + migrationRuleDetailsFlyout: rulePreviewFlyout, + openMigrationRuleDetails: openRulePreview, + } = useMigrationRuleDetailsFlyout({ + ruleActionsFactory, + }); + + const rulesColumns = useMigrationRulesTableColumns({ + disableActions: isTableLoading, + openMigrationRuleDetails: openRulePreview, + installMigrationRule: installSingleRule, + }); + + return ( + <> + - - - - - - - - - - - loading={isTableLoading} - items={ruleMigrations} - pagination={pagination} - onChange={onTableChange} - selection={{ - selectable: () => true, - onSelectionChange: setSelectedRuleMigrations, - initialSelected: selectedRuleMigrations, - }} - itemId={'id'} - data-test-subj={'rules-translation-table'} - columns={rulesColumns} - /> + + - ) - } - /> - {rulePreviewFlyout} - - ); -}; - -export const RulesTable = React.memo(RulesTableComponent); -RulesTable.displayName = 'RulesTable'; + } + loadedContent={ + !translationStats?.rules.total ? ( + + ) : ( + <> + + + + + + + + + + + loading={isTableLoading} + items={ruleMigrations} + pagination={pagination} + onChange={onTableChange} + selection={{ + selectable: () => true, + onSelectionChange: setSelectedRuleMigrations, + initialSelected: selectedRuleMigrations, + }} + itemId={'id'} + data-test-subj={'rules-translation-table'} + columns={rulesColumns} + /> + + ) + } + /> + {rulePreviewFlyout} + + ); + } +); +MigrationRulesTable.displayName = 'MigrationRulesTable'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/search_field.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/search_field.tsx index 5bd18851ba595..7b7a576cb1dd9 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/search_field.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/search_field.tsx @@ -7,19 +7,9 @@ import type { ChangeEvent } from 'react'; import React, { useCallback, useEffect, useState } from 'react'; -import styled from 'styled-components'; import { EuiFieldSearch, EuiFlexItem } from '@elastic/eui'; import * as i18n from './translations'; -const SearchBarWrapper = styled(EuiFlexItem)` - min-width: 200px; - & .euiPopover { - // This is needed to "cancel" styles passed down from EuiTourStep that - // interfere with EuiFieldSearch and don't allow it to take the full width - display: block; - } -`; - interface SearchFieldProps { initialValue?: string; onSearch: (value: string) => void; @@ -39,7 +29,7 @@ export const SearchField: React.FC = React.memo( }, [initialValue]); return ( - + = React.memo( onSearch={onSearch} data-test-subj="ruleSearchField" /> - + ); } ); diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/actions.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/actions.tsx index 7122949dee907..45de70582d4b1 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/actions.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/actions.tsx @@ -17,14 +17,14 @@ import type { TableColumn } from './constants'; interface ActionNameProps { disableActions?: boolean; migrationRule: RuleMigration; - openMigrationRulePreview: (migrationRule: RuleMigration) => void; + openMigrationRuleDetails: (migrationRule: RuleMigration) => void; installMigrationRule: (migrationRule: RuleMigration, enable?: boolean) => void; } const ActionName = ({ disableActions, migrationRule, - openMigrationRulePreview, + openMigrationRuleDetails, installMigrationRule, }: ActionNameProps) => { const { navigateToApp } = useKibana().services.application; @@ -72,7 +72,7 @@ const ActionName = ({ { - openMigrationRulePreview(migrationRule); + openMigrationRuleDetails(migrationRule); }} data-test-subj="editRule" > @@ -83,13 +83,13 @@ const ActionName = ({ interface CreateActionsColumnProps { disableActions?: boolean; - openMigrationRulePreview: (migrationRule: RuleMigration) => void; + openMigrationRuleDetails: (migrationRule: RuleMigration) => void; installMigrationRule: (migrationRule: RuleMigration, enable?: boolean) => void; } export const createActionsColumn = ({ disableActions, - openMigrationRulePreview, + openMigrationRuleDetails, installMigrationRule, }: CreateActionsColumnProps): TableColumn => { return { @@ -100,7 +100,7 @@ export const createActionsColumn = ({ ); diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/name.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/name.tsx index 7b7cf228895fc..085a2f5c6a254 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/name.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table_columns/name.tsx @@ -14,14 +14,14 @@ import type { TableColumn } from './constants'; interface NameProps { name: string; rule: RuleMigration; - openMigrationRulePreview: (rule: RuleMigration) => void; + openMigrationRuleDetails: (rule: RuleMigration) => void; } -const Name = ({ name, rule, openMigrationRulePreview }: NameProps) => { +const Name = ({ name, rule, openMigrationRuleDetails }: NameProps) => { return ( { - openMigrationRulePreview(rule); + openMigrationRuleDetails(rule); }} data-test-subj="ruleName" > @@ -31,15 +31,15 @@ const Name = ({ name, rule, openMigrationRulePreview }: NameProps) => { }; export const createNameColumn = ({ - openMigrationRulePreview, + openMigrationRuleDetails, }: { - openMigrationRulePreview: (rule: RuleMigration) => void; + openMigrationRuleDetails: (rule: RuleMigration) => void; }): TableColumn => { return { field: 'original_rule.title', name: i18n.COLUMN_NAME, render: (value: RuleMigration['original_rule']['title'], rule: RuleMigration) => ( - + ), sortable: true, truncateText: true, diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx index 171fe0c451826..60f0ed94862ca 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/status_badge/index.tsx @@ -19,31 +19,27 @@ const statusToColorMap: Record = { untranslatable: euiColorVis9, }; -interface Props { +interface StatusBadgeProps { value?: RuleMigrationTranslationResult; installedRuleId?: string; 'data-test-subj'?: string; } -const StatusBadgeComponent: React.FC = ({ - value, - installedRuleId, - 'data-test-subj': dataTestSubj = 'translation-result', -}) => { - const translationResult = installedRuleId ? 'full' : value ?? 'untranslatable'; - const displayValue = convertTranslationResultIntoText(translationResult); - const color = statusToColorMap[translationResult]; +export const StatusBadge: React.FC = React.memo( + ({ value, installedRuleId, 'data-test-subj': dataTestSubj = 'translation-result' }) => { + const translationResult = installedRuleId ? 'full' : value ?? 'untranslatable'; + const displayValue = convertTranslationResultIntoText(translationResult); + const color = statusToColorMap[translationResult]; - return ( - - {displayValue} - - ); -}; - -export const StatusBadge = React.memo(StatusBadgeComponent); + return ( + + {displayValue} + + ); + } +); StatusBadge.displayName = 'StatusBadge'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/index.tsx deleted file mode 100644 index b6dce09c311e1..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/index.tsx +++ /dev/null @@ -1,246 +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 { FC, PropsWithChildren } from 'react'; -import React, { useMemo, useState, useEffect } from 'react'; -import styled from 'styled-components'; -import { css } from '@emotion/css'; -import { euiThemeVars } from '@kbn/ui-theme'; -import { - EuiButtonEmpty, - EuiTitle, - EuiFlyout, - EuiFlyoutHeader, - EuiFlyoutBody, - EuiFlyoutFooter, - EuiTabbedContent, - EuiSpacer, - EuiFlexGroup, - EuiFlexItem, - useGeneratedHtmlId, -} from '@elastic/eui'; -import type { EuiTabbedContentTab, EuiTabbedContentProps, EuiFlyoutProps } from '@elastic/eui'; - -import { - DEFAULT_TRANSLATION_RISK_SCORE, - DEFAULT_TRANSLATION_SEVERITY, -} from '../../../../../common/siem_migrations/constants'; -import type { RuleMigration } from '../../../../../common/siem_migrations/model/rule_migration.gen'; -import { - RuleOverviewTab, - useOverviewTabSections, -} from '../../../../detection_engine/rule_management/components/rule_details/rule_overview_tab'; -import { - type RuleResponse, - type Severity, -} from '../../../../../common/api/detection_engine/model/rule_schema'; - -import * as i18n from './translations'; -import { - DEFAULT_DESCRIPTION_LIST_COLUMN_WIDTHS, - LARGE_DESCRIPTION_LIST_COLUMN_WIDTHS, -} from './constants'; -import { TranslationTab } from './translation_tab'; - -const StyledEuiFlyoutBody = styled(EuiFlyoutBody)` - .euiFlyoutBody__overflow { - display: flex; - flex: 1; - overflow: hidden; - - .euiFlyoutBody__overflowContent { - flex: 1; - overflow: hidden; - padding: ${({ theme }) => `0 ${theme.eui.euiSizeL} 0`}; - } - } -`; - -const StyledFlexGroup = styled(EuiFlexGroup)` - height: 100%; -`; - -const StyledEuiFlexItem = styled(EuiFlexItem)` - &.euiFlexItem { - flex: 1 0 0; - overflow: hidden; - } -`; - -const StyledEuiTabbedContent = styled(EuiTabbedContent)` - display: flex; - flex: 1; - flex-direction: column; - overflow: hidden; - - > [role='tabpanel'] { - display: flex; - flex: 1; - flex-direction: column; - overflow: hidden; - overflow-y: auto; - - ::-webkit-scrollbar { - -webkit-appearance: none; - width: 7px; - } - - ::-webkit-scrollbar-thumb { - border-radius: 4px; - background-color: rgba(0, 0, 0, 0.5); - -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5); - } - } -`; - -/* - * Fixes tabs to the top and allows the content to scroll. - */ -const ScrollableFlyoutTabbedContent = (props: EuiTabbedContentProps) => ( - - - - - -); - -const tabPaddingClassName = css` - padding: 0 ${euiThemeVars.euiSizeM} ${euiThemeVars.euiSizeXL} ${euiThemeVars.euiSizeM}; -`; - -export const TabContentPadding: FC> = ({ children }) => ( -
{children}
-); - -interface TranslationDetailsFlyoutProps { - ruleActions?: React.ReactNode; - ruleMigration: RuleMigration; - size?: EuiFlyoutProps['size']; - extraTabs?: EuiTabbedContentTab[]; - closeFlyout: () => void; -} - -export const TranslationDetailsFlyout = ({ - ruleActions, - ruleMigration, - size = 'm', - extraTabs = [], - closeFlyout, -}: TranslationDetailsFlyoutProps) => { - const { expandedOverviewSections, toggleOverviewSection } = useOverviewTabSections(); - - const rule: RuleResponse = useMemo(() => { - const esqlLanguage = ruleMigration.elastic_rule?.query_language ?? 'esql'; - return { - type: esqlLanguage, - language: esqlLanguage, - name: ruleMigration.elastic_rule?.title, - description: ruleMigration.elastic_rule?.description, - query: ruleMigration.elastic_rule?.query, - - // Default values - severity: (ruleMigration.elastic_rule?.severity as Severity) ?? DEFAULT_TRANSLATION_SEVERITY, - risk_score: DEFAULT_TRANSLATION_RISK_SCORE, - from: 'now-360s', - to: 'now', - interval: '5m', - } as RuleResponse; // TODO: we need to adjust RuleOverviewTab to allow partial RuleResponse as a parameter - }, [ruleMigration]); - - const translationTab: EuiTabbedContentTab = useMemo( - () => ({ - id: 'translation', - name: i18n.TRANSLATION_TAB_LABEL, - content: ( - - - - ), - }), - [ruleMigration] - ); - - const overviewTab: EuiTabbedContentTab = useMemo( - () => ({ - id: 'overview', - name: i18n.OVERVIEW_TAB_LABEL, - content: ( - - - - ), - }), - [rule, size, expandedOverviewSections, toggleOverviewSection] - ); - - const tabs = useMemo(() => { - return [...extraTabs, translationTab, overviewTab]; - }, [extraTabs, translationTab, overviewTab]); - - const [selectedTabId, setSelectedTabId] = useState(tabs[0].id); - const selectedTab = tabs.find((tab) => tab.id === selectedTabId) ?? tabs[0]; - - useEffect(() => { - if (!tabs.find((tab) => tab.id === selectedTabId)) { - // Switch to first tab if currently selected tab is not available for this rule - setSelectedTabId(tabs[0].id); - } - }, [tabs, selectedTabId]); - - const onTabClick = (tab: EuiTabbedContentTab) => { - setSelectedTabId(tab.id); - }; - - const migrationsRulesFlyoutTitleId = useGeneratedHtmlId({ - prefix: 'migrationRulesFlyoutTitle', - }); - - return ( - - - -

{rule.name}

-
- -
- - - - - - - - {i18n.DISMISS_BUTTON_LABEL} - - - {ruleActions} - - -
- ); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/rule_query.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/rule_query.tsx deleted file mode 100644 index 50977cafb18d0..0000000000000 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/translation_details_flyout/translation_tab/rule_query.tsx +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React, { useMemo } from 'react'; -import { EuiMarkdownEditor, EuiMarkdownFormat, EuiTitle } from '@elastic/eui'; -import { SideHeader } from '../../../../../detection_engine/rule_management/components/rule_details/three_way_diff/components/side_header'; -import { FinalSideHelpInfo } from '../../../../../detection_engine/rule_management/components/rule_details/three_way_diff/final_side/final_side_help_info'; -import * as i18n from './translations'; - -interface RuleQueryProps { - title: string; - query: string; - canEdit?: boolean; -} - -export const RuleQueryComponent = ({ title, query, canEdit }: RuleQueryProps) => { - const queryTextComponent = useMemo(() => { - if (canEdit) { - return ( - {}} - height={400} - initialViewMode={'viewing'} - /> - ); - } else { - return {query}; - } - }, [canEdit, query]); - return ( - <> - - -

- {title} - -

-
-
- {queryTextComponent} - - ); -}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/unknown_migration/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/unknown_migration/index.tsx index 0a33869eff418..dd48d3b357e18 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/unknown_migration/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/unknown_migration/index.tsx @@ -9,7 +9,7 @@ import React from 'react'; import { EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import * as i18n from './translations'; -const UnknownMigrationComponent = () => { +export const UnknownMigration: React.FC = React.memo(() => { return ( { title={

{i18n.UNKNOWN_MIGRATION}

} titleSize="s" body={i18n.UNKNOWN_MIGRATION_BODY} - data-test-subj="noMigrationsAvailable" + data-test-subj="unknownMigration" />
); -}; - -export const UnknownMigration = React.memo(UnknownMigrationComponent); +}); UnknownMigration.displayName = 'UnknownMigration'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rule_preview_flyout.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rule_preview_flyout.tsx similarity index 55% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rule_preview_flyout.tsx rename to x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rule_preview_flyout.tsx index 1721b4e280aad..4823e48de97c6 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rule_preview_flyout.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rule_preview_flyout.tsx @@ -9,28 +9,28 @@ import type { ReactNode } from 'react'; import React, { useCallback, useState, useMemo } from 'react'; import type { EuiTabbedContentTab } from '@elastic/eui'; import type { RuleMigration } from '../../../../common/siem_migrations/model/rule_migration.gen'; -import { TranslationDetailsFlyout } from '../components/translation_details_flyout'; +import { MigrationRuleDetailsFlyout } from '../components/rule_details_flyout'; -interface UseRulePreviewFlyoutParams { +interface UseMigrationRuleDetailsFlyoutParams { ruleActionsFactory: (ruleMigration: RuleMigration, closeRulePreview: () => void) => ReactNode; extraTabsFactory?: (ruleMigration: RuleMigration) => EuiTabbedContentTab[]; } -interface UseRulePreviewFlyoutResult { - rulePreviewFlyout: ReactNode; - openRulePreview: (rule: RuleMigration) => void; - closeRulePreview: () => void; +interface UseMigrationRuleDetailsFlyoutResult { + migrationRuleDetailsFlyout: ReactNode; + openMigrationRuleDetails: (rule: RuleMigration) => void; + closeMigrationRuleDetails: () => void; } -export function useRulePreviewFlyout({ +export function useMigrationRuleDetailsFlyout({ extraTabsFactory, ruleActionsFactory, -}: UseRulePreviewFlyoutParams): UseRulePreviewFlyoutResult { - const [ruleMigration, setRuleMigrationForPreview] = useState(); - const closeRulePreview = useCallback(() => setRuleMigrationForPreview(undefined), []); +}: UseMigrationRuleDetailsFlyoutParams): UseMigrationRuleDetailsFlyoutResult { + const [ruleMigration, setMigrationRuleForPreview] = useState(); + const closeMigrationRuleDetails = useCallback(() => setMigrationRuleForPreview(undefined), []); const ruleActions = useMemo( - () => ruleMigration && ruleActionsFactory(ruleMigration, closeRulePreview), - [ruleMigration, ruleActionsFactory, closeRulePreview] + () => ruleMigration && ruleActionsFactory(ruleMigration, closeMigrationRuleDetails), + [ruleMigration, ruleActionsFactory, closeMigrationRuleDetails] ); const extraTabs = useMemo( () => (ruleMigration && extraTabsFactory ? extraTabsFactory(ruleMigration) : []), @@ -38,18 +38,18 @@ export function useRulePreviewFlyout({ ); return { - rulePreviewFlyout: ruleMigration && ( - ), - openRulePreview: useCallback((rule: RuleMigration) => { - setRuleMigrationForPreview(rule); + openMigrationRuleDetails: useCallback((rule: RuleMigration) => { + setMigrationRuleForPreview(rule); }, []), - closeRulePreview, + closeMigrationRuleDetails, }; } diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rules_table_columns.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rules_table_columns.tsx similarity index 78% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rules_table_columns.tsx rename to x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rules_table_columns.tsx index 219d2f17de441..b8b37bccaffd3 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_rules_table_columns.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_migration_rules_table_columns.tsx @@ -17,28 +17,28 @@ import { createUpdatedColumn, } from '../components/rules_table_columns'; -export const useRulesTableColumns = ({ +export const useMigrationRulesTableColumns = ({ disableActions, - openMigrationRulePreview, + openMigrationRuleDetails, installMigrationRule, }: { disableActions?: boolean; - openMigrationRulePreview: (rule: RuleMigration) => void; + openMigrationRuleDetails: (rule: RuleMigration) => void; installMigrationRule: (migrationRule: RuleMigration, enable?: boolean) => void; }): TableColumn[] => { return useMemo( () => [ createUpdatedColumn(), - createNameColumn({ openMigrationRulePreview }), + createNameColumn({ openMigrationRuleDetails }), createStatusColumn(), createRiskScoreColumn(), createSeverityColumn(), createActionsColumn({ disableActions, - openMigrationRulePreview, + openMigrationRuleDetails, installMigrationRule, }), ], - [disableActions, installMigrationRule, openMigrationRulePreview] + [disableActions, installMigrationRule, openMigrationRuleDetails] ); }; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/constants.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/constants.ts similarity index 100% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/api/hooks/constants.ts rename to x-pack/plugins/security_solution/public/siem_migrations/rules/logic/constants.ts diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_rules.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_rules.ts index 92f06b2e37428..5f59ceb9f76c2 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_rules.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_rules.ts @@ -5,9 +5,14 @@ * 2.0. */ +import { useQuery, useQueryClient } from '@tanstack/react-query'; +import { replaceParams } from '@kbn/openapi-common/shared'; +import { useCallback } from 'react'; +import { SIEM_RULE_MIGRATION_PATH } from '../../../../common/siem_migrations/constants'; import { useAppToasts } from '../../../common/hooks/use_app_toasts'; -import { useGetMigrationRulesQuery } from '../api/hooks/use_get_migration_rules_query'; import * as i18n from './translations'; +import { getRuleMigrations } from '../api'; +import { DEFAULT_QUERY_OPTIONS } from './constants'; export const useGetMigrationRules = (params: { migrationId: string; @@ -17,9 +22,47 @@ export const useGetMigrationRules = (params: { }) => { const { addError } = useAppToasts(); - return useGetMigrationRulesQuery(params, { - onError: (error) => { - addError(error, { title: i18n.GET_MIGRATION_RULES_FAILURE }); + const { migrationId } = params; + const SPECIFIC_MIGRATION_PATH = replaceParams(SIEM_RULE_MIGRATION_PATH, { + migration_id: migrationId, + }); + + return useQuery( + ['GET', SPECIFIC_MIGRATION_PATH, params], + async ({ signal }) => { + const response = await getRuleMigrations({ signal, ...params }); + + return { ruleMigrations: response.data, total: response.total }; }, + { + ...DEFAULT_QUERY_OPTIONS, + onError: (error) => { + addError(error, { title: i18n.GET_MIGRATION_RULES_FAILURE }); + }, + } + ); +}; + +/** + * We should use this hook to invalidate the rule migrations cache. For + * example, rule migrations mutations, like installing a rule, should lead to cache invalidation. + * + * @returns A rule migrations cache invalidation callback + */ +export const useInvalidateGetMigrationRules = (migrationId: string) => { + const queryClient = useQueryClient(); + + const SPECIFIC_MIGRATION_PATH = replaceParams(SIEM_RULE_MIGRATION_PATH, { + migration_id: migrationId, }); + + return useCallback(() => { + /** + * Invalidate all queries that start with SPECIFIC_MIGRATION_PATH. This + * includes the in-memory query cache and paged query cache. + */ + queryClient.invalidateQueries(['GET', SPECIFIC_MIGRATION_PATH], { + refetchType: 'active', + }); + }, [SPECIFIC_MIGRATION_PATH, queryClient]); }; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_translation_stats.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_translation_stats.ts index 081876ba266a9..b19a1133e3061 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_translation_stats.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_translation_stats.ts @@ -5,16 +5,58 @@ * 2.0. */ +import { replaceParams } from '@kbn/openapi-common/shared'; +import { useQuery, useQueryClient } from '@tanstack/react-query'; +import { useCallback } from 'react'; +import type { GetRuleMigrationTranslationStatsResponse } from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH } from '../../../../common/siem_migrations/constants'; import { useAppToasts } from '../../../common/hooks/use_app_toasts'; -import { useGetMigrationTranslationStatsQuery } from '../api/hooks/use_get_migration_translation_stats_query'; import * as i18n from './translations'; +import { getRuleMigrationTranslationStats } from '../api'; +import { DEFAULT_QUERY_OPTIONS } from './constants'; export const useGetMigrationTranslationStats = (migrationId: string) => { const { addError } = useAppToasts(); - return useGetMigrationTranslationStatsQuery(migrationId, { - onError: (error) => { - addError(error, { title: i18n.GET_MIGRATION_TRANSLATION_STATS_FAILURE }); + const SPECIFIC_MIGRATION_TRANSLATION_PATH = replaceParams( + SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, + { + migration_id: migrationId, + } + ); + return useQuery( + ['GET', SPECIFIC_MIGRATION_TRANSLATION_PATH], + async ({ signal }) => { + return getRuleMigrationTranslationStats({ migrationId, signal }); }, - }); + { + ...DEFAULT_QUERY_OPTIONS, + onError: (error) => { + addError(error, { title: i18n.GET_MIGRATION_TRANSLATION_STATS_FAILURE }); + }, + } + ); +}; + +/** + * We should use this hook to invalidate the translation stats cache. For + * example, rule migrations mutations, like installing a rule, should lead to cache invalidation. + * + * @returns A translation stats cache invalidation callback + */ +export const useInvalidateGetMigrationTranslationStats = (migrationId: string) => { + const queryClient = useQueryClient(); + + const SPECIFIC_MIGRATION_TRANSLATION_PATH = replaceParams( + SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, + { + migration_id: migrationId, + } + ); + + return useCallback(() => { + queryClient.invalidateQueries(['GET', SPECIFIC_MIGRATION_TRANSLATION_PATH], { + refetchType: 'active', + }); + }, [SPECIFIC_MIGRATION_TRANSLATION_PATH, queryClient]); }; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_migration_rules.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_migration_rules.ts index dcc19f290f87f..755faa03bff14 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_migration_rules.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_migration_rules.ts @@ -5,16 +5,35 @@ * 2.0. */ +import { useMutation } from '@tanstack/react-query'; +import { SIEM_RULE_MIGRATION_INSTALL_PATH } from '../../../../common/siem_migrations/constants'; +import type { InstallMigrationRulesResponse } from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; import { useAppToasts } from '../../../common/hooks/use_app_toasts'; -import { useInstallMigrationRulesMutation } from '../api/hooks/use_install_migration_rules_mutation'; import * as i18n from './translations'; +import { useInvalidateGetMigrationRules } from './use_get_migration_rules'; +import { useInvalidateGetMigrationTranslationStats } from './use_get_migration_translation_stats'; +import { installMigrationRules } from '../api'; + +export const INSTALL_MIGRATION_RULES_MUTATION_KEY = ['POST', SIEM_RULE_MIGRATION_INSTALL_PATH]; export const useInstallMigrationRules = (migrationId: string) => { const { addError } = useAppToasts(); - return useInstallMigrationRulesMutation(migrationId, { - onError: (error) => { - addError(error, { title: i18n.INSTALL_MIGRATION_RULES_FAILURE }); - }, - }); + const invalidateGetRuleMigrations = useInvalidateGetMigrationRules(migrationId); + const invalidateGetMigrationTranslationStats = + useInvalidateGetMigrationTranslationStats(migrationId); + + return useMutation( + (ids: string[]) => installMigrationRules({ migrationId, ids }), + { + mutationKey: INSTALL_MIGRATION_RULES_MUTATION_KEY, + onError: (error) => { + addError(error, { title: i18n.INSTALL_MIGRATION_RULES_FAILURE }); + }, + onSettled: () => { + invalidateGetRuleMigrations(); + invalidateGetMigrationTranslationStats(); + }, + } + ); }; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_translated_migration_rules.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_translated_migration_rules.ts index 67ee3f099aca0..b0d9e11136396 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_translated_migration_rules.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_install_translated_migration_rules.ts @@ -5,16 +5,38 @@ * 2.0. */ +import { useMutation } from '@tanstack/react-query'; +import type { InstallTranslatedMigrationRulesResponse } from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH } from '../../../../common/siem_migrations/constants'; import { useAppToasts } from '../../../common/hooks/use_app_toasts'; -import { useInstallTranslatedMigrationRulesMutation } from '../api/hooks/use_install_translated_migration_rules_mutation'; import * as i18n from './translations'; +import { useInvalidateGetMigrationRules } from './use_get_migration_rules'; +import { useInvalidateGetMigrationTranslationStats } from './use_get_migration_translation_stats'; +import { installTranslatedMigrationRules } from '../api'; + +export const INSTALL_ALL_MIGRATION_RULES_MUTATION_KEY = [ + 'POST', + SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH, +]; export const useInstallTranslatedMigrationRules = (migrationId: string) => { const { addError } = useAppToasts(); - return useInstallTranslatedMigrationRulesMutation(migrationId, { - onError: (error) => { - addError(error, { title: i18n.INSTALL_MIGRATION_RULES_FAILURE }); - }, - }); + const invalidateGetRuleMigrations = useInvalidateGetMigrationRules(migrationId); + const invalidateGetMigrationTranslationStats = + useInvalidateGetMigrationTranslationStats(migrationId); + + return useMutation( + () => installTranslatedMigrationRules({ migrationId }), + { + mutationKey: INSTALL_ALL_MIGRATION_RULES_MUTATION_KEY, + onError: (error) => { + addError(error, { title: i18n.INSTALL_MIGRATION_RULES_FAILURE }); + }, + onSettled: () => { + invalidateGetRuleMigrations(); + invalidateGetMigrationTranslationStats(); + }, + } + ); }; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx index dabdb83cccbab..018aa5d77559e 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx @@ -9,22 +9,23 @@ import React, { useEffect, useMemo } from 'react'; import { EuiSkeletonLoading, EuiSkeletonText, EuiSkeletonTitle } from '@elastic/eui'; import type { RouteComponentProps } from 'react-router-dom'; +import { SiemMigrationTaskStatus } from '../../../../common/siem_migrations/constants'; import { useNavigation } from '../../../common/lib/kibana'; import { HeaderPage } from '../../../common/components/header_page'; import { SecuritySolutionPageWrapper } from '../../../common/components/page_wrapper'; import { SecurityPageName } from '../../../app/types'; import * as i18n from './translations'; -import { RulesTable } from '../components/rules_table'; +import { MigrationRulesTable } from '../components/rules_table'; import { NeedAdminForUpdateRulesCallOut } from '../../../detections/components/callouts/need_admin_for_update_callout'; import { MissingPrivilegesCallOut } from '../../../detections/components/callouts/missing_privileges_callout'; import { HeaderButtons } from '../components/header_buttons'; import { UnknownMigration } from '../components/unknown_migration'; import { useLatestStats } from '../hooks/use_latest_stats'; -type RulesMigrationPageProps = RouteComponentProps<{ migrationId?: string }>; +type MigrationRulesPageProps = RouteComponentProps<{ migrationId?: string }>; -export const RulesPage: React.FC = React.memo( +export const MigrationRulesPage: React.FC = React.memo( ({ match: { params: { migrationId }, @@ -34,13 +35,13 @@ export const RulesPage: React.FC = React.memo( const { data: ruleMigrationsStatsAll, isLoading: isLoadingMigrationsStats } = useLatestStats(); - const migrationsIds = useMemo(() => { + const finishedRuleMigrationsStats = useMemo(() => { if (isLoadingMigrationsStats || !ruleMigrationsStatsAll?.length) { return []; } - return ruleMigrationsStatsAll - .filter((migration) => migration.status === 'finished') - .map((migration) => migration.id); + return ruleMigrationsStatsAll.filter( + (migration) => migration.status === SiemMigrationTaskStatus.FINISHED + ); }, [isLoadingMigrationsStats, ruleMigrationsStatsAll]); useEffect(() => { @@ -49,27 +50,30 @@ export const RulesPage: React.FC = React.memo( } // Navigate to landing page if there are no migrations - if (!migrationsIds.length) { + if (!finishedRuleMigrationsStats.length) { navigateTo({ deepLinkId: SecurityPageName.landing, path: 'siem_migrations' }); return; } // Navigate to the most recent migration if none is selected if (!migrationId) { - navigateTo({ deepLinkId: SecurityPageName.siemMigrationsRules, path: migrationsIds[0] }); + navigateTo({ + deepLinkId: SecurityPageName.siemMigrationsRules, + path: finishedRuleMigrationsStats[0].id, + }); } - }, [isLoadingMigrationsStats, migrationId, migrationsIds, navigateTo]); + }, [isLoadingMigrationsStats, migrationId, finishedRuleMigrationsStats, navigateTo]); const onMigrationIdChange = (selectedId?: string) => { navigateTo({ deepLinkId: SecurityPageName.siemMigrationsRules, path: selectedId }); }; const content = useMemo(() => { - if (!migrationId || !migrationsIds.includes(migrationId)) { + if (!migrationId || !finishedRuleMigrationsStats.some((stats) => stats.id === migrationId)) { return ; } - return ; - }, [migrationId, migrationsIds]); + return ; + }, [migrationId, finishedRuleMigrationsStats]); return ( <> @@ -79,7 +83,7 @@ export const RulesPage: React.FC = React.memo( @@ -99,4 +103,4 @@ export const RulesPage: React.FC = React.memo( ); } ); -RulesPage.displayName = 'RulesPage'; +MigrationRulesPage.displayName = 'MigrationRulesPage'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts index a872d79a46027..3162cc3d58e63 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts @@ -12,7 +12,7 @@ import { SiemMigrationTaskStatus } from '../../../../common/siem_migrations/cons import type { StartPluginsDependencies } from '../../../types'; import { ExperimentalFeaturesService } from '../../../common/experimental_features_service'; import { licenseService } from '../../../common/hooks/use_license'; -import { getRuleMigrationsStatsAll, startRuleMigration } from '../api/api'; +import { getRuleMigrationsStatsAll, startRuleMigration } from '../api'; import type { RuleMigrationTask } from '../types'; import { getSuccessToast } from './success_notification'; import { RuleMigrationsStorage } from './storage'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts index b395fa0199de8..4c704e97179c0 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts @@ -11,14 +11,3 @@ export interface RuleMigrationTask extends RuleMigrationTaskStats { /** The sequential number of the migration */ number: number; } - -export interface InstallRulesProps { - migrationId: string; - ids: string[]; - signal?: AbortSignal; -} - -export interface InstallTranslatedRulesProps { - migrationId: string; - signal?: AbortSignal; -} diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts index 756b4b99612c7..df86a1f953656 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts @@ -42,7 +42,7 @@ const installPrebuiltRules = async ( const rulesToUpdate: UpdateRuleMigrationInput[] = []; const assetsToInstall: PrebuiltRuleAsset[] = []; rulesToInstall.forEach((ruleToInstall) => { - // If prebuilt rule has already been install, then just update migration rule with the installed rule id + // If prebuilt rule has already been installed, then just update migration rule with the installed rule id const installedRule = currentRules.find( (rule) => rule.rule_id === ruleToInstall.elastic_rule?.prebuilt_rule_id ); From 082e47622c32782b5ee1b942c4b49016e19db7f1 Mon Sep 17 00:00:00 2001 From: "Eyo O. Eyo" <7893459+eokoneyo@users.noreply.github.com> Date: Wed, 4 Dec 2024 17:10:37 +0100 Subject: [PATCH 036/141] [React18] Migrate test suites to account for testing library upgrades security-threat-hunting-explore (#201142) This PR migrates test suites that use `renderHook` from the library `@testing-library/react-hooks` to adopt the equivalent and replacement of `renderHook` from the export that is now available from `@testing-library/react`. This work is required for the planned migration to react18. ## Context In this PR, usages of `waitForNextUpdate` that previously could have been destructured from `renderHook` are now been replaced with `waitFor` exported from `@testing-library/react`, furthermore `waitFor` that would also have been destructured from the same renderHook result is now been replaced with `waitFor` from the export of `@testing-library/react`. ***Why is `waitFor` a sufficient enough replacement for `waitForNextUpdate`, and better for testing values subject to async computations?*** WaitFor will retry the provided callback if an error is returned, till the configured timeout elapses. By default the retry interval is `50ms` with a timeout value of `1000ms` that effectively translates to at least 20 retries for assertions placed within waitFor. See https://testing-library.com/docs/dom-testing-library/api-async/#waitfor for more information. This however means that for person's writing tests, said person has to be explicit about expectations that describe the internal state of the hook being tested. This implies checking for instance when a react query hook is being rendered, there's an assertion that said hook isn't loading anymore. In this PR you'd notice that this pattern has been adopted, with most existing assertions following an invocation of `waitForNextUpdate` being placed within a `waitFor` invocation. In some cases the replacement is simply a `waitFor(() => new Promise((resolve) => resolve(null)))` (many thanks to @kapral18, for point out exactly why this works), where this suffices the assertions that follow aren't placed within a waitFor so this PR doesn't get larger than it needs to be. It's also worth pointing out this PR might also contain changes to test and application code to improve said existing test. ### What to do next? 1. Review the changes in this PR. 2. If you think the changes are correct, approve the PR. ## Any questions? If you have any questions or need help with this PR, please leave comments in this PR. --------- Co-authored-by: Elastic Machine Co-authored-by: Karen Grigoryan Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../src/context/cell_actions_context.test.tsx | 7 +- ...use_data_grid_column_cell_actions.test.tsx | 107 ++++---- ...ions.test.ts => use_load_actions.test.tsx} | 121 +++++---- .../data_quality_context/index.test.tsx | 6 +- .../use_historical_results/index.test.tsx | 2 +- .../hooks/use_ilm_explain/index.test.tsx | 250 ++++++++---------- .../pattern/hooks/use_stats/index.test.tsx | 167 ++++++------ .../use_current_window_width/index.test.tsx | 5 +- .../use_abort_controller_ref/index.test.tsx | 2 +- .../hooks/use_indices_check/index.test.tsx | 26 +- .../hooks/use_is_mounted_ref/index.test.tsx | 2 +- .../use_stored_pattern_results/index.test.tsx | 10 +- .../hooks/use_results_rollup/index.test.tsx | 2 +- .../navigation/src/links.test.tsx | 3 +- .../navigation/src/navigation.test.ts | 3 +- .../use_insert_timeline/index.test.tsx | 2 +- .../common/components/charts/common.test.tsx | 2 +- .../guided_onboarding_tour/tour.test.tsx | 79 +++--- .../guided_onboarding_tour/tour.tsx | 6 +- .../breadcrumbs/use_breadcrumbs_nav.test.ts | 2 +- .../use_security_solution_navigation.test.tsx | 3 +- .../page/use_refetch_by_session.test.tsx | 16 +- .../use_fetch_security_dashboards.test.ts | 53 ++-- .../use_fetch_security_tags.test.ts | 50 ++-- ...se_create_security_dashboard_link.test.tsx | 52 ++-- .../hooks/use_dashboard_renderer.test.tsx | 9 +- .../use_dashboard_view_prompt_state.test.tsx | 15 +- .../use_security_dashboards_table.test.tsx | 201 ++++++++------ .../group_take_action_items.test.tsx | 191 ++++++------- .../containers/authentications/index.test.tsx | 2 +- .../explore/containers/fields/index.test.ts | 2 +- .../containers/hosts/details/index.test.tsx | 3 +- .../hosts/containers/hosts/index.test.tsx | 2 +- .../uncommon_processes/index.test.tsx | 2 +- .../network/containers/details/index.test.tsx | 3 +- .../containers/network_dns/index.test.tsx | 2 +- .../containers/network_http/index.test.tsx | 2 +- .../network_top_countries/index.test.tsx | 2 +- .../network_top_n_flow/index.test.tsx | 2 +- .../network/containers/tls/index.test.tsx | 2 +- .../network/containers/users/index.test.tsx | 2 +- .../users/observed_details/index.test.tsx | 3 +- .../use_alerts_by_status.test.tsx | 7 +- ...lerts_by_status_visualization_data.test.ts | 2 +- .../use_cases_by_status.test.tsx | 107 ++++---- .../cases_table/use_case_items.test.ts | 91 +++---- .../hooks/use_navigate_to_timeline.test.ts | 2 +- .../use_host_alerts_items.test.ts | 4 +- .../use_rule_alerts_items.test.ts | 4 +- .../soc_trends/hooks/use_cases_mttr.test.tsx | 155 ++++++----- .../hooks/use_critical_alerts.test.tsx | 172 ++++++------ .../soc_trends/hooks/use_soc_trends.test.tsx | 18 +- .../use_user_alerts_items.test.ts | 6 +- .../containers/overview_host/index.test.tsx | 3 +- .../overview_network/index.test.tsx | 3 +- 55 files changed, 1001 insertions(+), 996 deletions(-) rename packages/kbn-cell-actions/src/hooks/{use_load_actions.test.ts => use_load_actions.test.tsx} (64%) diff --git a/packages/kbn-cell-actions/src/context/cell_actions_context.test.tsx b/packages/kbn-cell-actions/src/context/cell_actions_context.test.tsx index 81a3802407563..d3bb117d2c8a1 100644 --- a/packages/kbn-cell-actions/src/context/cell_actions_context.test.tsx +++ b/packages/kbn-cell-actions/src/context/cell_actions_context.test.tsx @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import React, { type PropsWithChildren } from 'react'; import { makeAction, makeActionContext } from '../mocks/helpers'; import { CellActionsProvider, useCellActionsContext } from './cell_actions_context'; @@ -29,9 +29,8 @@ describe('CellActionContext', () => { }); it('should throw error when context not found', () => { - const { result } = renderHook(useCellActionsContext); - expect(result.error).toEqual( - new Error('No CellActionsContext found. Please wrap the application with CellActionsProvider') + expect(() => renderHook(useCellActionsContext)).toThrow( + /No CellActionsContext found. Please wrap the application with CellActionsProvider/ ); }); diff --git a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx index 2d6417cd73bd3..b55587ad887d0 100644 --- a/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx +++ b/packages/kbn-cell-actions/src/hooks/use_data_grid_column_cell_actions.test.tsx @@ -11,8 +11,7 @@ import type { JSXElementConstructor, MutableRefObject } from 'react'; import React from 'react'; import type { EuiDataGridColumnCellActionProps, EuiDataGridRefProps } from '@elastic/eui'; import { EuiButtonEmpty, type EuiDataGridColumnCellAction } from '@elastic/eui'; -import { render, waitFor } from '@testing-library/react'; -import { renderHook } from '@testing-library/react-hooks'; +import { render, waitFor, renderHook } from '@testing-library/react'; import { makeAction } from '../mocks/helpers'; import type { UseDataGridColumnsCellActionsProps } from './use_data_grid_column_cell_actions'; import { useDataGridColumnsCellActions } from './use_data_grid_column_cell_actions'; @@ -72,75 +71,88 @@ describe('useDataGridColumnsCellActions', () => { }); it('should return array with actions for each columns', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); expect(result.current).toHaveLength(0); - await waitForNextUpdate(); - - expect(result.current).toHaveLength(columns.length); - expect(result.current[0]).toHaveLength(actions.length); + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + expect(result.current[0]).toHaveLength(actions.length); + }); }); it('should call getCellValue with the proper params', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + }); renderCellAction(result.current[0][0], { rowIndex: 0 }); renderCellAction(result.current[0][1], { rowIndex: 1 }); renderCellAction(result.current[1][0], { rowIndex: 0 }); renderCellAction(result.current[1][1], { rowIndex: 1 }); - expect(mockGetCellValue).toHaveBeenCalledTimes(4); - expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 0); - expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 1); - expect(mockGetCellValue).toHaveBeenCalledWith(field2.name, 0); - expect(mockGetCellValue).toHaveBeenCalledWith(field2.name, 1); + await waitFor(() => { + expect(mockGetCellValue).toHaveBeenCalledTimes(4); + expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 0); + expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 1); + expect(mockGetCellValue).toHaveBeenCalledWith(field2.name, 0); + expect(mockGetCellValue).toHaveBeenCalledWith(field2.name, 1); + }); }); it('should render the cell actions', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + }); const cellAction1 = renderCellAction(result.current[0][0]); - expect(cellAction1.getByTestId(`dataGridColumnCellAction-${action1.id}`)).toBeInTheDocument(); - expect(cellAction1.getByText(action1.getDisplayName())).toBeInTheDocument(); + await waitFor(() => { + expect(cellAction1.getByTestId(`dataGridColumnCellAction-${action1.id}`)).toBeInTheDocument(); + expect(cellAction1.getByText(action1.getDisplayName())).toBeInTheDocument(); + }); const cellAction2 = renderCellAction(result.current[0][1]); - expect(cellAction2.getByTestId(`dataGridColumnCellAction-${action2.id}`)).toBeInTheDocument(); - expect(cellAction2.getByText(action2.getDisplayName())).toBeInTheDocument(); + await waitFor(() => { + expect(cellAction2.getByTestId(`dataGridColumnCellAction-${action2.id}`)).toBeInTheDocument(); + expect(cellAction2.getByText(action2.getDisplayName())).toBeInTheDocument(); + }); }); it('should execute the action on click', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); - - const cellAction = renderCellAction(result.current[0][0]); - cellAction.getByTestId(`dataGridColumnCellAction-${action1.id}`).click(); + await waitFor(() => { + const cellAction = renderCellAction(result.current[0][0]); + cellAction.getByTestId(`dataGridColumnCellAction-${action1.id}`).click(); + }); - waitFor(() => { + await waitFor(() => { expect(action1.execute).toHaveBeenCalled(); }); }); it('should execute the action with correct context', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); + + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + }); const cellAction1 = renderCellAction(result.current[0][0], { rowIndex: 1 }); @@ -194,18 +206,19 @@ describe('useDataGridColumnsCellActions', () => { }); it('should execute the action with correct page value', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); - const cellAction = renderCellAction(result.current[0][0], { rowIndex: 25 }); + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + }); + const cellAction = renderCellAction(result.current[0][0], { rowIndex: 25 }); cellAction.getByTestId(`dataGridColumnCellAction-${action1.id}`).click(); - expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 25); - await waitFor(() => { + expect(mockGetCellValue).toHaveBeenCalledWith(field1.name, 25); expect(action1.execute).toHaveBeenCalledWith( expect.objectContaining({ data: [ @@ -225,13 +238,15 @@ describe('useDataGridColumnsCellActions', () => { }); it('should close popover then action executed', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: useDataGridColumnsCellActionsProps, }); - await waitForNextUpdate(); - const cellAction = renderCellAction(result.current[0][0], { rowIndex: 25 }); + await waitFor(() => { + expect(result.current).toHaveLength(columns.length); + }); + const cellAction = renderCellAction(result.current[0][0], { rowIndex: 25 }); cellAction.getByTestId(`dataGridColumnCellAction-${action1.id}`).click(); await waitFor(() => { @@ -240,30 +255,30 @@ describe('useDataGridColumnsCellActions', () => { }); it('should return empty array of actions when list of fields is empty', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: { ...useDataGridColumnsCellActionsProps, fields: [], }, }); - await waitForNextUpdate(); - - expect(result.current).toBeInstanceOf(Array); - expect(result.current.length).toBe(0); + await waitFor(() => { + expect(result.current).toBeInstanceOf(Array); + expect(result.current.length).toBe(0); + }); }); it('should return empty array of actions when list of fields is undefined', async () => { - const { result, waitForNextUpdate } = renderHook(useDataGridColumnsCellActions, { + const { result } = renderHook(useDataGridColumnsCellActions, { initialProps: { ...useDataGridColumnsCellActionsProps, fields: undefined, }, }); - await waitForNextUpdate(); - - expect(result.current).toBeInstanceOf(Array); - expect(result.current.length).toBe(0); + await waitFor(() => { + expect(result.current).toBeInstanceOf(Array); + expect(result.current.length).toBe(0); + }); }); }); diff --git a/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts b/packages/kbn-cell-actions/src/hooks/use_load_actions.test.tsx similarity index 64% rename from packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts rename to packages/kbn-cell-actions/src/hooks/use_load_actions.test.tsx index b4aeb7795274d..a7690ce822591 100644 --- a/packages/kbn-cell-actions/src/hooks/use_load_actions.test.ts +++ b/packages/kbn-cell-actions/src/hooks/use_load_actions.test.tsx @@ -7,7 +7,8 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { act, renderHook } from '@testing-library/react-hooks'; +import React from 'react'; +import { waitFor, renderHook, act, screen } from '@testing-library/react'; import { makeAction, makeActionContext } from '../mocks/helpers'; import { useBulkLoadActions, useLoadActions, useLoadActionsFn } from './use_load_actions'; @@ -17,6 +18,22 @@ jest.mock('../context/cell_actions_context', () => ({ useCellActionsContext: () => ({ getActions: mockGetActions }), })); +class ErrorCatcher extends React.Component { + state: { error: Error | null } = { error: null }; + + static getDerivedStateFromError(error: Error) { + return { error }; + } + + render() { + return this.state.error ? ( +
{this.state.error.toString()}
+ ) : ( + this.props.children + ); + } +} + describe('loadActions hooks', () => { const actionContext = makeActionContext(); @@ -26,7 +43,7 @@ describe('loadActions hooks', () => { }); describe('useLoadActions', () => { it('should load actions when called', async () => { - const { result, waitForNextUpdate } = renderHook(useLoadActions, { + const { result } = renderHook(useLoadActions, { initialProps: actionContext, }); @@ -35,22 +52,24 @@ describe('loadActions hooks', () => { expect(mockGetActions).toHaveBeenCalledTimes(1); expect(mockGetActions).toHaveBeenCalledWith(actionContext); - await waitForNextUpdate(); - - expect(result.current.value).toEqual([action]); - expect(result.current.loading).toEqual(false); + await waitFor(() => { + expect(result.current.value).toEqual([action]); + expect(result.current.loading).toEqual(false); + }); }); it('should throw error when getAction is rejected', async () => { const message = 'some division by 0'; mockGetActions.mockRejectedValueOnce(Error(message)); - const { result, waitForNextUpdate } = renderHook(useLoadActions, { + const { result } = renderHook(useLoadActions, { initialProps: actionContext, + wrapper: ErrorCatcher, // Error prints any received error to the screen }); - await waitForNextUpdate(); - expect(result.error?.message).toEqual(message); + expect(result.current.loading).toEqual(true); + + await waitFor(() => expect(screen.getByTestId('leaf-error')).toBeInTheDocument()); }); it('filters out disabled actions', async () => { @@ -58,19 +77,17 @@ describe('loadActions hooks', () => { const actionDisabled = makeAction('action-disabled'); mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); - const { result, waitForNextUpdate } = renderHook(() => + const { result } = renderHook(() => useLoadActions(actionContext, { disabledActionTypes: [actionDisabled.type] }) ); - await waitForNextUpdate(); - - expect(result.current.value).toEqual([actionEnabled]); + await waitFor(() => expect(result.current.value).toEqual([actionEnabled])); }); }); describe('useLoadActionsFn', () => { it('should load actions when returned function is called', async () => { - const { result, waitForNextUpdate } = renderHook(useLoadActionsFn); + const { result } = renderHook(useLoadActionsFn); const [{ value: valueBeforeCall, loading: loadingBeforeCall }, loadActions] = result.current; expect(valueBeforeCall).toBeUndefined(); @@ -87,28 +104,27 @@ describe('loadActions hooks', () => { expect(mockGetActions).toHaveBeenCalledTimes(1); expect(mockGetActions).toHaveBeenCalledWith(actionContext); - await waitForNextUpdate(); - - const [{ value: valueAfterUpdate, loading: loadingAfterUpdate }] = result.current; - expect(valueAfterUpdate).toEqual([action]); - expect(loadingAfterUpdate).toEqual(false); + await waitFor(() => { + const [{ value: valueAfterUpdate, loading: loadingAfterUpdate }] = result.current; + expect(valueAfterUpdate).toEqual([action]); + expect(loadingAfterUpdate).toEqual(false); + }); }); it('should throw error when getAction is rejected', async () => { const message = 'some division by 0'; - mockGetActions.mockRejectedValueOnce(Error(message)); + mockGetActions.mockRejectedValueOnce(new Error(message)); - const { result, waitForNextUpdate } = renderHook(useLoadActionsFn); + const { result } = renderHook(useLoadActionsFn, { + wrapper: ErrorCatcher, // Error prints any received error to the screen + }); const [_, loadActions] = result.current; - expect(result.error).toBeUndefined(); - act(() => { loadActions(actionContext); }); - await waitForNextUpdate(); - expect(result.error?.message).toEqual(message); + await waitFor(() => expect(screen.getByTestId('leaf-error')).toBeInTheDocument()); }); it('filters out disabled actions types', async () => { @@ -116,7 +132,7 @@ describe('loadActions hooks', () => { const actionDisabled = makeAction('action-disabled'); mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); - const { result, waitForNextUpdate } = renderHook(() => + const { result } = renderHook(() => useLoadActionsFn({ disabledActionTypes: [actionDisabled.type] }) ); const [_, loadActions] = result.current; @@ -124,10 +140,10 @@ describe('loadActions hooks', () => { act(() => { loadActions(actionContext); }); - await waitForNextUpdate(); - - const [{ value: valueAfterUpdate }] = result.current; - expect(valueAfterUpdate).toEqual([actionEnabled]); + await waitFor(() => { + const [{ value: valueAfterUpdate }] = result.current; + expect(valueAfterUpdate).toEqual([actionEnabled]); + }); }); }); @@ -136,7 +152,7 @@ describe('loadActions hooks', () => { const actionContexts = [actionContext, actionContext2]; it('should load bulk actions array when called', async () => { - const { result, waitForNextUpdate } = renderHook(useBulkLoadActions, { + const { result } = renderHook(useBulkLoadActions, { initialProps: actionContexts, }); @@ -146,22 +162,24 @@ describe('loadActions hooks', () => { expect(mockGetActions).toHaveBeenCalledWith(actionContext); expect(mockGetActions).toHaveBeenCalledWith(actionContext2); - await waitForNextUpdate(); - - expect(result.current.value).toEqual([[action], [action]]); - expect(result.current.loading).toEqual(false); + await waitFor(() => { + expect(result.current.value).toEqual([[action], [action]]); + expect(result.current.loading).toEqual(false); + }); }); it('should throw error when getAction is rejected', async () => { const message = 'some division by 0'; mockGetActions.mockRejectedValueOnce(Error(message)); - const { result, waitForNextUpdate } = renderHook(useBulkLoadActions, { + const { result } = renderHook(useBulkLoadActions, { initialProps: actionContexts, + wrapper: ErrorCatcher, // Error prints any received error to the screen }); - await waitForNextUpdate(); - expect(result.error?.message).toEqual(message); + expect(result.current.loading).toEqual(true); + + await waitFor(() => expect(screen.getByTestId('leaf-error')).toBeInTheDocument()); }); it('filters out disabled actions types', async () => { @@ -169,40 +187,37 @@ describe('loadActions hooks', () => { const actionDisabled = makeAction('action-disabled'); mockGetActions.mockResolvedValue([actionEnabled, actionDisabled]); - const { result, waitForNextUpdate } = renderHook(() => + const { result } = renderHook(() => useBulkLoadActions(actionContexts, { disabledActionTypes: [actionDisabled.type] }) ); - await waitForNextUpdate(); - - expect(result.current.value).toEqual([[actionEnabled], [actionEnabled]]); + await waitFor(() => expect(result.current.value).toEqual([[actionEnabled], [actionEnabled]])); }); it('should re-render when contexts is changed', async () => { - const { result, rerender, waitForNextUpdate } = renderHook(useBulkLoadActions, { + const { result, rerender } = renderHook(useBulkLoadActions, { initialProps: [actionContext], }); - await waitForNextUpdate(); - expect(mockGetActions).toHaveBeenCalledWith(actionContext); + await waitFor(() => expect(mockGetActions).toHaveBeenCalledWith(actionContext)); rerender([actionContext2]); - await waitForNextUpdate(); - expect(mockGetActions).toHaveBeenCalledWith(actionContext2); + await waitFor(() => expect(mockGetActions).toHaveBeenCalledWith(actionContext2)); mockGetActions.mockClear(); rerender([]); - await waitForNextUpdate(); - expect(mockGetActions).toHaveBeenCalledTimes(0); + await waitFor(() => { + expect(mockGetActions).toHaveBeenCalledTimes(0); - expect(result.current.value).toBeInstanceOf(Array); - expect(result.current.value).toHaveLength(0); - expect(result.current.loading).toBe(false); + expect(result.current.value).toBeInstanceOf(Array); + expect(result.current.value).toHaveLength(0); + expect(result.current.loading).toBe(false); + }); }); it('should return the same array after re-render when contexts is undefined', async () => { - const { result, rerender, waitFor } = renderHook(useBulkLoadActions, { + const { result, rerender } = renderHook(useBulkLoadActions, { initialProps: undefined, }); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_context/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_context/index.test.tsx index a82bf7d6c432b..7fbab73c1025a 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_context/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_context/index.test.tsx @@ -7,7 +7,7 @@ import { Theme } from '@elastic/charts'; import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import React, { FC, PropsWithChildren } from 'react'; import { DataQualityProvider, useDataQualityContext } from '.'; @@ -78,9 +78,7 @@ describe('DataQualityContext', () => { }); test('it throws an error when useDataQualityContext hook is used without a DataQualityContext', () => { - const { result } = renderHook(useDataQualityContext); - - expect(result.error).toEqual( + expect(() => renderHook(useDataQualityContext)).toThrow( new Error('useDataQualityContext must be used within a DataQualityProvider') ); }); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_historical_results/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_historical_results/index.test.tsx index 36a1a24192e99..19ab082c03477 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_historical_results/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_historical_results/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { mockHistoricalResult } from '../../../../../mock/historical_results/mock_historical_results_response'; import { TestDataQualityProviders } from '../../../../../mock/test_providers/test_providers'; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_ilm_explain/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_ilm_explain/index.test.tsx index 93309af1bc0e3..0929278e3429a 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_ilm_explain/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_ilm_explain/index.test.tsx @@ -5,13 +5,13 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import React from 'react'; import { DataQualityProvider } from '../../../../../data_quality_context'; import { mockIlmExplain } from '../../../../../mock/ilm_explain/mock_ilm_explain'; import { ERROR_LOADING_ILM_EXPLAIN } from '../../../../../translations'; -import { useIlmExplain, UseIlmExplain } from '.'; +import { useIlmExplain } from '.'; import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; import { Theme } from '@elastic/charts'; @@ -23,60 +23,62 @@ const mockTelemetryEvents = { reportDataQualityCheckAllCompleted: mockReportDataQualityCheckAllClicked, }; const { toasts } = notificationServiceMock.createSetupContract(); -const ContextWrapper: React.FC<{ children: React.ReactNode; isILMAvailable: boolean }> = ({ +const ContextWrapper: React.FC> = ({ children, isILMAvailable = true, -}) => ( - true)} - endDate={null} - formatBytes={jest.fn()} - formatNumber={jest.fn()} - isAssistantEnabled={true} - lastChecked={'2023-03-28T22:27:28.159Z'} - openCreateCaseFlyout={jest.fn()} - patterns={['auditbeat-*']} - setLastChecked={jest.fn()} - startDate={null} - theme={{ - background: { - color: '#000', - }, - }} - baseTheme={ - { +}) => { + return ( + true)} + endDate={null} + formatBytes={jest.fn()} + formatNumber={jest.fn()} + isAssistantEnabled={true} + lastChecked={'2023-03-28T22:27:28.159Z'} + openCreateCaseFlyout={jest.fn()} + patterns={['auditbeat-*']} + setLastChecked={jest.fn()} + startDate={null} + theme={{ background: { color: '#000', }, - } as Theme - } - ilmPhases={['hot', 'warm', 'unmanaged']} - selectedIlmPhaseOptions={[ - { - label: 'Hot', - value: 'hot', - }, - { - label: 'Warm', - value: 'warm', - }, - { - label: 'Unmanaged', - value: 'unmanaged', - }, - ]} - setSelectedIlmPhaseOptions={jest.fn()} - defaultStartTime={'now-7d'} - defaultEndTime={'now'} - > - {children} - -); + }} + baseTheme={ + { + background: { + color: '#000', + }, + } as Theme + } + ilmPhases={['hot', 'warm', 'unmanaged']} + selectedIlmPhaseOptions={[ + { + label: 'Hot', + value: 'hot', + }, + { + label: 'Warm', + value: 'warm', + }, + { + label: 'Unmanaged', + value: 'unmanaged', + }, + ]} + setSelectedIlmPhaseOptions={jest.fn()} + defaultStartTime={'now-7d'} + defaultEndTime={'now'} + > + {children} + + ); +}; const pattern = 'packetbeat-*'; @@ -86,125 +88,107 @@ describe('useIlmExplain', () => { }); describe('successful response from the ilm api', () => { - let ilmExplainResult: UseIlmExplain | undefined; - - beforeEach(async () => { + function setup() { mockHttpFetch.mockResolvedValue(mockIlmExplain); - - const { result, waitForNextUpdate } = renderHook(() => useIlmExplain(pattern), { + return renderHook(() => useIlmExplain(pattern), { wrapper: ContextWrapper, }); - await waitForNextUpdate(); - ilmExplainResult = await result.current; - }); + } test('it returns the expected ilmExplain map', async () => { - expect(ilmExplainResult?.ilmExplain).toEqual(mockIlmExplain); + const { result } = setup(); + await waitFor(() => { + expect(result.current.loading).toBe(false); + expect(result.current.ilmExplain).toEqual(mockIlmExplain); + }); }); test('it returns loading: false, because the data has loaded', async () => { - expect(ilmExplainResult?.loading).toBe(false); + const { result } = setup(); + + await waitFor(() => { + expect(result.current.loading).toBe(true); + }); + + await waitFor(() => { + expect(result.current.loading).toBe(false); + }); }); test('it returns a null error, because no errors occurred', async () => { - expect(ilmExplainResult?.error).toBeNull(); + const { result } = setup(); + await waitFor(() => { + expect(result.current.loading).toBe(false); + expect(result.current.error).toBeNull(); + }); }); }); describe('skip ilm api when isILMAvailable is false', () => { - let ilmExplainResult: UseIlmExplain | undefined; - - beforeEach(async () => { - const { result, waitForNextUpdate } = renderHook(() => useIlmExplain(pattern), { - wrapper: ({ children }: React.PropsWithChildren<{}>) => ( - true)} - endDate={null} - formatBytes={jest.fn()} - formatNumber={jest.fn()} - isAssistantEnabled={true} - lastChecked={'2023-03-28T22:27:28.159Z'} - openCreateCaseFlyout={jest.fn()} - patterns={['auditbeat-*']} - setLastChecked={jest.fn()} - startDate={null} - theme={{ - background: { - color: '#000', - }, - }} - baseTheme={ - { - background: { - color: '#000', - }, - } as Theme - } - ilmPhases={['hot', 'warm', 'unmanaged']} - selectedIlmPhaseOptions={[ - { - label: 'Hot', - value: 'hot', - }, - { - label: 'Warm', - value: 'warm', - }, - { - label: 'Unmanaged', - value: 'unmanaged', - }, - ]} - setSelectedIlmPhaseOptions={jest.fn()} - defaultStartTime={'now-7d'} - defaultEndTime={'now'} - > - {children} - - ), + function setup() { + mockHttpFetch.mockResolvedValue(mockIlmExplain); + return renderHook(() => useIlmExplain(pattern), { + wrapper: (props) => , }); - await waitForNextUpdate(); - ilmExplainResult = await result.current; - }); + } test('it returns the expected ilmExplain map', async () => { - expect(ilmExplainResult?.ilmExplain).toEqual(null); + const { result } = setup(); + await waitFor(() => { + expect(result.current.loading).toBe(false); + expect(result.current.ilmExplain).toEqual(null); + }); }); test('it returns loading: false, because the request is aborted', async () => { - expect(ilmExplainResult?.loading).toBe(false); + const { result } = setup(); + + await waitFor(() => { + expect(result.current.loading).toBe(true); + }); + + await waitFor(() => { + expect(result.current.loading).toBe(false); + }); }); }); describe('fetch rejects with an error', () => { - let ilmExplainResult: UseIlmExplain | undefined; const errorMessage = 'simulated error'; - - beforeEach(async () => { + function setup() { mockHttpFetch.mockRejectedValue(new Error(errorMessage)); - - const { result, waitForNextUpdate } = renderHook(() => useIlmExplain(pattern), { + return renderHook(() => useIlmExplain(pattern), { wrapper: ContextWrapper, }); - await waitForNextUpdate(); - ilmExplainResult = await result.current; - }); + } test('it returns a null ilmExplain, because an error occurred', async () => { - expect(ilmExplainResult?.ilmExplain).toBeNull(); + const { result } = setup(); + + await waitFor(() => { + expect(result.current.loading).toBe(false); + expect(result.current.ilmExplain).toBeNull(); + }); }); test('it returns loading: false, because data loading reached a terminal state', async () => { - expect(ilmExplainResult?.loading).toBe(false); + const { result } = setup(); + + await waitFor(() => { + expect(result.current.loading).toBe(true); + }); + + await waitFor(() => { + expect(result.current.loading).toBe(false); + }); }); test('it returns the expected error', async () => { - expect(ilmExplainResult?.error).toEqual(ERROR_LOADING_ILM_EXPLAIN(errorMessage)); + const { result } = setup(); + await waitFor(() => { + expect(result.current.loading).toBe(false); + expect(result.current.error).toEqual(ERROR_LOADING_ILM_EXPLAIN(errorMessage)); + }); }); }); }); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_stats/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_stats/index.test.tsx index ae4ee9a7bd2c4..0e65d0ccf2e1b 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_stats/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/hooks/use_stats/index.test.tsx @@ -5,12 +5,12 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import React, { FC, PropsWithChildren } from 'react'; import { DataQualityProvider } from '../../../../../data_quality_context'; import { ERROR_LOADING_STATS } from '../../../../../translations'; -import { useStats, UseStats } from '.'; +import { useStats } from '.'; import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; import { Theme } from '@elastic/charts'; import { mockStatsAuditbeatIndex } from '../../../../../mock/stats/mock_stats_auditbeat_index'; @@ -24,63 +24,14 @@ const mockTelemetryEvents = { }; const { toasts } = notificationServiceMock.createSetupContract(); -const ContextWrapper: FC> = ({ children }) => ( +const ContextWrapper: FC> = ({ + children, + isILMAvailable = true, +}) => ( true)} - endDate={null} - formatBytes={jest.fn()} - formatNumber={jest.fn()} - isAssistantEnabled={true} - lastChecked={'2023-03-28T22:27:28.159Z'} - openCreateCaseFlyout={jest.fn()} - patterns={['auditbeat-*']} - setLastChecked={jest.fn()} - startDate={null} - theme={{ - background: { - color: '#000', - }, - }} - baseTheme={ - { - background: { - color: '#000', - }, - } as Theme - } - ilmPhases={['hot', 'warm', 'unmanaged']} - selectedIlmPhaseOptions={[ - { - label: 'Hot', - value: 'hot', - }, - { - label: 'Warm', - value: 'warm', - }, - { - label: 'Unmanaged', - value: 'unmanaged', - }, - ]} - setSelectedIlmPhaseOptions={jest.fn()} - defaultStartTime={'now-7d'} - defaultEndTime={'now'} - > - {children} - -); - -const ContextWrapperILMNotAvailable: FC> = ({ children }) => ( - true)} @@ -141,79 +92,113 @@ describe('useStats', () => { }); describe('query with date range when ILM is not available', () => { - const queryParams = { - isILMAvailable: false, - startDate, - endDate, - }; - - beforeEach(async () => { + test('it calls the stats api with the expected params', async () => { mockHttpFetch.mockResolvedValue(mockStatsAuditbeatIndex); - const { waitForNextUpdate } = renderHook(() => useStats({ pattern, startDate, endDate }), { - wrapper: ContextWrapperILMNotAvailable, + const queryParams = { + isILMAvailable: false, + startDate, + endDate, + }; + + renderHook(() => useStats({ pattern, startDate, endDate }), { + wrapper: ({ children }) => ( + {children} + ), + }); + + await waitFor(() => { + expect(mockHttpFetch.mock.calls[0][1].query).toEqual(queryParams); }); - await waitForNextUpdate(); - }); - test(`it calls the stats api with the expected params`, async () => { - expect(mockHttpFetch.mock.calls[0][1].query).toEqual(queryParams); }); }); describe('successful response from the stats api', () => { - let statsResult: UseStats | undefined; - - beforeEach(async () => { + function setup() { mockHttpFetch.mockResolvedValue(mockStatsAuditbeatIndex); - - const { result, waitForNextUpdate } = renderHook(() => useStats(params), { + const { result } = renderHook(() => useStats(params), { wrapper: ContextWrapper, }); - await waitForNextUpdate(); - statsResult = await result.current; - }); + + return result; + } test('it returns the expected stats', async () => { - expect(statsResult?.stats).toEqual(mockStatsAuditbeatIndex); + const result = setup(); + await waitFor(() => { + expect(result.current.loading).toBe(false); + expect(result.current.stats).toEqual(mockStatsAuditbeatIndex); + }); }); test('it returns loading: false, because the data has loaded', async () => { - expect(statsResult?.loading).toBe(false); + const result = setup(); + + await waitFor(() => { + expect(result.current.loading).toBe(true); + }); + + await waitFor(() => { + expect(result.current.loading).toBe(false); + }); }); test('it returns a null error, because no errors occurred', async () => { - expect(statsResult?.error).toBeNull(); + const result = setup(); + await waitFor(() => { + expect(result.current.loading).toBe(false); + expect(result.current.error).toBeNull(); + }); }); - test(`it calls the stats api with the expected params`, async () => { - expect(mockHttpFetch.mock.calls[0][1].query).toEqual({ isILMAvailable: true }); + test('it calls the stats api with the expected params', async () => { + setup(); + await waitFor(() => { + expect(mockHttpFetch.mock.calls[0][1].query).toEqual({ isILMAvailable: true }); + }); }); }); describe('fetch rejects with an error', () => { - let statsResult: UseStats | undefined; const errorMessage = 'simulated error'; - beforeEach(async () => { + function setup() { mockHttpFetch.mockRejectedValue(new Error(errorMessage)); - const { result, waitForNextUpdate } = renderHook(() => useStats(params), { + const { result } = renderHook(() => useStats(params), { wrapper: ContextWrapper, }); - await waitForNextUpdate(); - statsResult = await result.current; - }); + + return result; + } test('it returns null stats, because an error occurred', async () => { - expect(statsResult?.stats).toBeNull(); + const result = setup(); + await waitFor(() => { + expect(result.current.loading).toBe(false); + expect(result.current.stats).toBeNull(); + }); }); test('it returns loading: false, because data loading reached a terminal state', async () => { - expect(statsResult?.loading).toBe(false); + const result = setup(); + + await waitFor(() => { + expect(result.current.loading).toBe(true); + }); + + await waitFor(() => { + expect(result.current.loading).toBe(false); + }); }); test('it returns the expected error', async () => { - expect(statsResult?.error).toEqual(ERROR_LOADING_STATS(errorMessage)); + const result = setup(); + + await waitFor(() => { + expect(result.current.loading).toBe(false); + expect(result.current.error).toEqual(ERROR_LOADING_STATS(errorMessage)); + }); }); }); }); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/hooks/use_current_window_width/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/hooks/use_current_window_width/index.test.tsx index ffbeb191e5582..1a6d6da746835 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/hooks/use_current_window_width/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/data_quality_details/indices_details/pattern/index_check_flyout/hooks/use_current_window_width/index.test.tsx @@ -5,10 +5,8 @@ * 2.0. */ -import { renderHook, act } from '@testing-library/react-hooks'; - import { useCurrentWindowWidth } from '.'; -import { fireEvent } from '@testing-library/react'; +import { fireEvent, renderHook, act } from '@testing-library/react'; describe('useCurrentWidthWidth', () => { beforeEach(() => { @@ -20,7 +18,6 @@ describe('useCurrentWidthWidth', () => { }); it('return current window width', () => { const { result } = renderHook(() => useCurrentWindowWidth()); - expect(result.error).toBeUndefined(); expect(result.current).toBe(window.innerWidth); }); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_abort_controller_ref/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_abort_controller_ref/index.test.tsx index 98e617ca3a909..2d52c30541e3f 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_abort_controller_ref/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_abort_controller_ref/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { useAbortControllerRef } from '.'; describe('useAbortControllerRef', () => { diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_indices_check/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_indices_check/index.test.tsx index f16803936794d..aef164ed71654 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_indices_check/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_indices_check/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { act, waitFor, renderHook } from '@testing-library/react'; import { useIndicesCheck } from '.'; @@ -82,9 +82,7 @@ describe('useIndicesCheck', () => { describe('when checkIndex completes', () => { it('should set correct data', async () => { - const { result, waitFor } = renderHook(() => - useIndicesCheck({ onCheckCompleted: jest.fn() }) - ); + const { result } = renderHook(() => useIndicesCheck({ onCheckCompleted: jest.fn() })); const httpFetchMock = jest.fn((route) => { if (route.startsWith('/internal/ecs_data_quality_dashboard/mappings')) { @@ -124,9 +122,7 @@ describe('useIndicesCheck', () => { describe('errors', () => { describe('when mappings request errors', () => { it('should set mappingsError', async () => { - const { result, waitFor } = renderHook(() => - useIndicesCheck({ onCheckCompleted: jest.fn() }) - ); + const { result } = renderHook(() => useIndicesCheck({ onCheckCompleted: jest.fn() })); const httpFetchMock = jest.fn((route) => { if (route.startsWith('/internal/ecs_data_quality_dashboard/mappings')) { @@ -160,9 +156,7 @@ describe('useIndicesCheck', () => { describe('when unallowed values request errors', () => { it('should set unallowedValuesError', async () => { - const { result, waitFor } = renderHook(() => - useIndicesCheck({ onCheckCompleted: jest.fn() }) - ); + const { result } = renderHook(() => useIndicesCheck({ onCheckCompleted: jest.fn() })); const httpFetchMock = jest.fn((route) => { if (route.startsWith('/internal/ecs_data_quality_dashboard/mappings')) { @@ -232,9 +226,7 @@ describe('useIndicesCheck', () => { onStart?.(); }); - const { result, waitFor } = renderHook(() => - useIndicesCheck({ onCheckCompleted: jest.fn() }) - ); + const { result } = renderHook(() => useIndicesCheck({ onCheckCompleted: jest.fn() })); act(() => result.current.checkIndex({ @@ -257,7 +249,7 @@ describe('useIndicesCheck', () => { }); describe('when mappings are loading', () => { - it('it should set isLoadingMappings to true', () => { + it('it should set isLoadingMappings to true', async () => { const { checkIndexSpy } = getSpies(); checkIndexSpy.mockImplementation(async ({ onStart, onLoadMappingsStart }) => { @@ -265,9 +257,7 @@ describe('useIndicesCheck', () => { onLoadMappingsStart?.(); }); - const { result, waitFor } = renderHook(() => - useIndicesCheck({ onCheckCompleted: jest.fn() }) - ); + const { result } = renderHook(() => useIndicesCheck({ onCheckCompleted: jest.fn() })); act(() => result.current.checkIndex({ @@ -280,7 +270,7 @@ describe('useIndicesCheck', () => { }) ); - waitFor(() => + await waitFor(() => expect(result.current.checkState['auditbeat-custom-index-1']).toEqual({ ...getInitialCheckStateValue(), isChecking: true, diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_is_mounted_ref/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_is_mounted_ref/index.test.tsx index f32beafe61efe..e49d0f7b3323f 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_is_mounted_ref/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_is_mounted_ref/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { useIsMountedRef } from '.'; diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.test.tsx index 5f90890eea693..9642838371ea2 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/hooks/use_stored_pattern_results/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook, waitFor } from '@testing-library/react'; import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; import { getHistoricalResultStub } from '../../../../stub/get_historical_result_stub'; @@ -57,7 +57,7 @@ describe('useStoredPatternResults', () => { return Promise.reject(new Error('Invalid path')); }); - const { result, waitFor } = renderHook(() => + const { result } = renderHook(() => useStoredPatternResults({ patterns, toasts: mockToasts, @@ -68,7 +68,7 @@ describe('useStoredPatternResults', () => { }) ); - await waitFor(() => result.current.length > 0); + await waitFor(() => expect(result.current.length).toBeGreaterThan(0)); expect(httpFetch).toHaveBeenCalledTimes(2); @@ -141,7 +141,7 @@ describe('useStoredPatternResults', () => { return Promise.reject(new Error('Invalid path')); }); - const { result, waitFor } = renderHook(() => + const { result } = renderHook(() => useStoredPatternResults({ patterns, toasts: mockToasts, @@ -152,7 +152,7 @@ describe('useStoredPatternResults', () => { }) ); - await waitFor(() => result.current.length > 0); + await waitFor(() => expect(result.current.length).toBeGreaterThan(0)); expect(httpFetch).toHaveBeenCalledTimes(2); diff --git a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.test.tsx b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.test.tsx index 7dc74731d66dd..21e342b120109 100644 --- a/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.test.tsx +++ b/x-pack/packages/security-solution/ecs_data_quality_dashboard/impl/data_quality_panel/hooks/use_results_rollup/index.test.tsx @@ -9,7 +9,7 @@ // so when tests are run in different timezones, the results are consistent process.env.TZ = 'UTC'; -import { renderHook, act } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; import type { TelemetryEvents } from '../../types'; diff --git a/x-pack/packages/security-solution/navigation/src/links.test.tsx b/x-pack/packages/security-solution/navigation/src/links.test.tsx index 8c9bd983e837e..59c2ab3188931 100644 --- a/x-pack/packages/security-solution/navigation/src/links.test.tsx +++ b/x-pack/packages/security-solution/navigation/src/links.test.tsx @@ -5,8 +5,7 @@ * 2.0. */ import React from 'react'; -import { renderHook } from '@testing-library/react-hooks'; -import { render } from '@testing-library/react'; +import { render, renderHook } from '@testing-library/react'; import { useGetLinkUrl, useGetLinkProps, diff --git a/x-pack/packages/security-solution/navigation/src/navigation.test.ts b/x-pack/packages/security-solution/navigation/src/navigation.test.ts index a4290563476ea..bf5013a977fff 100644 --- a/x-pack/packages/security-solution/navigation/src/navigation.test.ts +++ b/x-pack/packages/security-solution/navigation/src/navigation.test.ts @@ -6,8 +6,7 @@ */ import { useGetAppUrl, useNavigateTo } from './navigation'; import { mockGetUrlForApp, mockNavigateToApp, mockNavigateToUrl } from '../mocks/context'; -import { renderHook } from '@testing-library/react-hooks'; -import { fireEvent } from '@testing-library/react'; +import { fireEvent, renderHook } from '@testing-library/react'; jest.mock('./context'); diff --git a/x-pack/plugins/security_solution/public/cases/components/use_insert_timeline/index.test.tsx b/x-pack/plugins/security_solution/public/cases/components/use_insert_timeline/index.test.tsx index f49f6fe0e28ad..9f67c91d5eac9 100644 --- a/x-pack/plugins/security_solution/public/cases/components/use_insert_timeline/index.test.tsx +++ b/x-pack/plugins/security_solution/public/cases/components/use_insert_timeline/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { mockTimelineModel } from '../../../common/mock/timeline_results'; import { useFormatUrl } from '../../../common/components/link_to'; diff --git a/x-pack/plugins/security_solution/public/common/components/charts/common.test.tsx b/x-pack/plugins/security_solution/public/common/components/charts/common.test.tsx index 10234da2fac2f..f600eb501d189 100644 --- a/x-pack/plugins/security_solution/public/common/components/charts/common.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/charts/common.test.tsx @@ -7,7 +7,7 @@ import { shallow } from 'enzyme'; import React from 'react'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { useDarkMode } from '../../lib/kibana'; import type { ChartSeriesData } from './common'; diff --git a/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.test.tsx b/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.test.tsx index e3f85df557e80..68a790e0e023d 100644 --- a/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.test.tsx @@ -5,11 +5,12 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { waitFor, act, renderHook } from '@testing-library/react'; import { of } from 'rxjs'; + import { siemGuideId } from '../../../../common/guided_onboarding/siem_guide_config'; import { TourContextProvider, useTourContext } from './tour'; -import { SecurityStepId, securityTourConfig } from './tour_config'; +import { type AlertsCasesTourSteps, SecurityStepId, securityTourConfig } from './tour_config'; import { useKibana } from '../../lib/kibana'; jest.mock('../../lib/kibana'); @@ -44,7 +45,7 @@ describe('useTourContext', () => { // @ts-ignore const tourIds = [SecurityStepId.alertsCases]; describe.each(tourIds)('%s', (tourId: SecurityStepId) => { - it('if guidedOnboardingApi?.isGuideStepActive$ is false, isTourShown should be false', () => { + it('if guidedOnboardingApi?.isGuideStepActive$ is false, isTourShown should be false', async () => { (useKibana as jest.Mock).mockReturnValue({ services: { guidedOnboarding: { @@ -57,66 +58,80 @@ describe('useTourContext', () => { const { result } = renderHook(() => useTourContext(), { wrapper: TourContextProvider, }); - expect(result.current.isTourShown(tourId)).toBe(false); + await waitFor(() => { + expect(result.current.isTourShown(tourId)).toBe(false); + }); }); - it('if guidedOnboardingApi?.isGuideStepActive$ is true, isTourShown should be true', () => { + it('if guidedOnboardingApi?.isGuideStepActive$ is true, isTourShown should be true', async () => { const { result } = renderHook(() => useTourContext(), { wrapper: TourContextProvider, }); - expect(result.current.isTourShown(tourId)).toBe(true); + await waitFor(() => { + expect(result.current.isTourShown(tourId)).toBe(true); + }); }); it('endTourStep calls completeGuideStep with correct tourId', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useTourContext(), { - wrapper: TourContextProvider, - }); - await waitForNextUpdate(); + const { result } = renderHook(() => useTourContext(), { + wrapper: TourContextProvider, + }); + act(() => { result.current.endTourStep(tourId); + }); + await waitFor(() => { expect(mockCompleteGuideStep).toHaveBeenCalledWith(siemGuideId, tourId); }); }); - it('activeStep is initially 1', () => { + it('activeStep is initially 1', async () => { const { result } = renderHook(() => useTourContext(), { wrapper: TourContextProvider, }); - expect(result.current.activeStep).toBe(1); + await waitFor(() => { + expect(result.current.activeStep).toBe(1); + }); }); it('incrementStep properly increments for each tourId, and if attempted to increment beyond length of tour config steps resets activeStep to 1', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useTourContext(), { - wrapper: TourContextProvider, - }); - await waitForNextUpdate(); - const stepCount = securityTourConfig[tourId].length; + const { result } = renderHook(() => useTourContext(), { + wrapper: TourContextProvider, + }); + const stepCount = securityTourConfig[tourId].length; + act(() => { for (let i = 0; i < stepCount - 1; i++) { result.current.incrementStep(tourId); } - const lastStep = stepCount ? stepCount : 1; + }); + const lastStep = stepCount ? stepCount : 1; + await waitFor(() => { expect(result.current.activeStep).toBe(lastStep); + }); + act(() => { result.current.incrementStep(tourId); + }); + await waitFor(() => { expect(result.current.activeStep).toBe(1); }); }); it('setStep sets activeStep to step number argument', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useTourContext(), { - wrapper: TourContextProvider, - }); - await waitForNextUpdate(); + const { result } = renderHook(() => useTourContext(), { + wrapper: TourContextProvider, + }); + act(() => { result.current.setStep(tourId, 6); + }); + await waitFor(() => { expect(result.current.activeStep).toBe(6); }); }); it('does not setStep sets activeStep to non-existing step number', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useTourContext(), { - wrapper: TourContextProvider, - }); - await waitForNextUpdate(); - // @ts-expect-error testing invalid step - result.current.setStep(tourId, 88); + const { result } = renderHook(() => useTourContext(), { + wrapper: TourContextProvider, + }); + + act(() => { + result.current.setStep(tourId, 88 as AlertsCasesTourSteps); + }); + await waitFor(() => { expect(result.current.activeStep).toBe(1); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.tsx b/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.tsx index a4fca35acf56b..f622439dccd35 100644 --- a/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.tsx +++ b/x-pack/plugins/security_solution/public/common/components/guided_onboarding_tour/tour.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import type { ReactChild } from 'react'; +import type { FC, ReactNode } from 'react'; import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react'; import useObservable from 'react-use/lib/useObservable'; @@ -39,7 +39,7 @@ const initialState: TourContextValue = { const TourContext = createContext(initialState); -export const RealTourContextProvider = ({ children }: { children: ReactChild }) => { +export const RealTourContextProvider: FC<{ children: ReactNode }> = ({ children }) => { const { guidedOnboarding } = useKibana().services; const [hidden, setHidden] = useState(false); @@ -131,7 +131,7 @@ export const RealTourContextProvider = ({ children }: { children: ReactChild }) return {children}; }; -export const TourContextProvider = ({ children }: { children: ReactChild }) => { +export const TourContextProvider: FC<{ children: ReactNode }> = ({ children }) => { const { pathname } = useLocation(); const ContextProvider = useMemo( diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/use_breadcrumbs_nav.test.ts b/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/use_breadcrumbs_nav.test.ts index c20d1f4623fa7..e052d47b676da 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/use_breadcrumbs_nav.test.ts +++ b/x-pack/plugins/security_solution/public/common/components/navigation/breadcrumbs/use_breadcrumbs_nav.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import type { ChromeBreadcrumb } from '@kbn/core/public'; import type { GetSecuritySolutionUrl } from '../../link_to'; import { SecurityPageName } from '../../../../../common/constants'; diff --git a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_security_solution_navigation.test.tsx b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_security_solution_navigation.test.tsx index 0aed8dc19663b..c20b845f62ce8 100644 --- a/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_security_solution_navigation.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/navigation/use_security_solution_navigation/use_security_solution_navigation.test.tsx @@ -6,8 +6,7 @@ */ import React from 'react'; -import { render } from '@testing-library/react'; -import { renderHook } from '@testing-library/react-hooks'; +import { render, renderHook } from '@testing-library/react'; import { of } from 'rxjs'; import { useSecuritySolutionNavigation } from './use_security_solution_navigation'; diff --git a/x-pack/plugins/security_solution/public/common/components/page/use_refetch_by_session.test.tsx b/x-pack/plugins/security_solution/public/common/components/page/use_refetch_by_session.test.tsx index da5610d8c9ab2..1e7e66de24b80 100644 --- a/x-pack/plugins/security_solution/public/common/components/page/use_refetch_by_session.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/page/use_refetch_by_session.test.tsx @@ -4,17 +4,14 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { MutableRefObject } from 'react'; import React from 'react'; -import type { RenderHookResult } from '@testing-library/react-hooks'; -import { renderHook } from '@testing-library/react-hooks'; +import type { RenderHookResult } from '@testing-library/react'; +import { renderHook } from '@testing-library/react'; import { TestProviders } from '../../mock'; import { useKibana } from '../../lib/kibana'; import { InputsModelId } from '../../store/inputs/constants'; import { useRefetchByRestartingSession } from './use_refetch_by_session'; import { inputsActions } from '../../store/actions'; -import type { Refetch } from '../../store/inputs/model'; -import type { ISessionService } from '@kbn/data-plugin/public'; const wrapper = ({ children }: { children: React.ReactNode }) => ( {children} @@ -45,13 +42,8 @@ jest.mock('../../store/actions', () => { describe(`useRefetchByRestartingSession`, () => { let res: RenderHookResult< - { - children: React.ReactNode; - }, - { - session: MutableRefObject; - refetchByRestartingSession: Refetch; - } + ReturnType, + Parameters[0] >; const mockSessionStart = jest.fn().mockReturnValue('mockSessionId'); const mockSession = { diff --git a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_dashboards.test.ts b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_dashboards.test.ts index ced91801747c8..77dce4f64d57a 100644 --- a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_dashboards.test.ts +++ b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_dashboards.test.ts @@ -5,7 +5,7 @@ * 2.0. */ import type { HttpStart } from '@kbn/core/public'; -import { renderHook, act } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import { DashboardContextProvider } from '../context/dashboard_context'; import { useFetchSecurityDashboards } from './use_fetch_security_dashboards'; import { getTagsByName } from '../../common/containers/tags/api'; @@ -26,14 +26,6 @@ const renderUseFetchSecurityDashboards = () => wrapper: DashboardContextProvider, }); -const asyncRenderUseFetchSecurityDashboards = async () => { - const renderedHook = renderUseFetchSecurityDashboards(); - await act(async () => { - await renderedHook.waitForNextUpdate(); - }); - return renderedHook; -}; - describe('useFetchSecurityDashboards', () => { beforeAll(() => { useKibana().services.http = mockHttp as unknown as HttpStart; @@ -49,34 +41,43 @@ describe('useFetchSecurityDashboards', () => { }); it('should fetch Security Solution tags', async () => { - await asyncRenderUseFetchSecurityDashboards(); - expect(getTagsByName).toHaveBeenCalledTimes(1); + renderUseFetchSecurityDashboards(); + + await waitFor(() => { + expect(getTagsByName).toHaveBeenCalledTimes(1); + }); }); it('should fetch Security Solution dashboards', async () => { - await asyncRenderUseFetchSecurityDashboards(); + renderUseFetchSecurityDashboards(); - expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); - expect(getDashboardsByTagIds).toHaveBeenCalledWith( - { - http: mockHttp, - tagIds: [MOCK_TAG_ID], - }, - expect.any(Object) - ); + await waitFor(() => { + expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + expect(getDashboardsByTagIds).toHaveBeenCalledWith( + { + http: mockHttp, + tagIds: [MOCK_TAG_ID], + }, + expect.any(Object) + ); + }); }); it('should fetch Security Solution dashboards with abort signal', async () => { - await asyncRenderUseFetchSecurityDashboards(); + renderUseFetchSecurityDashboards(); - expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); - expect((getDashboardsByTagIds as jest.Mock).mock.calls[0][1]).toEqual(mockAbortSignal); + await waitFor(() => { + expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + expect((getDashboardsByTagIds as jest.Mock).mock.calls[0][1]).toEqual(mockAbortSignal); + }); }); it('should return Security Solution dashboards', async () => { - const { result } = await asyncRenderUseFetchSecurityDashboards(); + const { result } = renderUseFetchSecurityDashboards(); - expect(result.current.isLoading).toEqual(false); - expect(result.current.dashboards).toEqual(DEFAULT_DASHBOARDS_RESPONSE); + await waitFor(() => { + expect(result.current.isLoading).toEqual(false); + expect(result.current.dashboards).toEqual(DEFAULT_DASHBOARDS_RESPONSE); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts index e3da086796794..15dfd3c7c9366 100644 --- a/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts +++ b/x-pack/plugins/security_solution/public/dashboards/containers/use_fetch_security_tags.test.ts @@ -6,7 +6,7 @@ */ import type { HttpStart } from '@kbn/core/public'; -import { act, renderHook } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import { INTERNAL_TAGS_URL, SECURITY_TAG_DESCRIPTION, @@ -28,14 +28,6 @@ const mockAbortSignal = {} as unknown as AbortSignal; const mockCreateTag = jest.fn(); const renderUseCreateSecurityDashboardLink = () => renderHook(() => useFetchSecurityTags(), {}); -const asyncRenderUseCreateSecurityDashboardLink = async () => { - const renderedHook = renderUseCreateSecurityDashboardLink(); - await act(async () => { - await renderedHook.waitForNextUpdate(); - }); - return renderedHook; -}; - describe('useFetchSecurityTags', () => { beforeAll(() => { useKibana().services.http = { get: mockGet } as unknown as HttpStart; @@ -54,25 +46,31 @@ describe('useFetchSecurityTags', () => { test('should fetch Security Solution tags', async () => { mockGet.mockResolvedValue([]); - await asyncRenderUseCreateSecurityDashboardLink(); - expect(mockGet).toHaveBeenCalledWith( - INTERNAL_TAGS_URL, - expect.objectContaining({ - query: { name: SECURITY_TAG_NAME }, - signal: mockAbortSignal, - }) - ); + renderUseCreateSecurityDashboardLink(); + + await waitFor(() => { + expect(mockGet).toHaveBeenCalledWith( + INTERNAL_TAGS_URL, + expect.objectContaining({ + query: { name: SECURITY_TAG_NAME }, + signal: mockAbortSignal, + }) + ); + }); }); test('should create a Security Solution tag if no Security Solution tags were found', async () => { mockGet.mockResolvedValue([]); - await asyncRenderUseCreateSecurityDashboardLink(); - expect(mockCreateTag).toHaveBeenCalledWith({ - name: SECURITY_TAG_NAME, - description: SECURITY_TAG_DESCRIPTION, - color: '#FFFFFF', + renderUseCreateSecurityDashboardLink(); + + await waitFor(() => { + expect(mockCreateTag).toHaveBeenCalledWith({ + name: SECURITY_TAG_NAME, + description: SECURITY_TAG_DESCRIPTION, + color: '#FFFFFF', + }); }); }); @@ -84,9 +82,11 @@ describe('useFetchSecurityTags', () => { type: 'tag', ...tag.attributes, })); - const { result } = await asyncRenderUseCreateSecurityDashboardLink(); + const { result } = renderUseCreateSecurityDashboardLink(); - expect(mockCreateTag).not.toHaveBeenCalled(); - expect(result.current.tags).toEqual(expect.objectContaining(expected)); + await waitFor(() => { + expect(mockCreateTag).not.toHaveBeenCalled(); + expect(result.current.tags).toEqual(expect.objectContaining(expected)); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/dashboards/hooks/use_create_security_dashboard_link.test.tsx b/x-pack/plugins/security_solution/public/dashboards/hooks/use_create_security_dashboard_link.test.tsx index 36aa70bc5678c..749f1626e257b 100644 --- a/x-pack/plugins/security_solution/public/dashboards/hooks/use_create_security_dashboard_link.test.tsx +++ b/x-pack/plugins/security_solution/public/dashboards/hooks/use_create_security_dashboard_link.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook, act } from '@testing-library/react-hooks'; +import { act, waitFor, renderHook } from '@testing-library/react'; import { useKibana } from '../../common/lib/kibana'; import { useCreateSecurityDashboardLink } from './use_create_security_dashboard_link'; import { DashboardContextProvider } from '../context/dashboard_context'; @@ -34,15 +34,6 @@ const renderUseCreateSecurityDashboardLink = () => ), }); -const asyncRenderUseCreateSecurityDashboard = async () => { - const renderedHook = renderUseCreateSecurityDashboardLink(); - - await act(async () => { - await renderedHook.waitForNextUpdate(); - }); - return renderedHook; -}; - describe('useCreateSecurityDashboardLink', () => { beforeAll(() => { (useKibana as jest.Mock).mockReturnValue({ @@ -61,40 +52,51 @@ describe('useCreateSecurityDashboardLink', () => { describe('useSecurityDashboardsTableItems', () => { it('should fetch Security Solution tags when renders', async () => { - await asyncRenderUseCreateSecurityDashboard(); + renderUseCreateSecurityDashboardLink(); - expect(getTagsByName).toHaveBeenCalledTimes(1); + await waitFor(() => { + expect(getTagsByName).toHaveBeenCalledTimes(1); + }); }); it('should return a memoized value when rerendered', async () => { - const { result, rerender } = await asyncRenderUseCreateSecurityDashboard(); + const { result, rerender } = renderUseCreateSecurityDashboardLink(); const result1 = result.current; act(() => rerender()); const result2 = result.current; - expect(result1).toEqual(result2); + + await waitFor(() => { + expect(result1).toEqual(result2); + }); }); it('should not re-request tag id when re-rendered', async () => { - const { rerender } = await asyncRenderUseCreateSecurityDashboard(); + const { rerender } = renderUseCreateSecurityDashboardLink(); + + await waitFor(() => { + expect(getTagsByName).toHaveBeenCalledTimes(1); + }); - expect(getTagsByName).toHaveBeenCalledTimes(1); act(() => rerender()); - expect(getTagsByName).toHaveBeenCalledTimes(1); + + await waitFor(() => { + expect(getTagsByName).toHaveBeenCalledTimes(1); + }); }); it('should return isLoading while requesting', async () => { - const { result, waitForNextUpdate } = renderUseCreateSecurityDashboardLink(); - - expect(result.current.isLoading).toEqual(true); - expect(result.current.url).toEqual('/app/security/dashboards/create'); + const { result } = renderUseCreateSecurityDashboardLink(); - await act(async () => { - await waitForNextUpdate(); + await waitFor(() => { + expect(result.current.isLoading).toEqual(true); + expect(result.current.url).toEqual('/app/security/dashboards/create'); }); - expect(result.current.isLoading).toEqual(false); - expect(result.current.url).toEqual('/app/security/dashboards/create'); + await waitFor(() => { + expect(result.current.isLoading).toEqual(false); + expect(result.current.url).toEqual('/app/security/dashboards/create'); + }); }); }); }); diff --git a/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_renderer.test.tsx b/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_renderer.test.tsx index ef4737a985b24..f73e126a78c5b 100644 --- a/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_renderer.test.tsx +++ b/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_renderer.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { renderHook, act } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import type { DashboardApi } from '@kbn/dashboard-plugin/public'; import { useDashboardRenderer } from './use_dashboard_renderer'; @@ -14,11 +15,11 @@ jest.mock('../../common/lib/kibana'); const mockDashboardContainer = {} as DashboardApi; describe('useDashboardRenderer', () => { - it('should set dashboard container correctly when dashboard is loaded', async () => { + it('should set dashboard container correctly when dashboard is loaded', () => { const { result } = renderHook(() => useDashboardRenderer()); - await act(async () => { - await result.current.handleDashboardLoaded(mockDashboardContainer); + act(() => { + result.current.handleDashboardLoaded(mockDashboardContainer); }); expect(result.current.dashboardContainer).toEqual(mockDashboardContainer); diff --git a/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_view_prompt_state.test.tsx b/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_view_prompt_state.test.tsx index 6fd7fb3e2de10..eabd904b38fdf 100644 --- a/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_view_prompt_state.test.tsx +++ b/x-pack/plugins/security_solution/public/dashboards/hooks/use_dashboard_view_prompt_state.test.tsx @@ -4,8 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { EuiEmptyPromptProps } from '@elastic/eui'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { DashboardViewPromptState, useDashboardViewPromptState, @@ -13,18 +12,14 @@ import { describe('useDashboardViewPromptState', () => { it('returns empty state', () => { - const { result } = renderHook< - DashboardViewPromptState | null, - Partial | null - >(() => useDashboardViewPromptState(null)); + const { result } = renderHook(() => useDashboardViewPromptState(null)); expect(result.current).toBeNull(); }); it('returns NoReadPermission state', () => { - const { result } = renderHook< - DashboardViewPromptState | null, - Partial | null - >(() => useDashboardViewPromptState(DashboardViewPromptState.NoReadPermission)); + const { result } = renderHook(() => + useDashboardViewPromptState(DashboardViewPromptState.NoReadPermission) + ); expect(result.current).toMatchInlineSnapshot(` Object { "body":

diff --git a/x-pack/plugins/security_solution/public/dashboards/hooks/use_security_dashboards_table.test.tsx b/x-pack/plugins/security_solution/public/dashboards/hooks/use_security_dashboards_table.test.tsx index 1026c69da8d8e..b7d76849a7303 100644 --- a/x-pack/plugins/security_solution/public/dashboards/hooks/use_security_dashboards_table.test.tsx +++ b/x-pack/plugins/security_solution/public/dashboards/hooks/use_security_dashboards_table.test.tsx @@ -6,8 +6,7 @@ */ import React from 'react'; -import { renderHook, act } from '@testing-library/react-hooks'; -import { render } from '@testing-library/react'; +import { render, waitFor, renderHook } from '@testing-library/react'; import type { DashboardStart } from '@kbn/dashboard-plugin/public'; import { EuiBasicTable } from '@elastic/eui'; import { useKibana } from '../../common/lib/kibana'; @@ -28,21 +27,20 @@ import type { HttpStart } from '@kbn/core/public'; jest.mock('../../common/lib/kibana'); jest.mock('../../common/containers/tags/api'); jest.mock('../../common/containers/dashboards/api'); + +const useKibanaMock = useKibana as jest.Mocked; + const spyUseGetSecuritySolutionUrl = jest.spyOn(linkTo, 'useGetSecuritySolutionUrl'); const spyTrack = jest.spyOn(telemetry, 'track'); const { id: mockReturnDashboardId, attributes: { title: mockReturnDashboardTitle, description: mockReturnDashboardDescription }, } = DEFAULT_DASHBOARDS_RESPONSE[0]; -const renderUseSecurityDashboardsTableItems = async () => { - const renderedHook = renderHook(() => useSecurityDashboardsTableItems(), { + +const renderUseSecurityDashboardsTableItems = () => { + return renderHook(useSecurityDashboardsTableItems, { wrapper: DashboardContextProvider, }); - await act(async () => { - // needed to let dashboard items to be updated from saved objects response - await renderedHook.waitForNextUpdate(); - }); - return renderedHook; }; const renderUseDashboardsTableColumns = () => @@ -50,101 +48,137 @@ const renderUseDashboardsTableColumns = () => wrapper: TestProviders, }); +const tagsColumn = { + field: 'id', // set existing field to prevent test error + name: 'Tags', + 'data-test-subj': 'dashboardTableTagsCell', +}; + +beforeEach(() => { + jest.clearAllMocks(); +}); + describe('Security Dashboards Table hooks', () => { - const mockGetRedirectUrl = jest.fn(() => '/path'); - useKibana().services.dashboard = { - locator: { getRedirectUrl: mockGetRedirectUrl }, - } as unknown as DashboardStart; - useKibana().services.http = {} as unknown as HttpStart; - - const mockTaggingGetTableColumnDefinition = useKibana().services.savedObjectsTagging?.ui - .getTableColumnDefinition as jest.Mock; - const tagsColumn = { - field: 'id', // set existing field to prevent test error - name: 'Tags', - 'data-test-subj': 'dashboardTableTagsCell', - }; - mockTaggingGetTableColumnDefinition.mockReturnValue(tagsColumn); - - afterEach(() => { - jest.clearAllMocks(); + let mockTaggingGetTableColumnDefinition: jest.Mock; + + beforeEach(() => { + useKibanaMock().services.dashboard = { + locator: { getRedirectUrl: jest.fn(() => '/path') }, + } as unknown as DashboardStart; + useKibanaMock().services.http = {} as unknown as HttpStart; + + mockTaggingGetTableColumnDefinition = useKibanaMock().services.savedObjectsTagging?.ui + .getTableColumnDefinition as jest.Mock; + + mockTaggingGetTableColumnDefinition.mockReturnValue(tagsColumn); }); describe('useSecurityDashboardsTableItems', () => { it('should request when renders', async () => { - await renderUseSecurityDashboardsTableItems(); - expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + renderUseSecurityDashboardsTableItems(); + + await waitFor(() => { + expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + }); }); it('should not request again when rerendered', async () => { - const { rerender } = await renderUseSecurityDashboardsTableItems(); + const { rerender } = renderUseSecurityDashboardsTableItems(); + + await waitFor(() => { + expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + }); + + rerender(); - expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); - act(() => rerender()); - expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + await waitFor(() => { + return expect(getDashboardsByTagIds).toHaveBeenCalledTimes(1); + }); }); it('should return a memoized value when rerendered', async () => { - const { result, rerender } = await renderUseSecurityDashboardsTableItems(); + const { result, rerender } = renderUseSecurityDashboardsTableItems(); + + waitFor(() => expect(result.current.isLoading).toBe(false)); const result1 = result.current.items; - act(() => rerender()); - const result2 = result.current.items; - expect(result1).toBe(result2); + rerender(); + + await waitFor(() => { + expect(result.current.isLoading).toBe(false); + expect(result1).toBe(result.current.items); + }); }); it('should return dashboard items', async () => { - const { result } = await renderUseSecurityDashboardsTableItems(); + const { result } = renderUseSecurityDashboardsTableItems(); const [dashboard1] = DEFAULT_DASHBOARDS_RESPONSE; - expect(result.current.items).toStrictEqual([ - { - ...dashboard1, - title: dashboard1.attributes.title, - description: dashboard1.attributes.description, - }, - ]); + + await waitFor(() => { + expect(result.current.items).toStrictEqual([ + { + ...dashboard1, + title: dashboard1.attributes.title, + description: dashboard1.attributes.description, + }, + ]); + }); }); }); describe('useDashboardsTableColumns', () => { - it('should call getTableColumnDefinition to get tags column', () => { + it('should call getTableColumnDefinition to get tags column', async () => { renderUseDashboardsTableColumns(); - expect(mockTaggingGetTableColumnDefinition).toHaveBeenCalled(); + await waitFor(() => { + expect(mockTaggingGetTableColumnDefinition).toHaveBeenCalled(); + }); }); - it('should return dashboard columns', () => { + it('should return dashboard columns', async () => { const { result } = renderUseDashboardsTableColumns(); - expect(result.current).toEqual([ - expect.objectContaining({ - field: 'title', - name: 'Title', - }), - expect.objectContaining({ - field: 'description', - name: 'Description', - }), - expect.objectContaining(tagsColumn), - ]); + await waitFor(() => { + expect(result.current).toEqual([ + expect.objectContaining({ + field: 'title', + name: 'Title', + }), + expect.objectContaining({ + field: 'description', + name: 'Description', + }), + expect.objectContaining(tagsColumn), + ]); + }); }); it('returns a memoized value', async () => { const { result, rerender } = renderUseDashboardsTableColumns(); const result1 = result.current; - act(() => rerender()); + + rerender(); + const result2 = result.current; - expect(result1).toBe(result2); + await waitFor(() => { + expect(result1).toBe(result2); + }); }); }); it('should render a table with consistent items and columns', async () => { - const { result: itemsResult } = await renderUseSecurityDashboardsTableItems(); + const { result: itemsResult } = renderUseSecurityDashboardsTableItems(); const { result: columnsResult } = renderUseDashboardsTableColumns(); + await waitFor(() => { + expect(itemsResult.current.isLoading).toBe(false); + expect(itemsResult.current.items).toHaveLength(1); + expect(columnsResult.current).toHaveLength(3); + }); + const result = render( , { @@ -152,22 +186,28 @@ describe('Security Dashboards Table hooks', () => { } ); - expect(result.getAllByText('Title').length).toBeGreaterThan(0); - expect(result.getAllByText('Description').length).toBeGreaterThan(0); - expect(result.getAllByText('Tags').length).toBeGreaterThan(0); + expect(await result.findAllByText('Title')).toHaveLength(1); + expect(await result.findAllByText('Description')).toHaveLength(1); + expect(await result.findAllByText('Tags')).toHaveLength(1); - expect(result.getByText(mockReturnDashboardTitle)).toBeInTheDocument(); - expect(result.getByText(mockReturnDashboardDescription)).toBeInTheDocument(); + expect(await result.findByText(mockReturnDashboardTitle)).toBeInTheDocument(); + expect(await result.findByText(mockReturnDashboardDescription)).toBeInTheDocument(); - expect(result.queryAllByTestId('dashboardTableTitleCell')).toHaveLength(1); - expect(result.queryAllByTestId('dashboardTableDescriptionCell')).toHaveLength(1); - expect(result.queryAllByTestId('dashboardTableTagsCell')).toHaveLength(1); + expect(await result.findAllByTestId('dashboardTableTitleCell')).toHaveLength(1); + expect(await result.findAllByTestId('dashboardTableDescriptionCell')).toHaveLength(1); + expect(await result.findAllByTestId('dashboardTableTagsCell')).toHaveLength(1); }); it('should send telemetry when dashboard title clicked', async () => { - const { result: itemsResult } = await renderUseSecurityDashboardsTableItems(); + const { result: itemsResult } = renderUseSecurityDashboardsTableItems(); const { result: columnsResult } = renderUseDashboardsTableColumns(); + await waitFor(() => { + expect(itemsResult.current.isLoading).toBe(false); + expect(itemsResult.current.items).toHaveLength(1); + expect(columnsResult.current).toHaveLength(3); + }); + const result = render( , { @@ -176,22 +216,33 @@ describe('Security Dashboards Table hooks', () => { ); result.getByText(mockReturnDashboardTitle).click(); - expect(spyTrack).toHaveBeenCalledWith(METRIC_TYPE.CLICK, TELEMETRY_EVENT.DASHBOARD); + + await waitFor(() => { + expect(spyTrack).toHaveBeenCalledWith(METRIC_TYPE.CLICK, TELEMETRY_EVENT.DASHBOARD); + }); }); it('should land on SecuritySolution dashboard view page when dashboard title clicked', async () => { const mockGetSecuritySolutionUrl = jest.fn(); spyUseGetSecuritySolutionUrl.mockImplementation(() => mockGetSecuritySolutionUrl); - const { result: itemsResult } = await renderUseSecurityDashboardsTableItems(); + const { result: itemsResult } = renderUseSecurityDashboardsTableItems(); const { result: columnsResult } = renderUseDashboardsTableColumns(); + await waitFor(() => { + expect(itemsResult.current.isLoading).toBe(false); + expect(itemsResult.current.items).toHaveLength(1); + expect(columnsResult.current).toHaveLength(3); + }); + render(, { wrapper: TestProviders, }); - expect(mockGetSecuritySolutionUrl).toHaveBeenCalledWith({ - deepLinkId: SecurityPageName.dashboards, - path: mockReturnDashboardId, + await waitFor(() => { + expect(mockGetSecuritySolutionUrl).toHaveBeenCalledWith({ + deepLinkId: SecurityPageName.dashboards, + path: mockReturnDashboardId, + }); }); }); }); diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/grouping_settings/group_take_action_items.test.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/grouping_settings/group_take_action_items.test.tsx index 5518926f4ab61..7e1c9e0a1cfbb 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/grouping_settings/group_take_action_items.test.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/grouping_settings/group_take_action_items.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import React from 'react'; import { TestProviders } from '../../../../common/mock'; import { useGroupTakeActionsItems } from '.'; @@ -20,68 +20,58 @@ describe('useGroupTakeActionsItems', () => { selectedGroup: 'test', }; it('returns all take actions items if showAlertStatusActions is true and currentStatus is undefined', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - expect(result.current(getActionItemsParams).length).toEqual(3); - }); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => expect(result.current(getActionItemsParams).length).toEqual(3)); }); it('returns all take actions items if currentStatus is []', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - currentStatus: [], - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - expect(result.current(getActionItemsParams).length).toEqual(3); - }); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + currentStatus: [], + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => expect(result.current(getActionItemsParams).length).toEqual(3)); }); it('returns all take actions items if currentStatus.length > 1', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - currentStatus: ['open', 'closed'], - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - expect(result.current(getActionItemsParams).length).toEqual(3); - }); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + currentStatus: ['open', 'closed'], + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => expect(result.current(getActionItemsParams).length).toEqual(3)); }); it('returns acknowledged & closed take actions items if currentStatus === ["open"]', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - currentStatus: ['open'], - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + currentStatus: ['open'], + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => { const currentParams = result.current(getActionItemsParams); expect(currentParams.length).toEqual(2); expect(currentParams[0].key).toEqual('acknowledge'); @@ -90,18 +80,17 @@ describe('useGroupTakeActionsItems', () => { }); it('returns open & acknowledged take actions items if currentStatus === ["closed"]', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - currentStatus: ['closed'], - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + currentStatus: ['closed'], + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => { const currentParams = result.current(getActionItemsParams); expect(currentParams.length).toEqual(2); expect(currentParams[0].key).toEqual('open'); @@ -110,18 +99,17 @@ describe('useGroupTakeActionsItems', () => { }); it('returns open & closed take actions items if currentStatus === ["acknowledged"]', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - currentStatus: ['acknowledged'], - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + currentStatus: ['acknowledged'], + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => { const currentParams = result.current(getActionItemsParams); expect(currentParams.length).toEqual(2); expect(currentParams[0].key).toEqual('open'); @@ -130,33 +118,28 @@ describe('useGroupTakeActionsItems', () => { }); it('returns empty take actions items if showAlertStatusActions is false', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - showAlertStatusActions: false, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - expect(result.current(getActionItemsParams).length).toEqual(0); - }); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + showAlertStatusActions: false, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => expect(result.current(getActionItemsParams).length).toEqual(0)); }); + it('returns array take actions items if showAlertStatusActions is true', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => - useGroupTakeActionsItems({ - showAlertStatusActions: true, - }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - expect(result.current(getActionItemsParams).length).toEqual(3); - }); + const { result } = renderHook( + () => + useGroupTakeActionsItems({ + showAlertStatusActions: true, + }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => expect(result.current(getActionItemsParams).length).toEqual(3)); }); }); diff --git a/x-pack/plugins/security_solution/public/explore/containers/authentications/index.test.tsx b/x-pack/plugins/security_solution/public/explore/containers/authentications/index.test.tsx index f37ec404274b1..a98a1fdf90949 100644 --- a/x-pack/plugins/security_solution/public/explore/containers/authentications/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/containers/authentications/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { useAuthentications } from '.'; import { AuthStackByField } from '../../../../common/search_strategy'; import { TestProviders } from '../../../common/mock'; diff --git a/x-pack/plugins/security_solution/public/explore/containers/fields/index.test.ts b/x-pack/plugins/security_solution/public/explore/containers/fields/index.test.ts index 03084ef42dd8d..41cb8ba827b22 100644 --- a/x-pack/plugins/security_solution/public/explore/containers/fields/index.test.ts +++ b/x-pack/plugins/security_solution/public/explore/containers/fields/index.test.ts @@ -6,7 +6,7 @@ */ import { useKibana } from '../../../common/lib/kibana'; import { useIsFieldInIndexPattern } from '.'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { getRequiredMapsFields } from '../../network/components/embeddables/map_config'; jest.mock('../../../common/lib/kibana'); diff --git a/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/details/index.test.tsx b/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/details/index.test.tsx index e4800a89f1092..bd35049b067e5 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/details/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/details/index.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../../common/mock'; import { ID, useHostDetails } from '.'; import { useSearchStrategy } from '../../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/index.test.tsx b/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/index.test.tsx index 456caaf0d01c5..fa7312d50fc1d 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/containers/hosts/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { useAllHost } from '.'; import { HostsType } from '../../store/model'; diff --git a/x-pack/plugins/security_solution/public/explore/hosts/containers/uncommon_processes/index.test.tsx b/x-pack/plugins/security_solution/public/explore/hosts/containers/uncommon_processes/index.test.tsx index 452f2aba5a8da..1e80b44378875 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/containers/uncommon_processes/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/containers/uncommon_processes/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { useUncommonProcesses } from '.'; import { HostsType } from '../../store/model'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/details/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/details/index.test.tsx index dde6ff13a4a81..53176cf558c53 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/details/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/details/index.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ID, useNetworkDetails } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/network_dns/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/network_dns/index.test.tsx index 8efcfc5dbee6d..8dab09fc001d1 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/network_dns/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/network_dns/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ID, useNetworkDns } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/network_http/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/network_http/index.test.tsx index e7232359b0336..cd63ec78e1413 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/network_http/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/network_http/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { useNetworkHttp, ID } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/network_top_countries/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/network_top_countries/index.test.tsx index fb67611f43a74..a360fdc770605 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/network_top_countries/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/network_top_countries/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ID, useNetworkTopCountries } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/network_top_n_flow/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/network_top_n_flow/index.test.tsx index 24c8a25e8bcd7..ed42e3307f06d 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/network_top_n_flow/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/network_top_n_flow/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ID, useNetworkTopNFlow } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/tls/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/tls/index.test.tsx index b6fa06590f626..30fc83531feb1 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/tls/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/tls/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ID, useNetworkTls } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/network/containers/users/index.test.tsx b/x-pack/plugins/security_solution/public/explore/network/containers/users/index.test.tsx index a7f3eb69fc5ba..14b9c6d601375 100644 --- a/x-pack/plugins/security_solution/public/explore/network/containers/users/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/containers/users/index.test.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { useNetworkUsers, ID } from '.'; import { useSearchStrategy } from '../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/explore/users/containers/users/observed_details/index.test.tsx b/x-pack/plugins/security_solution/public/explore/users/containers/users/observed_details/index.test.tsx index f0e2536096421..951bfb20165e6 100644 --- a/x-pack/plugins/security_solution/public/explore/users/containers/users/observed_details/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/users/containers/users/observed_details/index.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../../../common/mock'; import { useObservedUserDetails } from '.'; import { useSearchStrategy } from '../../../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.test.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.test.tsx index b7df916c60342..109878a1a8ba3 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status.test.tsx @@ -5,12 +5,11 @@ * 2.0. */ -import type { PropsWithChildren } from 'react'; -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { TestProviders } from '../../../../common/mock'; import { ALERTS_QUERY_NAMES } from '../../../../detections/containers/detection_engine/alerts/constants'; import { from, mockAlertsData, alertsByStatusQuery, parsedMockAlertsData, to } from './mock_data'; -import type { UseAlertsByStatus, UseAlertsByStatusProps } from './use_alerts_by_status'; +import type { UseAlertsByStatusProps } from './use_alerts_by_status'; import { useAlertsByStatus } from './use_alerts_by_status'; const dateNow = new Date('2022-04-08T12:00:00.000Z').valueOf(); @@ -43,7 +42,7 @@ jest.mock('../../../../common/containers/use_global_time', () => { // helper function to render the hook const renderUseAlertsByStatus = (props: Partial = {}) => - renderHook, ReturnType>( + renderHook( () => useAlertsByStatus({ queryId: 'test', diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status_visualization_data.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status_visualization_data.test.ts index 44ad581103393..a805a44f05456 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status_visualization_data.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/alerts_by_status/use_alerts_by_status_visualization_data.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { useVisualizationResponse } from '../../../../common/components/visualization_actions/use_visualization_response'; import { acknowledgedAlertsVisualizationId, diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_by_status/use_cases_by_status.test.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_by_status/use_cases_by_status.test.tsx index 4c0796dacd3b6..bdb43e4044b8a 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_by_status/use_cases_by_status.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_by_status/use_cases_by_status.test.tsx @@ -5,12 +5,10 @@ * 2.0. */ -import type { PropsWithChildren } from 'react'; -import { renderHook, act } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import { mockCasesContract } from '@kbn/cases-plugin/public/mocks'; import { useKibana } from '../../../../common/lib/kibana'; import { TestProviders } from '../../../../common/mock'; -import type { UseCasesByStatusProps, UseCasesByStatusResults } from './use_cases_by_status'; import { useCasesByStatus } from './use_cases_by_status'; const dateNow = new Date('2022-04-08T12:00:00.000Z').valueOf(); @@ -40,14 +38,6 @@ mockGetCasesMetrics.mockResolvedValue({ }, }); -mockGetCasesMetrics.mockResolvedValueOnce({ - status: { - open: 0, - inProgress: 0, - closed: 0, - }, -}); - const mockUseKibana = { services: { cases: { @@ -67,81 +57,88 @@ describe('useCasesByStatus', () => { beforeEach(() => { jest.clearAllMocks(); }); - test('init', () => { - const { result } = renderHook< - PropsWithChildren, - UseCasesByStatusResults - >(() => useCasesByStatus({}), { + test('init', async () => { + mockGetCasesMetrics.mockResolvedValueOnce({ + status: { + open: 0, + inProgress: 0, + closed: 0, + }, + }); + + const { result } = renderHook(() => useCasesByStatus({}), { wrapper: TestProviders, }); - expect(result.current).toEqual({ - closed: 0, - inProgress: 0, - isLoading: true, - open: 0, - totalCounts: 0, - updatedAt: dateNow, + + await waitFor(() => { + expect(result.current).toEqual({ + closed: 0, + inProgress: 0, + isLoading: true, + open: 0, + totalCounts: 0, + updatedAt: dateNow, + }); }); }); test('fetch data', async () => { - const { result, waitForNextUpdate } = renderHook< - PropsWithChildren, - UseCasesByStatusResults - >(() => useCasesByStatus({ skip: false }), { + const { result } = renderHook(() => useCasesByStatus({ skip: false }), { wrapper: TestProviders, }); - await waitForNextUpdate(); - expect(result.current).toEqual({ - closed: 3, - inProgress: 2, - isLoading: false, - open: 1, - totalCounts: 6, - updatedAt: dateNow, + await waitFor(() => { + expect(result.current.isLoading).toBe(false); + expect(result.current).toEqual({ + closed: 3, + inProgress: 2, + isLoading: false, + open: 1, + totalCounts: 6, + updatedAt: dateNow, + }); }); }); test('it should call setQuery when fetching', async () => { - const { waitForNextUpdate } = renderHook< - PropsWithChildren, - UseCasesByStatusResults - >(() => useCasesByStatus({ skip: false }), { + renderHook(() => useCasesByStatus({ skip: false }), { wrapper: TestProviders, }); - await waitForNextUpdate(); - expect(mockSetQuery).toHaveBeenCalled(); + await waitFor(() => expect(mockSetQuery).toHaveBeenCalled()); }); test('it should call deleteQuery when unmounting', async () => { - const { waitForNextUpdate, unmount } = renderHook< - PropsWithChildren, - UseCasesByStatusResults - >(() => useCasesByStatus({ skip: false }), { + // muting setState warning that happens on unmount + // because it's a noop and going to be removed + // in the next version of React + const consoleError = jest.spyOn(console, 'error').mockImplementation(() => {}); + const { unmount } = renderHook(() => useCasesByStatus({ skip: false }), { wrapper: TestProviders, }); - await waitForNextUpdate(); unmount(); - expect(mockDeleteQuery).toHaveBeenCalled(); + waitFor(() => { + expect(mockDeleteQuery).toHaveBeenCalled(); + }); + + consoleError.mockRestore(); }); test('skip', async () => { const abortSpy = jest.spyOn(AbortController.prototype, 'abort'); const localProps = { skip: false }; - const { rerender, waitForNextUpdate } = renderHook< - PropsWithChildren, - UseCasesByStatusResults - >(() => useCasesByStatus(localProps), { + const { rerender } = renderHook(() => useCasesByStatus(localProps), { wrapper: TestProviders, }); - await waitForNextUpdate(); localProps.skip = true; - act(() => rerender()); - act(() => rerender()); - expect(abortSpy).toHaveBeenCalledTimes(2); + + rerender(); + rerender(); + + await waitFor(() => { + expect(abortSpy).toHaveBeenCalledTimes(2); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts index 9076c0daa7da6..ef278f81004db 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/cases_table/use_case_items.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import { mockCasesResult, parsedCasesItems } from './mock_data'; import { useCaseItems } from './use_case_items'; @@ -32,6 +32,7 @@ const mockKibana = { }, }, }; + jest.mock('../../../../common/lib/kibana', () => ({ useKibana: () => mockKibana, })); @@ -51,7 +52,7 @@ jest.mock('../../../../common/containers/use_global_time', () => { }); const renderUseCaseItems = (overrides: Partial = {}) => - renderHook>(() => + renderHook, UseCaseItems>(() => useCaseItems({ skip: false, ...overrides }) ); @@ -63,59 +64,55 @@ describe('useCaseItems', () => { }); it('should return default values', async () => { - const { result, waitForNextUpdate } = renderUseCaseItems(); - - await waitForNextUpdate(); - - expect(result.current).toEqual({ - items: [], - isLoading: false, - updatedAt: dateNow, - }); - - expect(mockCasesApi).toBeCalledWith({ - from: '2020-07-07T08:20:18.966Z', - to: '2020-07-08T08:20:18.966Z', - owner: 'securitySolution', - sortField: 'createdAt', - sortOrder: 'desc', - page: 1, - perPage: 4, + const { result } = renderUseCaseItems(); + + await waitFor(() => { + expect(result.current).toEqual({ + items: [], + isLoading: false, + updatedAt: dateNow, + }); + + expect(mockCasesApi).toBeCalledWith({ + from: '2020-07-07T08:20:18.966Z', + to: '2020-07-08T08:20:18.966Z', + owner: 'securitySolution', + sortField: 'createdAt', + sortOrder: 'desc', + page: 1, + perPage: 4, + }); }); }); it('should return parsed items', async () => { mockCasesApi.mockReturnValue(mockCasesResult); - const { result, waitForNextUpdate } = renderUseCaseItems(); - - await waitForNextUpdate(); - - expect(result.current).toEqual({ - items: parsedCasesItems, - isLoading: false, - updatedAt: dateNow, - }); + const { result } = renderUseCaseItems(); + + await waitFor(() => + expect(result.current).toEqual({ + items: parsedCasesItems, + isLoading: false, + updatedAt: dateNow, + }) + ); }); test('it should call setQuery when fetching', async () => { mockCasesApi.mockReturnValue(mockCasesResult); - const { waitForNextUpdate } = renderUseCaseItems(); + renderUseCaseItems(); - await waitForNextUpdate(); - - expect(mockSetQuery).toHaveBeenCalled(); + await waitFor(() => expect(mockSetQuery).toHaveBeenCalled()); }); test('it should call deleteQuery when unmounting', async () => { - const { waitForNextUpdate, unmount } = renderUseCaseItems(); + const { unmount } = renderUseCaseItems(); - await waitForNextUpdate(); + unmount(); - act(() => { - unmount(); + await waitFor(() => { + expect(mockDeleteQuery).toHaveBeenCalled(); }); - - expect(mockDeleteQuery).toHaveBeenCalled(); }); it('should return new updatedAt', async () => { @@ -124,15 +121,15 @@ describe('useCaseItems', () => { mockDateNow.mockReturnValueOnce(dateNow); mockCasesApi.mockReturnValue(mockCasesResult); - const { result, waitForNextUpdate } = renderUseCaseItems(); - - await waitForNextUpdate(); + const { result } = renderUseCaseItems(); - expect(mockDateNow).toHaveBeenCalled(); - expect(result.current).toEqual({ - items: parsedCasesItems, - isLoading: false, - updatedAt: newDateNow, + await waitFor(() => { + expect(mockDateNow).toHaveBeenCalled(); + expect(result.current).toEqual({ + items: parsedCasesItems, + isLoading: false, + updatedAt: newDateNow, + }); }); }); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/hooks/use_navigate_to_timeline.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/hooks/use_navigate_to_timeline.test.ts index ce779a2c29202..49f3281f14e1d 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/hooks/use_navigate_to_timeline.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/hooks/use_navigate_to_timeline.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { useDeepEqualSelector } from '../../../../common/hooks/use_selector'; import { updateProviders } from '../../../../timelines/store/actions'; diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/host_alerts_table/use_host_alerts_items.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/host_alerts_table/use_host_alerts_items.test.ts index d38f0a4bfaa77..c536628bfe48f 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/host_alerts_table/use_host_alerts_items.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/host_alerts_table/use_host_alerts_items.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { mockQuery, @@ -51,7 +51,7 @@ jest.mock('../../../../common/containers/use_global_time', () => { }); const renderUseHostAlertsItems = (overrides: Partial = {}) => - renderHook>(() => + renderHook, UseHostAlertsItemsProps>(() => useHostAlertsItems({ skip: false, signalIndexName, diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts index bf60d795c26f1..3765373c4f9dc 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/rule_alerts_table/use_rule_alerts_items.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { ALERTS_QUERY_NAMES } from '../../../../detections/containers/detection_engine/alerts/constants'; import { @@ -49,7 +49,7 @@ jest.mock('../../../../common/containers/use_global_time', () => { // helper function to render the hook const renderUseRuleAlertsItems = (props: Partial = {}) => - renderHook>(() => + renderHook, UseRuleAlertsItemsProps>(() => useRuleAlertsItems({ queryId: 'test', signalIndexName: 'signal-alerts', diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_cases_mttr.test.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_cases_mttr.test.tsx index 8658571d03901..8fd3602b8e62e 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_cases_mttr.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_cases_mttr.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import type { UseCasesMttr } from './use_cases_mttr'; import { useCasesMttr } from './use_cases_mttr'; -import { act, renderHook } from '@testing-library/react-hooks'; +import { act, waitFor, renderHook } from '@testing-library/react'; import { TestProviders } from '../../../../../common/mock'; import { useKibana as useKibanaMock } from '../../../../../common/lib/kibana/__mocks__'; import * as i18n from '../translations'; @@ -53,12 +53,13 @@ describe('useCasesMttr', () => { afterEach(() => { jest.clearAllMocks(); }); + it('loads initial state', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + + await waitFor(() => { expect(result.current).toEqual({ stat: '-', isLoading: true, @@ -71,16 +72,15 @@ describe('useCasesMttr', () => { }); }); }); + it('finds positive percentage change', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics .mockReturnValueOnce({ mttr: 10000 }) .mockReturnValue({ mttr: 5000 }); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '2h', isLoading: false, @@ -95,19 +95,17 @@ describe('useCasesMttr', () => { }), }, ...basicData, - }); - }); + }) + ); }); it('finds negative percentage change', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics .mockReturnValueOnce({ mttr: 5000 }) .mockReturnValue({ mttr: 10000 }); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '1h', isLoading: false, @@ -122,19 +120,17 @@ describe('useCasesMttr', () => { }), }, ...basicData, - }); - }); + }) + ); }); it('finds zero percentage change', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics.mockReturnValue({ mttr: 10000, }); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '2h', isLoading: false, @@ -144,19 +140,17 @@ describe('useCasesMttr', () => { note: i18n.NO_CHANGE('case resolution time'), }, ...basicData, - }); - }); + }) + ); }); it('handles null mttr - current time range', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics .mockReturnValueOnce({ mttr: null }) .mockReturnValue({ mttr: 10000 }); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -166,19 +160,17 @@ describe('useCasesMttr', () => { note: i18n.NO_DATA_CURRENT('case'), }, ...basicData, - }); - }); + }) + ); }); it('handles null mttr - compare time range', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics .mockReturnValueOnce({ mttr: 10000 }) .mockReturnValue({ mttr: null }); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCasesMttr(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCasesMttr(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '2h', isLoading: false, @@ -188,8 +180,8 @@ describe('useCasesMttr', () => { note: i18n.NO_DATA_COMPARE('case'), }, ...basicData, - }); - }); + }) + ); }); it('handles null mttr - current & compare time range', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics @@ -198,13 +190,11 @@ describe('useCasesMttr', () => { .mockReturnValue({ mttr: null, }); - await act(async () => { - let ourProps = props; - const { result, rerender, waitForNextUpdate } = renderHook(() => useCasesMttr(ourProps), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + let ourProps = props; + const { result, rerender } = renderHook(() => useCasesMttr(ourProps), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '2h', isLoading: false, @@ -214,14 +204,16 @@ describe('useCasesMttr', () => { note: i18n.NO_CHANGE('case resolution time'), }, ...basicData, - }); - ourProps = { - ...props, - from: '2020-07-08T08:20:18.966Z', - to: '2020-07-09T08:20:18.966Z', - }; - rerender(); - await waitForNextUpdate(); + }) + ); + + ourProps = { + ...props, + from: '2020-07-08T08:20:18.966Z', + to: '2020-07-09T08:20:18.966Z', + }; + rerender(); + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -231,8 +223,8 @@ describe('useCasesMttr', () => { note: i18n.NO_DATA('case'), }, ...basicData, - }); - }); + }) + ); }); it('handles undefined mttr - current & compare time range', async () => { useKibanaMock().services.cases.api.cases.getCasesMetrics = mockGetCasesMetrics @@ -241,13 +233,12 @@ describe('useCasesMttr', () => { .mockReturnValue({ mttr: undefined, }); - await act(async () => { - let ourProps = props; - const { result, rerender, waitForNextUpdate } = renderHook(() => useCasesMttr(ourProps), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + let ourProps = props; + const { result, rerender } = renderHook(() => useCasesMttr(ourProps), { + wrapper: wrapperContainer, + }); + + await waitFor(() => expect(result.current).toEqual({ stat: '2h', isLoading: false, @@ -257,15 +248,21 @@ describe('useCasesMttr', () => { note: i18n.NO_CHANGE('case resolution time'), }, ...basicData, - }); - ourProps = { - ...props, - from: '2020-07-08T08:20:18.966Z', - to: '2020-07-09T08:20:18.966Z', - }; + }) + ); + + ourProps = { + ...props, + from: '2020-07-08T08:20:18.966Z', + to: '2020-07-09T08:20:18.966Z', + }; + + act(() => { rerender(); rerender(); - await waitForNextUpdate(); + }); + + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -275,7 +272,7 @@ describe('useCasesMttr', () => { note: i18n.NO_DATA('case'), }, ...basicData, - }); - }); + }) + ); }); }); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_critical_alerts.test.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_critical_alerts.test.tsx index 7a63e93e6c765..16607879a8fe8 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_critical_alerts.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_critical_alerts.test.tsx @@ -8,7 +8,7 @@ import React from 'react'; import type { UseCriticalAlerts } from './use_critical_alerts'; import { useCriticalAlerts } from './use_critical_alerts'; -import { act, renderHook } from '@testing-library/react-hooks'; +import { waitFor, renderHook } from '@testing-library/react'; import { TestProviders } from '../../../../../common/mock'; import * as i18n from '../translations'; import { useQueryAlerts } from '../../../../../detections/containers/detection_engine/alerts/use_query'; @@ -66,14 +66,20 @@ describe('useCriticalAlerts', () => { jest.clearAllMocks(); }); it('loads initial state', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); + // mock useQuery into state before data fetch + mockUseQueryAlerts.mockReturnValue({ + ...basicReturn, + data: null, + }); + + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + + await waitFor(() => { expect(result.current).toEqual({ stat: '-', - isLoading: true, + isLoading: false, percentage: { percent: null, color: 'hollow', @@ -95,12 +101,10 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '100', isLoading: false, @@ -115,8 +119,8 @@ describe('useCriticalAlerts', () => { }), }, ...basicData, - }); - }); + }) + ); }); it('finds negative percentage change', async () => { mockUseQueryAlerts.mockImplementation((args) => @@ -130,12 +134,10 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '50', isLoading: false, @@ -150,20 +152,18 @@ describe('useCriticalAlerts', () => { }), }, ...basicData, - }); - }); + }) + ); }); it('finds zero percentage change', async () => { mockUseQueryAlerts.mockImplementation((args) => ({ data: { aggregations: { open: { critical: { doc_count: 100 } } } }, ...basicReturn, })); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '100', isLoading: false, @@ -173,8 +173,8 @@ describe('useCriticalAlerts', () => { note: i18n.NO_CHANGE('open critical alert count'), }, ...basicData, - }); - }); + }) + ); }); it('handles null data - current time range', async () => { mockUseQueryAlerts.mockImplementation((args) => @@ -188,12 +188,10 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -203,8 +201,8 @@ describe('useCriticalAlerts', () => { note: i18n.NO_DATA_CURRENT('alerts'), }, ...basicData, - }); - }); + }) + ); }); it('handles null data - compare time range', async () => { mockUseQueryAlerts.mockImplementation((args) => @@ -218,12 +216,10 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - const { result, waitForNextUpdate } = renderHook(() => useCriticalAlerts(props), { - wrapper: wrapperContainer, - }); - await waitForNextUpdate(); - await waitForNextUpdate(); + const { result } = renderHook(() => useCriticalAlerts(props), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '100', isLoading: false, @@ -233,8 +229,8 @@ describe('useCriticalAlerts', () => { note: i18n.NO_DATA_COMPARE('alerts'), }, ...basicData, - }); - }); + }) + ); }); it('handles null data - current & compare time range', async () => { mockUseQueryAlerts.mockImplementation((args) => @@ -249,16 +245,12 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - let ourProps = props; - const { result, rerender, waitForNextUpdate } = renderHook( - () => useCriticalAlerts(ourProps), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - await waitForNextUpdate(); + let ourProps = props; + const { result, rerender } = renderHook(() => useCriticalAlerts(ourProps), { + wrapper: wrapperContainer, + }); + + await waitFor(() => expect(result.current).toEqual({ stat: '100', isLoading: false, @@ -268,16 +260,18 @@ describe('useCriticalAlerts', () => { note: i18n.NO_CHANGE('open critical alert count'), }, ...basicData, - }); - ourProps = { - ...props, - from: '2020-09-08T08:20:18.966Z', - to: '2020-09-09T08:20:18.966Z', - fromCompare: '2020-09-07T08:20:18.966Z', - toCompare: '2020-09-08T08:20:18.966Z', - }; - rerender(); - await waitForNextUpdate(); + }) + ); + + ourProps = { + ...props, + from: '2020-09-08T08:20:18.966Z', + to: '2020-09-09T08:20:18.966Z', + fromCompare: '2020-09-07T08:20:18.966Z', + toCompare: '2020-09-08T08:20:18.966Z', + }; + rerender(); + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -287,8 +281,8 @@ describe('useCriticalAlerts', () => { note: i18n.NO_DATA('alerts'), }, ...basicData, - }); - }); + }) + ); }); it('handles undefined data - current & compare time range', async () => { mockUseQueryAlerts.mockImplementation((args) => @@ -303,16 +297,11 @@ describe('useCriticalAlerts', () => { ...basicReturn, } ); - await act(async () => { - let ourProps = props; - const { result, rerender, waitForNextUpdate } = renderHook( - () => useCriticalAlerts(ourProps), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); - await waitForNextUpdate(); + let ourProps = props; + const { result, rerender } = renderHook(() => useCriticalAlerts(ourProps), { + wrapper: wrapperContainer, + }); + await waitFor(() => expect(result.current).toEqual({ stat: '100', isLoading: false, @@ -322,16 +311,17 @@ describe('useCriticalAlerts', () => { note: i18n.NO_CHANGE('open critical alert count'), }, ...basicData, - }); - ourProps = { - ...props, - from: '2020-09-08T08:20:18.966Z', - to: '2020-09-09T08:20:18.966Z', - fromCompare: '2020-09-07T08:20:18.966Z', - toCompare: '2020-09-08T08:20:18.966Z', - }; - rerender(); - await waitForNextUpdate(); + }) + ); + ourProps = { + ...props, + from: '2020-09-08T08:20:18.966Z', + to: '2020-09-09T08:20:18.966Z', + fromCompare: '2020-09-07T08:20:18.966Z', + toCompare: '2020-09-08T08:20:18.966Z', + }; + rerender(); + await waitFor(() => expect(result.current).toEqual({ stat: '-', isLoading: false, @@ -341,7 +331,7 @@ describe('useCriticalAlerts', () => { note: i18n.NO_DATA('alerts'), }, ...basicData, - }); - }); + }) + ); }); }); diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_soc_trends.test.tsx b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_soc_trends.test.tsx index b008668f9865a..0a4d7e8249a55 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_soc_trends.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/soc_trends/hooks/use_soc_trends.test.tsx @@ -6,8 +6,9 @@ */ import React from 'react'; +import { renderHook, waitFor } from '@testing-library/react'; + import { useSocTrends } from './use_soc_trends'; -import { act, renderHook } from '@testing-library/react-hooks'; import { TestProviders } from '../../../../../common/mock'; import { useGlobalTime } from '../../../../../common/containers/use_global_time'; import * as i18n from '../translations'; @@ -42,14 +43,13 @@ describe('useSocTrends', () => { jest.clearAllMocks(); }); it('loads initial state', async () => { - await act(async () => { - const { result, waitForNextUpdate } = renderHook( - () => useSocTrends({ skip: false, signalIndexName: '.alerts-default' }), - { - wrapper: wrapperContainer, - } - ); - await waitForNextUpdate(); + const { result } = renderHook( + () => useSocTrends({ skip: false, signalIndexName: '.alerts-default' }), + { + wrapper: wrapperContainer, + } + ); + await waitFor(() => { expect(result.current).toEqual({ stats: [ { diff --git a/x-pack/plugins/security_solution/public/overview/components/detection_response/user_alerts_table/use_user_alerts_items.test.ts b/x-pack/plugins/security_solution/public/overview/components/detection_response/user_alerts_table/use_user_alerts_items.test.ts index 3aef486805322..00b919959922d 100644 --- a/x-pack/plugins/security_solution/public/overview/components/detection_response/user_alerts_table/use_user_alerts_items.test.ts +++ b/x-pack/plugins/security_solution/public/overview/components/detection_response/user_alerts_table/use_user_alerts_items.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { renderHook } from '@testing-library/react-hooks'; +import { renderHook } from '@testing-library/react'; import { mockQuery, @@ -14,7 +14,7 @@ import { } from './mock_data'; import { useUserAlertsItems } from './use_user_alerts_items'; -import type { UseUserAlertsItems, UseUserAlertsItemsProps } from './use_user_alerts_items'; +import type { UseUserAlertsItemsProps } from './use_user_alerts_items'; const signalIndexName = 'signal-alerts'; @@ -50,7 +50,7 @@ jest.mock('../../../../common/containers/use_global_time', () => { }); const renderUseUserAlertsItems = (overrides: Partial = {}) => - renderHook>(() => + renderHook(() => useUserAlertsItems({ skip: false, signalIndexName, diff --git a/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.test.tsx b/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.test.tsx index bae3b708ec3a5..921892ceed148 100644 --- a/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/containers/overview_host/index.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../common/mock'; import { useHostOverview } from '.'; import { useSearchStrategy } from '../../../common/containers/use_search_strategy'; diff --git a/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.test.tsx b/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.test.tsx index c842fb0a51cae..036c3ec701f79 100644 --- a/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.test.tsx +++ b/x-pack/plugins/security_solution/public/overview/containers/overview_network/index.test.tsx @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { act, renderHook } from '@testing-library/react-hooks'; + +import { renderHook, act } from '@testing-library/react'; import { TestProviders } from '../../../common/mock'; import { useNetworkOverview } from '.'; import { useSearchStrategy } from '../../../common/containers/use_search_strategy'; From 3684367bdf3d91e5c2c4104b65180ab7bd01e01c Mon Sep 17 00:00:00 2001 From: Konrad Szwarc Date: Wed, 4 Dec 2024 17:31:54 +0100 Subject: [PATCH 037/141] [EDR Workflows] Endpoint Insights API (#201521) ### Summary This PR introduces two internal API routes: 1. `/internal/api/endpoint/workflow_isnights` 2. `/internal/api/endpoint/workflow_isnights/{insightId}` ### Details - The first route (`/internal/api/endpoint/workflow_isnights`) will be used with the `securityWorkflowInsightsService.fetch` method to retrieve stored insights. - The second route (`/internal/api/endpoint/workflow_isnights/{insightId}`) will work with the `securityWorkflowInsightsService.update` method to update existing insights. --------- Co-authored-by: Joey F. Poon --- .../api/endpoint/workflow_insights/index.ts | 9 + .../workflow_insights.gen.ts | 103 ++++++ .../workflow_insights.schema.yaml | 218 +++++++++++++ .../workflow_insights.test.ts | 293 ++++++++++++++++++ .../workflow_insights/workflow_insights.ts | 133 ++++++++ .../common/api/quickstart_client.gen.ts | 41 +++ .../common/endpoint/constants.ts | 8 + .../endpoint/types/workflow_insights.ts | 2 +- .../assistant/tools/defend_insights/index.ts | 19 +- .../incompatible_antivirus.ts | 86 +++++ .../workflow_insights_builders/index.ts | 30 ++ .../workflow_insights/get_insights.test.ts | 104 +++++++ .../routes/workflow_insights/get_insights.ts | 80 +++++ .../routes/workflow_insights/index.ts | 23 ++ .../workflow_insights/update_insight.test.ts | 111 +++++++ .../workflow_insights/update_insight.ts | 80 +++++ .../services/workflow_insights/index.test.ts | 7 +- .../services/workflow_insights/index.ts | 17 +- .../security_solution/server/plugin.ts | 3 +- .../security_solution/server/routes/index.ts | 7 +- .../services/security_solution_api.gen.ts | 33 ++ 21 files changed, 1398 insertions(+), 9 deletions(-) create mode 100644 x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/index.ts create mode 100644 x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.gen.ts create mode 100644 x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.schema.yaml create mode 100644 x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.test.ts create mode 100644 x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.ts create mode 100644 x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/incompatible_antivirus.ts create mode 100644 x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/index.ts create mode 100644 x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.test.ts create mode 100644 x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts create mode 100644 x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/index.ts create mode 100644 x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.test.ts create mode 100644 x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts diff --git a/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/index.ts b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/index.ts new file mode 100644 index 0000000000000..dd8538a5d03cc --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './workflow_insights'; +export * from './workflow_insights.gen'; diff --git a/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.gen.ts b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.gen.ts new file mode 100644 index 0000000000000..646a1e565e3a8 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.gen.ts @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Workflow Insights API + * version: 1 + */ + +import { z } from '@kbn/zod'; +import { ArrayFromString } from '@kbn/zod-helpers'; + +import { SuccessResponse } from '../model/schema/common.gen'; + +export type GetWorkflowInsightsRequestQuery = z.infer; +export const GetWorkflowInsightsRequestQuery = z.object({ + size: z.coerce.number().int().optional(), + from: z.coerce.number().int().optional(), + ids: ArrayFromString(z.string()).optional(), + categories: ArrayFromString(z.literal('endpoint')).optional(), + types: ArrayFromString(z.enum(['incompatible_antivirus', 'noisy_process_tree'])).optional(), + sourceTypes: ArrayFromString(z.literal('llm-connector')).optional(), + sourceIds: ArrayFromString(z.string()).optional(), + targetTypes: ArrayFromString(z.literal('endpoint')).optional(), + targetIds: ArrayFromString(z.string()).optional(), + actionTypes: ArrayFromString(z.enum(['refreshed', 'remediated', 'suppressed', 'dismissed'])), +}); +export type GetWorkflowInsightsRequestQueryInput = z.input; + +export type GetWorkflowInsightsResponse = z.infer; +export const GetWorkflowInsightsResponse = SuccessResponse; + +export type UpdateWorkflowInsightRequestParams = z.infer; +export const UpdateWorkflowInsightRequestParams = z.object({ + insightId: z.string().min(1), +}); +export type UpdateWorkflowInsightRequestParamsInput = z.input< + typeof UpdateWorkflowInsightRequestParams +>; + +export type UpdateWorkflowInsightRequestBody = z.infer; +export const UpdateWorkflowInsightRequestBody = z.object({ + '@timestamp': z.string().optional(), + message: z.string().optional(), + category: z.literal('endpoint').optional(), + type: z.enum(['incompatible_antivirus', 'noisy_process_tree']).optional(), + source: z + .object({ + type: z.literal('llm-connector').optional(), + id: z.string().optional(), + data_range_start: z.string().optional(), + data_range_end: z.string().optional(), + }) + .optional(), + target: z + .object({ + type: z.literal('endpoint').optional(), + ids: z.array(z.string()).optional(), + }) + .optional(), + action: z + .object({ + type: z.enum(['refreshed', 'remediated', 'suppressed', 'dismissed']).optional(), + timestamp: z.string().optional(), + }) + .optional(), + value: z.string().optional(), + remediation: z + .object({ + exception_list_items: z + .array( + z.object({ + list_id: z.string().optional(), + name: z.string().optional(), + description: z.string().optional(), + entries: z.array(z.unknown()).optional(), + tags: z.array(z.string()).optional(), + os_types: z.array(z.string()).optional(), + }) + ) + .optional(), + }) + .optional(), + metadata: z + .object({ + notes: z.object({}).catchall(z.string()).optional(), + message_variables: z.array(z.string()).optional(), + }) + .optional(), +}); +export type UpdateWorkflowInsightRequestBodyInput = z.input< + typeof UpdateWorkflowInsightRequestBody +>; + +export type UpdateWorkflowInsightResponse = z.infer; +export const UpdateWorkflowInsightResponse = SuccessResponse; diff --git a/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.schema.yaml b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.schema.yaml new file mode 100644 index 0000000000000..00de6de8502e5 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.schema.yaml @@ -0,0 +1,218 @@ +openapi: 3.0.0 +info: + title: Workflow Insights API + version: '1' +paths: + /internal/api/endpoint/workflow_insights: + get: + summary: Retrieve workflow insights + operationId: GetWorkflowInsights + x-codegen-enabled: true + x-labels: [ess, serverless] + x-internal: true + parameters: + - name: size + in: query + required: false + schema: + type: integer + - name: from + in: query + required: false + schema: + type: integer + - name: ids + in: query + required: false + schema: + type: array + items: + type: string + - name: categories + in: query + required: false + schema: + type: array + items: + type: string + enum: + - endpoint + - name: types + in: query + required: false + schema: + type: array + items: + type: string + enum: + - incompatible_antivirus + - noisy_process_tree + - name: sourceTypes + in: query + required: false + schema: + type: array + items: + type: string + enum: + - llm-connector + - name: sourceIds + in: query + required: false + schema: + type: array + items: + type: string + - name: targetTypes + in: query + required: false + schema: + type: array + items: + type: string + enum: + - endpoint + - name: targetIds + in: query + required: false + schema: + type: array + items: + type: string + - name: actionTypes + in: query + required: true + schema: + type: array + items: + type: string + enum: + - refreshed + - remediated + - suppressed + - dismissed + + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' + + /internal/api/endpoint/workflow_insights/{insightId}: + put: + summary: Update a workflow insight + operationId: UpdateWorkflowInsight + x-codegen-enabled: true + x-labels: [ess, serverless] + x-internal: true + parameters: + - name: insightId + in: path + required: true + schema: + type: string + minLength: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + '@timestamp': + type: string + message: + type: string + category: + type: string + enum: + - endpoint + type: + type: string + enum: + - incompatible_antivirus + - noisy_process_tree + source: + type: object + properties: + type: + type: string + enum: + - llm-connector + id: + type: string + data_range_start: + type: string + data_range_end: + type: string + target: + type: object + properties: + type: + type: string + enum: + - endpoint + ids: + type: array + items: + type: string + action: + type: object + properties: + type: + type: string + enum: + - refreshed + - remediated + - suppressed + - dismissed + timestamp: + type: string + value: + type: string + remediation: + type: object + properties: + exception_list_items: + type: array + items: + type: object + properties: + list_id: + type: string + name: + type: string + description: + type: string + entries: + type: array + items: {} + tags: + type: array + items: + type: string + os_types: + type: array + items: + type: string + metadata: + type: object + properties: + notes: + type: object + additionalProperties: + type: string + message_variables: + type: array + items: + type: string + + responses: + '200': + description: Updated successfully + content: + application/json: + schema: + $ref: '../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' diff --git a/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.test.ts b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.test.ts new file mode 100644 index 0000000000000..280c2abcff069 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.test.ts @@ -0,0 +1,293 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; + +import { + GetWorkflowInsightsRequestSchema, + UpdateWorkflowInsightRequestSchema, +} from './workflow_insights'; + +describe('Workflow Insights', () => { + describe('GetWorkflowInsightsRequestSchema', () => { + const validateQuery = (query: Record) => { + return schema.object(GetWorkflowInsightsRequestSchema).validate(query); + }; + + it('should validate successfully with valid parameters', () => { + const validQuery = { + query: { + size: 10, + from: 0, + ids: ['valid-id-1', 'valid-id-2'], + categories: ['endpoint'], + types: ['incompatible_antivirus'], + sourceTypes: ['llm-connector'], + sourceIds: ['source-1', 'source-2'], + targetTypes: ['endpoint'], + targetIds: ['target-1', 'target-2'], + actionTypes: ['refreshed', 'remediated'], + }, + }; + + expect(() => validateQuery(validQuery)).not.toThrow(); + }); + + it('should throw an error for invalid types', () => { + const invalidQuery = { + query: { + size: 'not-a-number', // Invalid size + actionTypes: ['invalid-action'], // Invalid action type + }, + }; + + expect(() => validateQuery(invalidQuery)).toThrowErrorMatchingInlineSnapshot( + '"[query.size]: expected value of type [number] but got [string]"' + ); + }); + + it('should throw an error if ids contain empty strings', () => { + const invalidQuery = { + query: { + ids: ['valid-id', ''], + actionTypes: ['refreshed'], + }, + }; + + expect(() => validateQuery(invalidQuery)).toThrowErrorMatchingInlineSnapshot( + '"[query.ids.1]: value has length [0] but it must have a minimum length of [1]."' + ); + }); + + it('should throw an error if sourceIds contain empty strings', () => { + const invalidQuery = { + query: { + sourceIds: ['valid-source', ' '], + actionTypes: ['refreshed'], + }, + }; + + expect(() => validateQuery(invalidQuery)).toThrowErrorMatchingInlineSnapshot( + '"[query.sourceIds.1]: sourceId cannot be an empty string"' + ); + }); + + it('should validate successfully when optional fields are omitted', () => { + const validQuery = { + query: {}, + }; + + expect(() => validateQuery(validQuery)).not.toThrow(); + }); + + it('should throw an error for unsupported categories or types', () => { + const invalidQuery = { + query: { + categories: ['unsupported-category'], + types: ['unsupported-type'], + actionTypes: ['refreshed'], + }, + }; + + expect(() => validateQuery(invalidQuery)).toThrowErrorMatchingInlineSnapshot( + '"[query.categories.0]: expected value to equal [endpoint]"' + ); + }); + }); + + describe('UpdateWorkflowInsightRequestSchema', () => { + const validateRequest = (request: Record) => { + return schema.object(UpdateWorkflowInsightRequestSchema).validate(request); + }; + + it('should validate successfully with valid parameters', () => { + const validRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + '@timestamp': '2024-11-29T00:00:00Z', + message: 'Valid message', + category: 'endpoint', + type: 'incompatible_antivirus', + source: { + type: 'llm-connector', + id: 'source-id', + data_range_start: '2024-11-01T00:00:00Z', + data_range_end: '2024-11-30T00:00:00Z', + }, + target: { + type: 'endpoint', + ids: ['target-id-1', 'target-id-2'], + }, + action: { + type: 'refreshed', + timestamp: '2024-11-29T00:00:00Z', + }, + value: 'Valid value', + remediation: { + exception_list_items: [ + { + list_id: 'list-id', + name: 'Exception 1', + description: 'Description', + entries: [{ key: 'value' }], + tags: ['tag1'], + os_types: ['windows'], + }, + ], + }, + metadata: { + notes: { note1: 'Value 1' }, + message_variables: ['var1', 'var2'], + }, + }, + }; + + expect(() => validateRequest(validRequest)).not.toThrow(); + }); + + it('should throw an error if insightId is missing', () => { + const invalidRequest = { + params: {}, + body: {}, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot( + '"[params.insightId]: expected value of type [string] but got [undefined]"' + ); + }); + + it('should throw an error if insightId is an empty string', () => { + const invalidRequest = { + params: { + insightId: '', + }, + body: {}, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot( + '"[params.insightId]: value has length [0] but it must have a minimum length of [1]."' + ); + }); + + it('should throw an error if category is invalid', () => { + const invalidRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + category: 'invalid-category', // Invalid category + type: 'incompatible_antivirus', + action: { type: 'refreshed' }, + }, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot( + '"[body.category]: expected value to equal [endpoint]"' + ); + }); + + it('should throw an error if type is invalid', () => { + const invalidRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + type: 'invalid-type', // Invalid type + action: { type: 'refreshed' }, + }, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot(` + "[body.type]: types that failed validation: + - [body.type.0]: expected value to equal [incompatible_antivirus] + - [body.type.1]: expected value to equal [noisy_process_tree]" + `); + }); + + it('should throw an error if target ids contain empty strings', () => { + const invalidRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + target: { + type: 'endpoint', + ids: ['valid-id', ''], // Invalid empty string in ids + }, + action: { type: 'refreshed' }, + }, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot( + '"[body.target.ids.1]: value has length [0] but it must have a minimum length of [1]."' + ); + }); + + it('should validate successfully when optional fields are omitted', () => { + const validRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + action: { type: 'refreshed' }, + }, + }; + + expect(() => validateRequest(validRequest)).not.toThrow(); + }); + + it('should throw an error for unsupported action types', () => { + const invalidRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + action: { + type: 'unsupported-action', // Invalid action type + }, + }, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot(` + "[body.action.type]: types that failed validation: + - [body.action.type.0]: expected value to equal [refreshed] + - [body.action.type.1]: expected value to equal [remediated] + - [body.action.type.2]: expected value to equal [suppressed] + - [body.action.type.3]: expected value to equal [dismissed]" + `); + }); + + it('should throw an error if remediation list items contain invalid data', () => { + const invalidRequest = { + params: { + insightId: 'valid-insight-id', + }, + body: { + remediation: { + exception_list_items: [ + { + list_id: 'list-id', + name: 'Exception 1', + description: 'Description', + entries: 'invalid-entries', // Invalid entries + tags: ['tag1'], + os_types: ['windows'], + }, + ], + }, + action: { type: 'refreshed' }, + }, + }; + + expect(() => validateRequest(invalidRequest)).toThrowErrorMatchingInlineSnapshot( + '"[body.remediation.exception_list_items.0.entries]: could not parse array value from json input"' + ); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.ts b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.ts new file mode 100644 index 0000000000000..982dce0d6fbac --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/endpoint/workflow_insights/workflow_insights.ts @@ -0,0 +1,133 @@ +/* + * 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'; + +const arrayWithNonEmptyString = (field: string) => + schema.arrayOf( + schema.string({ + minLength: 1, + validate: (id) => { + if (id.trim() === '') { + return `${field} cannot be an empty string`; + } + }, + }) + ); + +export const UpdateWorkflowInsightRequestSchema = { + params: schema.object({ + insightId: schema.string({ + minLength: 1, + validate: (id) => { + if (id.trim() === '') { + return 'insightId cannot be an empty string'; + } + }, + }), + }), + body: schema.object({ + '@timestamp': schema.maybe(schema.string()), + message: schema.maybe(schema.string()), + category: schema.maybe(schema.oneOf([schema.literal('endpoint')])), + type: schema.maybe( + schema.oneOf([schema.literal('incompatible_antivirus'), schema.literal('noisy_process_tree')]) + ), + source: schema.maybe( + schema.object({ + type: schema.maybe(schema.oneOf([schema.literal('llm-connector')])), + id: schema.maybe(schema.string()), + data_range_start: schema.maybe(schema.string()), + data_range_end: schema.maybe(schema.string()), + }) + ), + target: schema.maybe( + schema.object({ + type: schema.maybe(schema.oneOf([schema.literal('endpoint')])), + ids: schema.maybe(arrayWithNonEmptyString('target.id')), + }) + ), + action: schema.maybe( + schema.object({ + type: schema.maybe( + schema.oneOf([ + schema.literal('refreshed'), + schema.literal('remediated'), + schema.literal('suppressed'), + schema.literal('dismissed'), + ]) + ), + timestamp: schema.maybe(schema.string()), + }) + ), + value: schema.maybe(schema.string()), + remediation: schema.maybe( + schema.object({ + exception_list_items: schema.maybe( + schema.arrayOf( + schema.object({ + list_id: schema.maybe(schema.string()), + name: schema.maybe(schema.string()), + description: schema.maybe(schema.string()), + entries: schema.maybe(schema.arrayOf(schema.any())), + tags: schema.maybe(arrayWithNonEmptyString('tag')), + os_types: schema.maybe(arrayWithNonEmptyString('os_type')), + }) + ) + ), + }) + ), + metadata: schema.maybe( + schema.object({ + notes: schema.maybe(schema.recordOf(schema.string(), schema.string())), + message_variables: schema.maybe(arrayWithNonEmptyString('message_variable')), + }) + ), + }), +}; + +export const GetWorkflowInsightsRequestSchema = { + query: schema.object({ + size: schema.maybe(schema.number()), + from: schema.maybe(schema.number()), + ids: schema.maybe(arrayWithNonEmptyString('ids')), + categories: schema.maybe(schema.arrayOf(schema.oneOf([schema.literal('endpoint')]))), + types: schema.maybe( + schema.arrayOf( + schema.oneOf([ + schema.literal('incompatible_antivirus'), + schema.literal('noisy_process_tree'), + ]) + ) + ), + sourceTypes: schema.maybe(schema.arrayOf(schema.oneOf([schema.literal('llm-connector')]))), + sourceIds: schema.maybe(arrayWithNonEmptyString('sourceId')), + targetTypes: schema.maybe(schema.arrayOf(schema.oneOf([schema.literal('endpoint')]))), + targetIds: schema.maybe(arrayWithNonEmptyString('targetId')), + actionTypes: schema.maybe( + schema.arrayOf( + schema.oneOf([ + schema.literal('refreshed'), + schema.literal('remediated'), + schema.literal('suppressed'), + schema.literal('dismissed'), + ]) + ) + ), + }), +}; + +export type GetWorkflowInsightsRequestQueryParams = TypeOf< + typeof GetWorkflowInsightsRequestSchema.query +>; + +export type UpdateWorkflowInsightsRequestParams = TypeOf< + typeof UpdateWorkflowInsightRequestSchema.params +>; +export type UpdateWorkflowInsightsRequestBody = TypeOf< + typeof UpdateWorkflowInsightRequestSchema.body +>; diff --git a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts index b03a81b3b2249..994fb70deaa25 100644 --- a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts +++ b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts @@ -205,6 +205,13 @@ import type { GetEndpointSuggestionsRequestBodyInput, GetEndpointSuggestionsResponse, } from './endpoint/suggestions/get_suggestions.gen'; +import type { + GetWorkflowInsightsRequestQueryInput, + GetWorkflowInsightsResponse, + UpdateWorkflowInsightRequestParamsInput, + UpdateWorkflowInsightRequestBodyInput, + UpdateWorkflowInsightResponse, +} from './endpoint/workflow_insights/workflow_insights.gen'; import type { BulkUpsertAssetCriticalityRecordsRequestBodyInput, BulkUpsertAssetCriticalityRecordsResponse, @@ -1510,6 +1517,20 @@ finalize it. }) .catch(catchAxiosErrorFormatAndThrow); } + async getWorkflowInsights(props: GetWorkflowInsightsProps) { + this.log.info(`${new Date().toISOString()} Calling API GetWorkflowInsights`); + return this.kbnClient + .request({ + path: '/internal/api/endpoint/workflow_insights', + headers: { + [ELASTIC_HTTP_VERSION_HEADER]: '1', + }, + method: 'GET', + + query: props.query, + }) + .catch(catchAxiosErrorFormatAndThrow); + } /** * Import detection rules from an `.ndjson` file, including actions and exception lists. The request must include: - The `Content-Type: multipart/form-data` HTTP header. @@ -2162,6 +2183,19 @@ detection engine rules. }) .catch(catchAxiosErrorFormatAndThrow); } + async updateWorkflowInsight(props: UpdateWorkflowInsightProps) { + this.log.info(`${new Date().toISOString()} Calling API UpdateWorkflowInsight`); + return this.kbnClient + .request({ + path: replaceParams('/internal/api/endpoint/workflow_insights/{insightId}', props.params), + headers: { + [ELASTIC_HTTP_VERSION_HEADER]: '1', + }, + method: 'PUT', + body: props.body, + }) + .catch(catchAxiosErrorFormatAndThrow); + } async uploadAssetCriticalityRecords(props: UploadAssetCriticalityRecordsProps) { this.log.info(`${new Date().toISOString()} Calling API UploadAssetCriticalityRecords`); return this.kbnClient @@ -2376,6 +2410,9 @@ export interface GetTimelineProps { export interface GetTimelinesProps { query: GetTimelinesRequestQueryInput; } +export interface GetWorkflowInsightsProps { + query: GetWorkflowInsightsRequestQueryInput; +} export interface ImportRulesProps { query: ImportRulesRequestQueryInput; attachment: FormData; @@ -2478,6 +2515,10 @@ export interface UpdateRuleProps { export interface UpdateRuleMigrationProps { body: UpdateRuleMigrationRequestBodyInput; } +export interface UpdateWorkflowInsightProps { + params: UpdateWorkflowInsightRequestParamsInput; + body: UpdateWorkflowInsightRequestBodyInput; +} export interface UploadAssetCriticalityRecordsProps { attachment: FormData; } diff --git a/x-pack/plugins/security_solution/common/endpoint/constants.ts b/x-pack/plugins/security_solution/common/endpoint/constants.ts index b53c7ae761547..6aae156e9ac11 100644 --- a/x-pack/plugins/security_solution/common/endpoint/constants.ts +++ b/x-pack/plugins/security_solution/common/endpoint/constants.ts @@ -129,3 +129,11 @@ export const ENDPOINT_PACKAGE_POLICIES_STATS_STRATEGY = 'endpointPackagePolicies /** The list of OS types that support. Value usually found in ECS `host.os.type` */ export const SUPPORTED_HOST_OS_TYPE = Object.freeze(['macos', 'windows', 'linux'] as const); export type SupportedHostOsType = (typeof SUPPORTED_HOST_OS_TYPE)[number]; + +/** + * Workflow Insights + */ + +export const BASE_WORKFLOW_INSIGHTS_ROUTE = `/workflow_insights`; +export const WORKFLOW_INSIGHTS_ROUTE = `${BASE_INTERNAL_ENDPOINT_ROUTE}${BASE_WORKFLOW_INSIGHTS_ROUTE}`; +export const WORKFLOW_INSIGHTS_UPDATE_ROUTE = `${WORKFLOW_INSIGHTS_ROUTE}/{insightId}`; diff --git a/x-pack/plugins/security_solution/common/endpoint/types/workflow_insights.ts b/x-pack/plugins/security_solution/common/endpoint/types/workflow_insights.ts index 11cbc1bfd7cd8..3212193c981cb 100644 --- a/x-pack/plugins/security_solution/common/endpoint/types/workflow_insights.ts +++ b/x-pack/plugins/security_solution/common/endpoint/types/workflow_insights.ts @@ -74,5 +74,5 @@ export interface SearchParams { sourceIds?: string[]; targetTypes?: TargetType[]; targetIds?: string[]; - actionTypes: ActionType[]; + actionTypes?: ActionType[]; } diff --git a/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/index.ts b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/index.ts index 1ea26b88a15cf..49524a9f15190 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/index.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/index.ts @@ -11,21 +11,29 @@ import { LLMChain } from 'langchain/chains'; import { OutputFixingParser } from 'langchain/output_parsers'; import type { AssistantTool, AssistantToolParams } from '@kbn/elastic-assistant-plugin/server'; -import type { DefendInsightType } from '@kbn/elastic-assistant-common'; +import type { + DefendInsight, + DefendInsightType, + DefendInsightsPostRequestBody, +} from '@kbn/elastic-assistant-common'; +import type { KibanaRequest } from '@kbn/core/server'; import { requestHasRequiredAnonymizationParams } from '@kbn/elastic-assistant-plugin/server/lib/langchain/helpers'; import { DEFEND_INSIGHTS_TOOL_ID } from '@kbn/elastic-assistant-common'; import { APP_UI_ID } from '../../../../common'; +import { securityWorkflowInsightsService } from '../../../endpoint/services'; import { getAnonymizedEvents } from './get_events'; import { getDefendInsightsOutputParser } from './output_parsers'; import { getDefendInsightsPrompt } from './prompts'; +import { buildWorkflowInsights } from './workflow_insights_builders'; export const DEFEND_INSIGHTS_TOOL_DESCRIPTION = 'Call this for Elastic Defend insights.'; export interface DefendInsightsToolParams extends AssistantToolParams { endpointIds: string[]; insightType: DefendInsightType; + request: KibanaRequest; } /** @@ -55,6 +63,7 @@ export const DEFEND_INSIGHTS_TOOL: AssistantTool = Object.freeze({ llm, onNewReplacements, replacements, + request, } = params as DefendInsightsToolParams; return new DynamicTool({ @@ -104,7 +113,13 @@ export const DEFEND_INSIGHTS_TOOL: AssistantTool = Object.freeze({ }), timeout: langChainTimeout, }); - const insights = result.records; + const insights: DefendInsight[] = result.records; + + const workflowInsights = buildWorkflowInsights({ + defendInsights: insights, + request, + }); + workflowInsights.map(securityWorkflowInsightsService.create); return JSON.stringify({ eventsContextCount, insights }, null, 2); }, diff --git a/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/incompatible_antivirus.ts b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/incompatible_antivirus.ts new file mode 100644 index 0000000000000..c9d091f76dbc3 --- /dev/null +++ b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/incompatible_antivirus.ts @@ -0,0 +1,86 @@ +/* + * 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 moment from 'moment'; + +import { ENDPOINT_ARTIFACT_LISTS } from '@kbn/securitysolution-list-constants'; + +import type { DefendInsight } from '@kbn/elastic-assistant-common'; +import type { BuildWorkflowInsightParams } from '.'; +import type { SecurityWorkflowInsight } from '../../../../../common/endpoint/types/workflow_insights'; + +import { + ActionType, + Category, + SourceType, + TargetType, +} from '../../../../../common/endpoint/types/workflow_insights'; +import { SUPPORTED_HOST_OS_TYPE } from '../../../../../common/endpoint/constants'; + +export function buildIncompatibleAntivirusWorkflowInsights( + params: BuildWorkflowInsightParams +): SecurityWorkflowInsight[] { + const currentTime = moment(); + const { defendInsights, request } = params; + const { insightType, endpointIds, apiConfig } = request.body; + return defendInsights.map((defendInsight: DefendInsight) => { + const filePaths = (defendInsight.events ?? []).map((event) => event.value); + return { + '@timestamp': currentTime, + // TODO add i18n support + message: 'Incompatible antiviruses detected', + category: Category.Endpoint, + type: insightType, + source: { + type: SourceType.LlmConnector, + id: apiConfig.connectorId, + // TODO use actual time range when we add support + data_range_start: currentTime, + data_range_end: currentTime.clone().add(24, 'hours'), + }, + target: { + type: TargetType.Endpoint, + ids: endpointIds, + }, + action: { + type: ActionType.Refreshed, + timestamp: currentTime, + }, + value: defendInsight.group, + remediation: { + exception_list_items: [ + { + list_id: ENDPOINT_ARTIFACT_LISTS.blocklists.id, + name: defendInsight.group, + description: 'Suggested by Security Workflow Insights', + entries: [ + { + field: 'file.path.caseless', + operator: 'included', + type: 'match_any', + value: filePaths, + }, + ], + // TODO add per policy support + tags: ['policy:all'], + os_types: [ + // TODO pick this based on endpointIds + SUPPORTED_HOST_OS_TYPE[0], + SUPPORTED_HOST_OS_TYPE[1], + SUPPORTED_HOST_OS_TYPE[2], + ], + }, + ], + }, + metadata: { + notes: { + llm_model: apiConfig.model ?? '', + }, + }, + }; + }); +} diff --git a/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/index.ts b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/index.ts new file mode 100644 index 0000000000000..4694617229f04 --- /dev/null +++ b/x-pack/plugins/security_solution/server/assistant/tools/defend_insights/workflow_insights_builders/index.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 { KibanaRequest } from '@kbn/core/server'; + +import type { DefendInsight, DefendInsightsPostRequestBody } from '@kbn/elastic-assistant-common'; +import { DefendInsightType } from '@kbn/elastic-assistant-common'; +import type { SecurityWorkflowInsight } from '../../../../../common/endpoint/types/workflow_insights'; + +import { InvalidDefendInsightTypeError } from '../errors'; +import { buildIncompatibleAntivirusWorkflowInsights } from './incompatible_antivirus'; + +export interface BuildWorkflowInsightParams { + defendInsights: DefendInsight[]; + request: KibanaRequest; +} + +export function buildWorkflowInsights( + params: BuildWorkflowInsightParams +): SecurityWorkflowInsight[] { + if (params.request.body.insightType === DefendInsightType.Enum.incompatible_antivirus) { + return buildIncompatibleAntivirusWorkflowInsights(params); + } + + throw new InvalidDefendInsightTypeError(); +} diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.test.ts new file mode 100644 index 0000000000000..6f928ee599b34 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.test.ts @@ -0,0 +1,104 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { httpServerMock, httpServiceMock } from '@kbn/core/server/mocks'; +import { createMockEndpointAppContext, getRegisteredVersionedRouteMock } from '../../mocks'; +import { registerGetInsightsRoute } from './get_insights'; +import { WORKFLOW_INSIGHTS_ROUTE } from '../../../../common/endpoint/constants'; + +jest.mock('../../services', () => ({ + securityWorkflowInsightsService: { + fetch: jest.fn(), + }, +})); + +const fetchMock = jest.requireMock('../../services').securityWorkflowInsightsService + .fetch as jest.Mock; + +describe('Get Insights Route Handler', () => { + let mockResponse: ReturnType; + let callRoute: (params: Record, authz?: Record) => Promise; + + beforeEach(() => { + mockResponse = httpServerMock.createResponseFactory(); + + const mockEndpointContext = createMockEndpointAppContext(); + const router = httpServiceMock.createRouter(); + + registerGetInsightsRoute(router, mockEndpointContext); + + callRoute = async (params, authz = { canReadSecuritySolution: true }) => { + const mockContext = { + core: { + security: { + authc: { + getCurrentUser: jest + .fn() + .mockReturnValue({ username: 'test-user', roles: ['admin'] }), + }, + }, + }, + securitySolution: { + getEndpointAuthz: jest.fn().mockResolvedValue(authz), + }, + }; + + const request = httpServerMock.createKibanaRequest({ + method: 'get', + path: WORKFLOW_INSIGHTS_ROUTE, + query: params, + }); + + const { routeHandler } = getRegisteredVersionedRouteMock( + router, + 'get', + WORKFLOW_INSIGHTS_ROUTE, + '1' + )!; + await routeHandler(mockContext, request, mockResponse); + }; + }); + + describe('with valid privileges', () => { + it('should fetch insights and return them', async () => { + const mockInsights = [ + { _source: { id: 1, name: 'Insight 1' } }, + { _source: { id: 2, name: 'Insight 2' } }, + ]; + fetchMock.mockResolvedValue(mockInsights); + + await callRoute({ query: 'test-query' }); + + expect(fetchMock).toHaveBeenCalledWith({ query: 'test-query' }); + expect(mockResponse.ok).toHaveBeenCalledWith({ + body: [ + { id: 1, name: 'Insight 1' }, + { id: 2, name: 'Insight 2' }, + ], + }); + }); + + it('should handle missing query parameters', async () => { + fetchMock.mockResolvedValue([]); + + await callRoute({}); + + expect(fetchMock).toHaveBeenCalledWith({}); + expect(mockResponse.ok).toHaveBeenCalledWith({ + body: [], + }); + }); + }); + + describe('with invalid privileges', () => { + it('should return forbidden if user lacks read privileges', async () => { + await callRoute({}, { canReadSecuritySolution: false }); + + expect(mockResponse.forbidden).toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts new file mode 100644 index 0000000000000..910df9b593fad --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IKibanaResponse, RequestHandler } from '@kbn/core/server'; +import type { GetWorkflowInsightsRequestQueryParams } from '../../../../common/api/endpoint/workflow_insights/workflow_insights'; +import { GetWorkflowInsightsRequestSchema } from '../../../../common/api/endpoint/workflow_insights/workflow_insights'; +import type { + SearchParams, + SecurityWorkflowInsight, +} from '../../../../common/endpoint/types/workflow_insights'; +import { securityWorkflowInsightsService } from '../../services'; +import { errorHandler } from '../error_handler'; +import { WORKFLOW_INSIGHTS_ROUTE } from '../../../../common/endpoint/constants'; +import { withEndpointAuthz } from '../with_endpoint_authz'; +import type { + SecuritySolutionPluginRouter, + SecuritySolutionRequestHandlerContext, +} from '../../../types'; +import type { EndpointAppContext } from '../../types'; + +export const registerGetInsightsRoute = ( + router: SecuritySolutionPluginRouter, + endpointContext: EndpointAppContext +) => { + router.versioned + .get({ + access: 'internal', + path: WORKFLOW_INSIGHTS_ROUTE, + security: { + authz: { + requiredPrivileges: ['securitySolution'], + }, + }, + options: { authRequired: true }, + }) + .addVersion( + { + version: '1', + validate: { + request: GetWorkflowInsightsRequestSchema, + }, + }, + withEndpointAuthz( + { all: ['canReadSecuritySolution'] }, + endpointContext.logFactory.get('workflowInsights'), + getInsightsRouteHandler(endpointContext) + ) + ); +}; + +export const getInsightsRouteHandler = ( + endpointContext: EndpointAppContext +): RequestHandler< + never, + GetWorkflowInsightsRequestQueryParams, + unknown, + SecuritySolutionRequestHandlerContext +> => { + const logger = endpointContext.logFactory.get('workflowInsights'); + + return async (_, request, response): Promise> => { + try { + logger.debug('Fetching workflow insights'); + + const insightsResponse = await securityWorkflowInsightsService.fetch( + request.query as SearchParams + ); + + const body = insightsResponse.flatMap((insight) => insight._source || []); + + return response.ok({ body }); + } catch (e) { + return errorHandler(logger, response, e); + } + }; +}; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/index.ts b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/index.ts new file mode 100644 index 0000000000000..3fc3a0a70d1b9 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/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 { registerUpdateInsightsRoute } from './update_insight'; +import { registerGetInsightsRoute } from './get_insights'; +import type { SecuritySolutionPluginRouter } from '../../../types'; +import type { ConfigType } from '../../..'; +import type { EndpointAppContext } from '../../types'; + +export const registerWorkflowInsightsRoutes = ( + router: SecuritySolutionPluginRouter, + config: ConfigType, + endpointContext: EndpointAppContext +) => { + if (config.experimentalFeatures.defendInsights) { + registerGetInsightsRoute(router, endpointContext); + registerUpdateInsightsRoute(router, endpointContext); + } +}; diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.test.ts b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.test.ts new file mode 100644 index 0000000000000..0a8e2e1bf8771 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.test.ts @@ -0,0 +1,111 @@ +/* + * 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 { httpServerMock, httpServiceMock } from '@kbn/core/server/mocks'; +import { registerUpdateInsightsRoute } from './update_insight'; +import { createMockEndpointAppContext, getRegisteredVersionedRouteMock } from '../../mocks'; +import { WORKFLOW_INSIGHTS_UPDATE_ROUTE } from '../../../../common/endpoint/constants'; + +jest.mock('../../services', () => ({ + securityWorkflowInsightsService: { + update: jest.fn(), + }, +})); + +const updateMock = jest.requireMock('../../services').securityWorkflowInsightsService + .update as jest.Mock; + +describe('Update Insights Route Handler', () => { + let mockResponse: ReturnType; + let callRoute: ( + params: Record, + body: Record, + authz?: Record + ) => Promise; + + beforeEach(() => { + mockResponse = httpServerMock.createResponseFactory(); + + const mockEndpointContext = createMockEndpointAppContext(); + const router = httpServiceMock.createRouter(); + + registerUpdateInsightsRoute(router, mockEndpointContext); + + callRoute = async (params, body, authz = { canReadSecuritySolution: true }) => { + const mockContext = { + core: { + security: { + authc: { + getCurrentUser: jest + .fn() + .mockReturnValue({ username: 'test-user', roles: ['admin'] }), + }, + }, + }, + securitySolution: { + getEndpointAuthz: jest.fn().mockResolvedValue(authz), + }, + }; + + const request = httpServerMock.createKibanaRequest({ + method: 'put', + path: WORKFLOW_INSIGHTS_UPDATE_ROUTE, + params, + body, + }); + + const { routeHandler } = getRegisteredVersionedRouteMock( + router, + 'put', + WORKFLOW_INSIGHTS_UPDATE_ROUTE, + '1' + )!; + await routeHandler(mockContext, request, mockResponse); + }; + }); + + describe('with valid privileges', () => { + it('should update insight and return the updated data', async () => { + const mockUpdatedInsight = { id: 1, name: 'Updated Insight', type: 'incompatible_antivirus' }; + updateMock.mockResolvedValue(mockUpdatedInsight); + + const updateBody = { name: 'Updated Insight' }; + + await callRoute({ insightId: '1' }, updateBody); + + expect(updateMock).toHaveBeenCalledWith('1', updateBody); + expect(mockResponse.ok).toHaveBeenCalledWith({ + body: mockUpdatedInsight, + }); + }); + + it('should handle missing body parameters', async () => { + updateMock.mockResolvedValue({ id: 1, name: 'Insight 1' }); + + const updateBody = {}; // Empty body to test missing parameters + + await callRoute({ insightId: '1' }, updateBody); + + expect(updateMock).toHaveBeenCalledWith('1', {}); + expect(mockResponse.ok).toHaveBeenCalledWith({ + body: { id: 1, name: 'Insight 1' }, + }); + }); + }); + + describe('with invalid privileges', () => { + it('should return forbidden if user lacks read privileges', async () => { + await callRoute( + { insightId: '1' }, + { name: 'Updated Insight' }, + { canReadSecuritySolution: false } + ); + + expect(mockResponse.forbidden).toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts new file mode 100644 index 0000000000000..82ffc547067c1 --- /dev/null +++ b/x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { RequestHandler } from '@kbn/core/server'; +import type { + UpdateWorkflowInsightsRequestBody, + UpdateWorkflowInsightsRequestParams, +} from '../../../../common/api/endpoint/workflow_insights/workflow_insights'; +import { UpdateWorkflowInsightRequestSchema } from '../../../../common/api/endpoint/workflow_insights/workflow_insights'; +import { securityWorkflowInsightsService } from '../../services'; + +import { errorHandler } from '../error_handler'; +import { WORKFLOW_INSIGHTS_UPDATE_ROUTE } from '../../../../common/endpoint/constants'; +import { withEndpointAuthz } from '../with_endpoint_authz'; +import type { + SecuritySolutionPluginRouter, + SecuritySolutionRequestHandlerContext, +} from '../../../types'; +import type { EndpointAppContext } from '../../types'; +import type { SecurityWorkflowInsight } from '../../../../common/endpoint/types/workflow_insights'; + +export const registerUpdateInsightsRoute = ( + router: SecuritySolutionPluginRouter, + endpointContext: EndpointAppContext +) => { + router.versioned + .put({ + access: 'internal', + path: WORKFLOW_INSIGHTS_UPDATE_ROUTE, + security: { + authz: { + requiredPrivileges: ['securitySolution'], + }, + }, + options: { authRequired: true }, + }) + .addVersion( + { + version: '1', + validate: { + request: UpdateWorkflowInsightRequestSchema, + }, + }, + withEndpointAuthz( + { all: ['canReadSecuritySolution'] }, + endpointContext.logFactory.get('workflowInsights'), + updateInsightsRouteHandler(endpointContext) + ) + ); +}; + +const updateInsightsRouteHandler = ( + endpointContext: EndpointAppContext +): RequestHandler< + UpdateWorkflowInsightsRequestParams, + unknown, + UpdateWorkflowInsightsRequestBody, + SecuritySolutionRequestHandlerContext +> => { + const logger = endpointContext.logFactory.get('workflowInsights'); + + return async (_, request, response) => { + const { insightId } = request.params; + + logger.debug(`Updating insight ${insightId}`); + try { + const body = await securityWorkflowInsightsService.update( + insightId, + request.body as Partial + ); + return response.ok({ body }); + } catch (e) { + return errorHandler(logger, response, e); + } + }; +}; diff --git a/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.test.ts b/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.test.ts index 792a7a9ecd949..1b7ba20f6af88 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.test.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.test.ts @@ -212,6 +212,7 @@ describe('SecurityWorkflowInsightsService', () => { expect(esClient.index).toHaveBeenCalledWith({ index: DATA_STREAM_NAME, body: insight, + refresh: 'wait_for', }); }); }); @@ -225,16 +226,18 @@ describe('SecurityWorkflowInsightsService', () => { await securityWorkflowInsightsService.start({ esClient }); const insightId = 'some-insight-id'; const insight = getDefaultInsight(); - await securityWorkflowInsightsService.update(insightId, insight); + const indexName = 'backing-index-name'; + await securityWorkflowInsightsService.update(insightId, insight, indexName); // ensure it waits for initialization first expect(isInitializedSpy).toHaveBeenCalledTimes(1); // updates the doc expect(esClient.update).toHaveBeenCalledTimes(1); expect(esClient.update).toHaveBeenCalledWith({ - index: DATA_STREAM_NAME, + index: indexName, id: insightId, body: { doc: insight }, + refresh: 'wait_for', }); }); }); diff --git a/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.ts b/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.ts index 0aa495dac0931..e03b9340e9784 100644 --- a/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.ts +++ b/x-pack/plugins/security_solution/server/endpoint/services/workflow_insights/index.ts @@ -114,6 +114,7 @@ class SecurityWorkflowInsightsService { const response = await this.esClient.index({ index: DATA_STREAM_NAME, body: insight, + refresh: 'wait_for', }); return response; @@ -121,14 +122,26 @@ class SecurityWorkflowInsightsService { public async update( id: string, - insight: Partial + insight: Partial, + backingIndex?: string ): Promise { await this.isInitialized; + let index = backingIndex; + if (!index) { + const retrievedInsight = (await this.fetch({ ids: [id] }))[0]; + index = retrievedInsight?._index; + } + + if (!index) { + throw new Error('invalid backing index for updating workflow insight'); + } + const response = await this.esClient.update({ - index: DATA_STREAM_NAME, + index, id, body: { doc: insight }, + refresh: 'wait_for', }); return response; diff --git a/x-pack/plugins/security_solution/server/plugin.ts b/x-pack/plugins/security_solution/server/plugin.ts index 4b66d73c93b1f..e371e0fc3b7b5 100644 --- a/x-pack/plugins/security_solution/server/plugin.ts +++ b/x-pack/plugins/security_solution/server/plugin.ts @@ -396,7 +396,8 @@ export class Plugin implements ISecuritySolutionPlugin { securityRuleTypeOptions, previewRuleDataClient, this.telemetryReceiver, - this.pluginContext.env.packageInfo.buildFlavor === 'serverless' + this.pluginContext.env.packageInfo.buildFlavor === 'serverless', + this.endpointContext ); registerEndpointRoutes(router, this.endpointContext); diff --git a/x-pack/plugins/security_solution/server/routes/index.ts b/x-pack/plugins/security_solution/server/routes/index.ts index ff1166413b9fc..140ef1c670f61 100644 --- a/x-pack/plugins/security_solution/server/routes/index.ts +++ b/x-pack/plugins/security_solution/server/routes/index.ts @@ -8,6 +8,7 @@ import type { StartServicesAccessor, Logger } from '@kbn/core/server'; import type { IRuleDataClient, RuleDataPluginService } from '@kbn/rule-registry-plugin/server'; +import type { EndpointAppContext } from '../endpoint/types'; import type { SecuritySolutionPluginRouter } from '../types'; import { registerFleetIntegrationsRoutes } from '../lib/detection_engine/fleet_integrations'; @@ -41,6 +42,7 @@ import type { ITelemetryReceiver } from '../lib/telemetry/receiver'; import { telemetryDetectionRulesPreviewRoute } from '../lib/detection_engine/routes/telemetry/telemetry_detection_rules_preview_route'; import { readAlertsIndexExistsRoute } from '../lib/detection_engine/routes/index/read_alerts_index_exists_route'; import { registerResolverRoutes } from '../endpoint/routes/resolver'; +import { registerWorkflowInsightsRoutes } from '../endpoint/routes/workflow_insights'; import { createEsIndexRoute, createPrebuiltSavedObjectsRoute, @@ -78,7 +80,8 @@ export const initRoutes = ( securityRuleTypeOptions: CreateSecurityRuleTypeWrapperProps, previewRuleDataClient: IRuleDataClient, previewTelemetryReceiver: ITelemetryReceiver, - isServerless: boolean + isServerless: boolean, + endpointContext: EndpointAppContext ) => { registerFleetIntegrationsRoutes(router); registerLegacyRuleActionsRoutes(router, logger); @@ -154,4 +157,6 @@ export const initRoutes = ( // Security Integrations getFleetManagedIndexTemplatesRoute(router); + + registerWorkflowInsightsRoutes(router, config, endpointContext); }; diff --git a/x-pack/test/api_integration/services/security_solution_api.gen.ts b/x-pack/test/api_integration/services/security_solution_api.gen.ts index 1e97d22454f37..3561ff6fac35a 100644 --- a/x-pack/test/api_integration/services/security_solution_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_api.gen.ts @@ -104,6 +104,7 @@ import { GetRuleMigrationStatsRequestParamsInput } from '@kbn/security-solution- import { GetRuleMigrationTranslationStatsRequestParamsInput } from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; import { GetTimelineRequestQueryInput } from '@kbn/security-solution-plugin/common/api/timeline/get_timeline/get_timeline_route.gen'; import { GetTimelinesRequestQueryInput } from '@kbn/security-solution-plugin/common/api/timeline/get_timelines/get_timelines_route.gen'; +import { GetWorkflowInsightsRequestQueryInput } from '@kbn/security-solution-plugin/common/api/endpoint/workflow_insights/workflow_insights.gen'; import { ImportRulesRequestQueryInput } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management/import_rules/import_rules_route.gen'; import { ImportTimelinesRequestBodyInput } from '@kbn/security-solution-plugin/common/api/timeline/import_timelines/import_timelines_route.gen'; import { @@ -150,6 +151,10 @@ import { SuggestUserProfilesRequestQueryInput } from '@kbn/security-solution-plu import { TriggerRiskScoreCalculationRequestBodyInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/risk_engine/entity_calculation_route.gen'; import { UpdateRuleRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management/crud/update_rule/update_rule_route.gen'; import { UpdateRuleMigrationRequestBodyInput } from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; +import { + UpdateWorkflowInsightRequestParamsInput, + UpdateWorkflowInsightRequestBodyInput, +} from '@kbn/security-solution-plugin/common/api/endpoint/workflow_insights/workflow_insights.gen'; import { UpsertRuleMigrationResourcesRequestParamsInput, UpsertRuleMigrationResourcesRequestBodyInput, @@ -1021,6 +1026,14 @@ finalize it. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, + getWorkflowInsights(props: GetWorkflowInsightsProps, kibanaSpace: string = 'default') { + return supertest + .get(routeWithNamespace('/internal/api/endpoint/workflow_insights', kibanaSpace)) + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .query(props.query); + }, /** * Import detection rules from an `.ndjson` file, including actions and exception lists. The request must include: - The `Content-Type: multipart/form-data` HTTP header. @@ -1503,6 +1516,19 @@ detection engine rules. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .send(props.body as object); }, + updateWorkflowInsight(props: UpdateWorkflowInsightProps, kibanaSpace: string = 'default') { + return supertest + .put( + routeWithNamespace( + replaceParams('/internal/api/endpoint/workflow_insights/{insightId}', props.params), + kibanaSpace + ) + ) + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') + .send(props.body as object); + }, uploadAssetCriticalityRecords(kibanaSpace: string = 'default') { return supertest .post(routeWithNamespace('/api/asset_criticality/upload_csv', kibanaSpace)) @@ -1712,6 +1738,9 @@ export interface GetTimelineProps { export interface GetTimelinesProps { query: GetTimelinesRequestQueryInput; } +export interface GetWorkflowInsightsProps { + query: GetWorkflowInsightsRequestQueryInput; +} export interface ImportRulesProps { query: ImportRulesRequestQueryInput; } @@ -1810,6 +1839,10 @@ export interface UpdateRuleProps { export interface UpdateRuleMigrationProps { body: UpdateRuleMigrationRequestBodyInput; } +export interface UpdateWorkflowInsightProps { + params: UpdateWorkflowInsightRequestParamsInput; + body: UpdateWorkflowInsightRequestBodyInput; +} export interface UpsertRuleMigrationResourcesProps { params: UpsertRuleMigrationResourcesRequestParamsInput; body: UpsertRuleMigrationResourcesRequestBodyInput; From 7d881ae74df65ab08a87d225678ca3ff668389ab Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Wed, 4 Dec 2024 09:51:29 -0700 Subject: [PATCH 038/141] [Reporting] Use Kibana feature privileges only to control access to reporting (#200834) ## Summary This PR discontinues Reporting from having dual models for determining the privilege to generate a report, and uses Kibana feature privileges as the single model that controls those privileges. ### Changes 1. Removes all logic that is based on following settings: * `xpack.reporting.roles.enabled` * `xpack.reporting.roles.allow` The settings are still supported, but any features that use the settings are removed. 2. Removes the detection of the settings from the Upgrade Assistant integration ### Release note The default system of granting users the privilege to generate reports has changed. Rather than assigning users the `reporting_user` role, administrators should create a custom role that grants report-creation privileges using Kibana application privileges. ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations. Correlates with https://elasticco.atlassian.net/browse/ES-9856: assign the built-in `reporting_user` role the necessary Kibana application privileges, and make the role not marked as deprecated. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .buildkite/ftr_platform_stateful_configs.yml | 1 - config/serverless.yml | 1 - docs/settings/reporting-settings.asciidoc | 25 +- docs/setup/configuring-reporting.asciidoc | 13 +- .../get_csv_panel_action.test.ts | 20 -- .../panel_actions/get_csv_panel_action.tsx | 10 +- packages/kbn-reporting/mocks_server/index.ts | 4 - .../public/share/share_context_menu/index.ts | 2 - .../register_csv_modal_reporting.tsx | 8 +- .../register_pdf_png_modal_reporting.tsx | 17 +- packages/kbn-reporting/public/types.ts | 1 - .../__snapshots__/config_schema.test.ts.snap | 12 - .../server/config_schema.test.ts | 10 - .../kbn-reporting/server/config_schema.ts | 16 +- packages/kbn-reporting/server/types.ts | 4 - .../test_suites/core_plugins/rendering.ts | 2 - .../canvas/public/services/kibana_services.ts | 8 +- x-pack/plugins/canvas/server/feature.test.ts | 41 ++- x-pack/plugins/canvas/server/feature.ts | 2 +- x-pack/plugins/reporting/README.md | 2 - x-pack/plugins/reporting/public/index.ts | 7 - .../__test__/report_listing.test.helpers.tsx | 3 - x-pack/plugins/reporting/public/mocks.ts | 1 - x-pack/plugins/reporting/public/plugin.ts | 5 - .../server/config/create_config.test.ts | 3 - .../reporting/server/config/index.test.ts | 63 ----- .../plugins/reporting/server/config/index.ts | 46 +--- x-pack/plugins/reporting/server/core.ts | 12 - .../__snapshots__/reporting_role.test.ts.snap | 119 --------- .../reporting/server/deprecations/index.ts | 16 +- .../deprecations/reporting_role.test.ts | 177 ------------- .../server/deprecations/reporting_role.ts | 239 ------------------ x-pack/plugins/reporting/server/features.ts | 42 +-- .../plugins/reporting/server/mocks/index.ts | 1 - x-pack/plugins/reporting/server/plugin.ts | 5 +- .../authorized_user_pre_routing.test.ts | 87 +------ .../common/authorized_user_pre_routing.ts | 29 +-- .../jobs/job_management_pre_routing.test.ts | 2 +- .../generate/generate_from_jobparams.ts | 3 +- .../management/integration_tests/jobs.test.ts | 41 +-- .../routes/public/generate_from_jobparams.ts | 3 +- .../public/integration_tests/jobs.test.ts | 2 +- x-pack/plugins/reporting/server/types.ts | 4 - x-pack/plugins/reporting/tsconfig.json | 1 - .../translations/translations/fr-FR.json | 22 -- .../translations/translations/ja-JP.json | 22 -- .../translations/translations/zh-CN.json | 19 -- .../accessibility/apps/group3/reporting.ts | 2 +- .../apis/security/license_downgrade.ts | 1 + .../apis/security/privileges.ts | 7 +- .../apis/security/privileges_basic.ts | 2 + .../feature_controls/canvas_security.ts | 2 +- x-pack/test/functional/apps/canvas/reports.ts | 7 +- .../dashboard/group3/reporting/screenshots.ts | 7 +- .../apps/lens/group6/lens_reporting.ts | 15 +- .../feature_controls/management_security.ts | 1 + .../reporting_management/report_listing.ts | 1 - .../reporting_and_security.config.ts | 1 - ...eporting_and_deprecated_security.config.ts | 26 -- .../index.ts | 58 ----- .../management.ts | 37 --- .../security_roles_privileges.ts | 82 ------ .../reporting_and_security.config.ts | 1 - .../tests/anonymous/capabilities.ts | 36 +++ 64 files changed, 140 insertions(+), 1319 deletions(-) delete mode 100644 x-pack/plugins/reporting/server/config/index.test.ts delete mode 100644 x-pack/plugins/reporting/server/deprecations/__snapshots__/reporting_role.test.ts.snap delete mode 100644 x-pack/plugins/reporting/server/deprecations/reporting_role.test.ts delete mode 100644 x-pack/plugins/reporting/server/deprecations/reporting_role.ts delete mode 100644 x-pack/test/reporting_functional/reporting_and_deprecated_security.config.ts delete mode 100644 x-pack/test/reporting_functional/reporting_and_deprecated_security/index.ts delete mode 100644 x-pack/test/reporting_functional/reporting_and_deprecated_security/management.ts delete mode 100644 x-pack/test/reporting_functional/reporting_and_deprecated_security/security_roles_privileges.ts diff --git a/.buildkite/ftr_platform_stateful_configs.yml b/.buildkite/ftr_platform_stateful_configs.yml index f7d27afe15204..af04aef1e0911 100644 --- a/.buildkite/ftr_platform_stateful_configs.yml +++ b/.buildkite/ftr_platform_stateful_configs.yml @@ -291,7 +291,6 @@ enabled: - x-pack/test/plugin_functional/config.ts - x-pack/test/reporting_api_integration/reporting_and_security.config.ts - x-pack/test/reporting_api_integration/reporting_without_security.config.ts - - x-pack/test/reporting_functional/reporting_and_deprecated_security.config.ts - x-pack/test/reporting_functional/reporting_and_security.config.ts - x-pack/test/reporting_functional/reporting_without_security.config.ts - x-pack/test/rule_registry/security_and_spaces/config_basic.ts diff --git a/config/serverless.yml b/config/serverless.yml index d62f26a4642eb..6c7125d0e47f0 100644 --- a/config/serverless.yml +++ b/config/serverless.yml @@ -215,7 +215,6 @@ xpack.task_manager.metrics_reset_interval: 120000 # Reporting feature xpack.screenshotting.enabled: false xpack.reporting.queue.pollInterval: 3m -xpack.reporting.roles.enabled: false xpack.reporting.statefulSettings.enabled: false xpack.reporting.csv.maxConcurrentShardRequests: 0 diff --git a/docs/settings/reporting-settings.asciidoc b/docs/settings/reporting-settings.asciidoc index b43f3b268e438..5dda6bf81954f 100644 --- a/docs/settings/reporting-settings.asciidoc +++ b/docs/settings/reporting-settings.asciidoc @@ -61,29 +61,8 @@ xpack.reporting.encryptionKey: "something_secret" [[reporting-advanced-settings]] === Security settings -Reporting has two forms of access control: each user can only access their own reports, -and custom roles determine who has the privilege to generate reports. When Reporting is configured with -<>, you can control the spaces and applications where users -are allowed to generate reports. - -[NOTE] -============================================================================ -The `xpack.reporting.roles` settings are for a deprecated system of access control in Reporting. Turning off -this feature allows API keys to generate reports, and allows reporting access through {kib} application -privileges. We recommend that you explicitly turn off reporting's deprecated access control feature by adding -`xpack.reporting.roles.enabled: false` to kibana.yml. This will enable you to create custom roles that provide -application privileges for reporting, as described in <>. -============================================================================ - -[[xpack-reporting-roles-enabled]] `xpack.reporting.roles.enabled`:: -deprecated:[7.14.0,The default for this setting will be `false` in an upcoming version of {kib}.] Sets access -control to a set of assigned reporting roles, specified by `xpack.reporting.roles.allow`. Defaults to `true`. - -`xpack.reporting.roles.allow`:: -deprecated:[7.14.0] In addition to superusers, specifies the roles that can generate reports using the -{ref}/security-api.html#security-role-apis[{es} role management APIs]. Requires `xpack.reporting.roles.enabled` -to be `true`. Defaults to `[ "reporting_user" ]`. +Reporting privileges are configured with <>. You can control +the spaces and applications where users are allowed to generate reports. [float] [[reporting-job-queue-settings]] diff --git a/docs/setup/configuring-reporting.asciidoc b/docs/setup/configuring-reporting.asciidoc index 61ef028d1504f..bcef6a0266251 100644 --- a/docs/setup/configuring-reporting.asciidoc +++ b/docs/setup/configuring-reporting.asciidoc @@ -37,15 +37,6 @@ to enable the {kib} server to have screenshotting capabilities. === Grant users access to reporting When security is enabled, you grant users access to {report-features} with <>, which allow you to create custom roles that control the spaces and applications where users generate reports. -. Enable application privileges in Reporting. To enable, turn off the default user access control features in `kibana.yml`: -+ -[source,yaml] ------------------------------------- -xpack.reporting.roles.enabled: false ------------------------------------- -+ -NOTE: If you use the default settings, you can still create a custom role that grants reporting privileges. The default role is `reporting_user`. This behavior is being deprecated and does not allow application-level access controls for {report-features}, and does not allow API keys or authentication tokens to authorize report generation. Refer to <> for information and caveats about the deprecated access control features. - . Create the reporting role. .. Go to the *Roles* management page using the navigation menu or the @@ -79,7 +70,7 @@ NOTE: If you have a Basic license, sub-feature privileges are unavailable. For d [role="screenshot"] image::user/reporting/images/kibana-privileges-with-reporting.png["Kibana privileges with Reporting options, Gold or higher license"] + -NOTE: If the *Reporting* options for application features are unavailable, and the cluster license is higher than Basic, contact your administrator, or <>. +NOTE: If the *Reporting* options for application features are unavailable, and the cluster license is higher than Basic, contact your administrator. .. Click *Add {kib} privilege*. @@ -101,7 +92,7 @@ Granting the privilege to generate reports also grants the user the privilege to [float] [[reporting-roles-user-api]] ==== Grant access with the role API -With <> enabled in Reporting, you can also use the {api-kibana}/group/endpoint-roles[role APIs] to grant access to the {report-features}, using *All* privileges, or sub-feature privileges. +With <>, you can use the {api-kibana}/group/endpoint-roles[role APIs] to grant access to the {report-features}, using *All* privileges, or sub-feature privileges. NOTE: This API request needs to be run against the <>. diff --git a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts index 6eaa3e933980b..fec671825a0b8 100644 --- a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts +++ b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts @@ -119,7 +119,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -154,7 +153,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -177,7 +175,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -197,7 +194,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -219,7 +215,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -232,7 +227,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -249,7 +243,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -263,7 +256,6 @@ describe('GetCsvReportPanelAction', () => { core, apiClient, startServices$: mockStartServices$, - usesUiCapabilities: true, csvConfig, }); @@ -271,17 +263,5 @@ describe('GetCsvReportPanelAction', () => { expect(await plugin.isCompatible(context)).toEqual(true); }); - - it(`allows csv generation when license is valid and deprecated roles config is enabled`, async () => { - const plugin = new ReportingCsvPanelAction({ - core, - apiClient, - startServices$: mockStartServices$, - usesUiCapabilities: false, - csvConfig, - }); - - expect(await plugin.isCompatible(context)).toEqual(true); - }); }); }); diff --git a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx index 65712496519f7..19c6a190485e1 100644 --- a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx +++ b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx @@ -72,7 +72,6 @@ interface Params { csvConfig: ClientConfigType['csv']; core: CoreSetup; startServices$: Observable; - usesUiCapabilities: boolean; } interface ExecutionParams { @@ -104,15 +103,13 @@ export class ReportingCsvPanelAction implements ActionDefinition; @@ -38,7 +37,6 @@ export interface ExportModalShareOpts { export interface ExportPanelShareOpts { apiClient: ReportingAPIClient; - usesUiCapabilities: boolean; license: ILicense; application: ApplicationStart; startServices$: Rx.Observable; diff --git a/packages/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx b/packages/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx index d0a4544c3b0e0..bbefe333b49aa 100644 --- a/packages/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx +++ b/packages/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx @@ -24,7 +24,6 @@ export const reportingCsvShareProvider = ({ apiClient, application, license, - usesUiCapabilities, startServices$, }: ExportModalShareOpts) => { const getShareMenuItems = ({ objectType, sharingData, toasts }: ShareContext) => { @@ -76,12 +75,7 @@ export const reportingCsvShareProvider = ({ const licenseHasCsvReporting = licenseCheck.showLinks; const licenseDisabled = !licenseCheck.enableLinks; - let capabilityHasCsvReporting = false; - if (usesUiCapabilities) { - capabilityHasCsvReporting = application.capabilities.discover?.generateCsv === true; - } else { - capabilityHasCsvReporting = true; // deprecated - } + const capabilityHasCsvReporting = application.capabilities.discover?.generateCsv === true; const generateReportingJobCSV = ({ intl }: { intl: InjectedIntl }) => { const decoratedJobParams = apiClient.getDecoratedJobParams(getJobParams()); diff --git a/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx b/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx index 54ced9511d103..c2d5a88de9ecd 100644 --- a/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx +++ b/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx @@ -46,7 +46,6 @@ export const reportingExportModalProvider = ({ apiClient, license, application, - usesUiCapabilities, startServices$, }: ExportModalShareOpts): ShareMenuProvider => { const getShareMenuItems = ({ @@ -64,18 +63,10 @@ export const reportingExportModalProvider = ({ const licenseHasScreenshotReporting = showLinks; const licenseDisabled = !enableLinks; - let capabilityHasDashboardScreenshotReporting = false; - let capabilityHasVisualizeScreenshotReporting = false; - if (usesUiCapabilities) { - capabilityHasDashboardScreenshotReporting = - application.capabilities.dashboard?.generateScreenshot === true; - capabilityHasVisualizeScreenshotReporting = - application.capabilities.visualize?.generateScreenshot === true; - } else { - // deprecated - capabilityHasDashboardScreenshotReporting = true; - capabilityHasVisualizeScreenshotReporting = true; - } + const capabilityHasDashboardScreenshotReporting = + application.capabilities.dashboard?.generateScreenshot === true; + const capabilityHasVisualizeScreenshotReporting = + application.capabilities.visualize?.generateScreenshot === true; if (!licenseHasScreenshotReporting) { return []; diff --git a/packages/kbn-reporting/public/types.ts b/packages/kbn-reporting/public/types.ts index e01a1b55b0a1f..756c5e23eb57b 100644 --- a/packages/kbn-reporting/public/types.ts +++ b/packages/kbn-reporting/public/types.ts @@ -36,7 +36,6 @@ export interface ClientConfigType { intervalErrorMultiplier: number; }; }; - roles: { enabled: boolean }; export_types: { pdf: { enabled: boolean }; png: { enabled: boolean }; diff --git a/packages/kbn-reporting/server/__snapshots__/config_schema.test.ts.snap b/packages/kbn-reporting/server/__snapshots__/config_schema.test.ts.snap index d52630ab6820c..ae361b65f9f2f 100644 --- a/packages/kbn-reporting/server/__snapshots__/config_schema.test.ts.snap +++ b/packages/kbn-reporting/server/__snapshots__/config_schema.test.ts.snap @@ -50,12 +50,6 @@ Object { "pollIntervalErrorMultiplier": 10, "timeout": "PT4M", }, - "roles": Object { - "allow": Array [ - "reporting_user", - ], - "enabled": true, - }, "statefulSettings": Object { "enabled": true, }, @@ -111,12 +105,6 @@ Object { "pollIntervalErrorMultiplier": 10, "timeout": "PT4M", }, - "roles": Object { - "allow": Array [ - "reporting_user", - ], - "enabled": true, - }, "statefulSettings": Object { "enabled": true, }, diff --git a/packages/kbn-reporting/server/config_schema.test.ts b/packages/kbn-reporting/server/config_schema.test.ts index 63ca79cf819c5..fd3d974ef55af 100644 --- a/packages/kbn-reporting/server/config_schema.test.ts +++ b/packages/kbn-reporting/server/config_schema.test.ts @@ -122,14 +122,4 @@ describe('Reporting Config Schema', () => { ConfigSchema.validate({ export_types: { csv: { enabled: true } } }, { dev: true }) ).not.toThrow(); }); - - describe('roles', () => { - it('should have roles enabled set to false for serverless by default', () => { - expect(ConfigSchema.validate({}, { serverless: true }).roles.enabled).toBe(false); - }); - - it('should have roles enabled set to true for non-serverless by default', () => { - expect(ConfigSchema.validate({}).roles.enabled).toBe(true); - }); - }); }); diff --git a/packages/kbn-reporting/server/config_schema.ts b/packages/kbn-reporting/server/config_schema.ts index e14bc30ab56f7..cf4b509fdc44b 100644 --- a/packages/kbn-reporting/server/config_schema.ts +++ b/packages/kbn-reporting/server/config_schema.ts @@ -94,16 +94,12 @@ const EncryptionKeySchema = schema.conditional( schema.string({ defaultValue: 'a'.repeat(32) }) ); -const RolesSchema = schema.object({ - enabled: offeringBasedSchema({ - serverless: schema.boolean({ defaultValue: false }), - traditional: schema.boolean({ defaultValue: true }), - }), // true: use ES API for access control (deprecated in 7.x). false: use Kibana API for application features (8.0) - allow: offeringBasedSchema({ - serverless: schema.arrayOf(schema.string(), { defaultValue: [] }), - traditional: schema.arrayOf(schema.string(), { defaultValue: ['reporting_user'] }), - }), -}); +const RolesSchema = schema.maybe( + schema.object({ + enabled: schema.boolean(), + allow: schema.arrayOf(schema.string()), + }) +); // unused as of 9.0 // Browser side polling: job completion notifier, management table auto-refresh // NOTE: can not use schema.duration, a bug prevents it being passed to the browser correctly diff --git a/packages/kbn-reporting/server/types.ts b/packages/kbn-reporting/server/types.ts index c2f05be15d69f..c1d1ea0ec3828 100644 --- a/packages/kbn-reporting/server/types.ts +++ b/packages/kbn-reporting/server/types.ts @@ -25,10 +25,6 @@ import type { ExportType } from './export_type'; export interface ReportingServerPluginSetup { registerExportTypes: (item: ExportType) => void; - /** - * Used to inform plugins if Reporting config is compatible with UI Capabilities / Application Sub-Feature Controls - */ - usesUiCapabilities: () => boolean; } // standard type for create job function of any ExportType implementation diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index 8047994039e71..87b8fe406263b 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -320,8 +320,6 @@ export default function ({ getService }: PluginFunctionalProviderContext) { * NOTE: The Reporting plugin is currently disabled in functional tests (see test/functional/config.base.js). * It will be re-enabled once #102552 is completed. */ - // 'xpack.reporting.roles.allow (array)', - // 'xpack.reporting.roles.enabled (boolean)', // 'xpack.reporting.poll.jobCompletionNotifier.interval (number)', // 'xpack.reporting.poll.jobCompletionNotifier.intervalErrorMultiplier (number)', // 'xpack.reporting.poll.jobsRefresh.interval (number)', diff --git a/x-pack/plugins/canvas/public/services/kibana_services.ts b/x-pack/plugins/canvas/public/services/kibana_services.ts index 2b966e698a874..92980d712fb4f 100644 --- a/x-pack/plugins/canvas/public/services/kibana_services.ts +++ b/x-pack/plugins/canvas/public/services/kibana_services.ts @@ -51,11 +51,9 @@ export const setKibanaServices = ( embeddableService = deps.embeddable; expressionsService = deps.expressions; presentationUtilService = deps.presentationUtil; - reportingService = Boolean( - deps.reporting?.usesUiCapabilities() && !kibanaCore.application.capabilities.canvas?.generatePdf - ) - ? undefined - : deps.reporting; + reportingService = Boolean(kibanaCore.application.capabilities.canvas?.generatePdf) + ? deps.reporting + : undefined; spacesService = deps.spaces; uiActionsService = deps.uiActions; visualizationsService = deps.visualizations; diff --git a/x-pack/plugins/canvas/server/feature.test.ts b/x-pack/plugins/canvas/server/feature.test.ts index c145140f8d944..7f71bafd41700 100644 --- a/x-pack/plugins/canvas/server/feature.test.ts +++ b/x-pack/plugins/canvas/server/feature.test.ts @@ -31,7 +31,11 @@ it('Provides a feature declaration ', () => { "order": 1000, }, "id": "canvas", - "management": Object {}, + "management": Object { + "insightsAndAlerting": Array [ + "reporting", + ], + }, "name": "Canvas", "order": 300, "privileges": Object { @@ -82,13 +86,44 @@ it('Provides a feature declaration ', () => { "spaces", "security", ], - "subFeatures": Array [], + "subFeatures": Array [ + Object { + "name": "Reporting", + "privilegeGroups": Array [ + Object { + "groupType": "independent", + "privileges": Array [ + Object { + "api": Array [ + "generateReport", + ], + "id": "generate_report", + "includeIn": "all", + "management": Object { + "insightsAndAlerting": Array [ + "reporting", + ], + }, + "minimumLicense": "gold", + "name": "Generate PDF reports", + "savedObject": Object { + "all": Array [], + "read": Array [], + }, + "ui": Array [ + "generatePdf", + ], + }, + ], + }, + ], + }, + ], } `); }); it(`Calls on Reporting whether to include Generate PDF as a sub-feature`, () => { - mockReportingPlugin.usesUiCapabilities = () => true; expect(getCanvasFeature({ reporting: mockReportingPlugin })).toMatchInlineSnapshot(` Object { "app": Array [ diff --git a/x-pack/plugins/canvas/server/feature.ts b/x-pack/plugins/canvas/server/feature.ts index 2406ac133c721..daa8a8fc4aa4f 100644 --- a/x-pack/plugins/canvas/server/feature.ts +++ b/x-pack/plugins/canvas/server/feature.ts @@ -16,7 +16,7 @@ import { KibanaFeatureScope } from '@kbn/features-plugin/common'; * with Reporting sub-feature integration (if enabled) */ export function getCanvasFeature(plugins: { reporting?: ReportingStart }): KibanaFeatureConfig { - const includeReporting = plugins.reporting && plugins.reporting.usesUiCapabilities(); + const includeReporting = Boolean(plugins.reporting); return { id: 'canvas', diff --git a/x-pack/plugins/reporting/README.md b/x-pack/plugins/reporting/README.md index 7e4d1beefde19..708b3de190875 100644 --- a/x-pack/plugins/reporting/README.md +++ b/x-pack/plugins/reporting/README.md @@ -14,5 +14,3 @@ Although historically related to reporting, the CsvGenerator class has now be mo There are several improvements made for reporting in serverless environments. Most changes are reflected in `reporting/server/config/schema.ts` for reference. PNG and PDF reports are currently not possible in serverless. Those export types are not enabled in serverless configuration, and are left out of Reporting's internal registry of export types. - -The setting `xpack.reporting.roles.enabled` is `false` by default for serverless. This setting enables backwards-compatible functionality for reporting privileges, this type of BWC is not needed in serverless. diff --git a/x-pack/plugins/reporting/public/index.ts b/x-pack/plugins/reporting/public/index.ts index 59f1f4e359851..c78b27d77ef91 100644 --- a/x-pack/plugins/reporting/public/index.ts +++ b/x-pack/plugins/reporting/public/index.ts @@ -13,13 +13,6 @@ import { ReportingPublicPlugin } from './plugin'; * Setup contract for the Reporting plugin. */ export interface ReportingSetup { - /** - * Used to inform plugins if Reporting config is compatible with UI Capabilities / Application Sub-Feature Controls - * - * @returns boolean - */ - usesUiCapabilities: () => boolean; - /** * A set of React components for displaying a Reporting share menu in an application */ diff --git a/x-pack/plugins/reporting/public/management/__test__/report_listing.test.helpers.tsx b/x-pack/plugins/reporting/public/management/__test__/report_listing.test.helpers.tsx index 19337a6f46deb..846b06a631e7e 100644 --- a/x-pack/plugins/reporting/public/management/__test__/report_listing.test.helpers.tsx +++ b/x-pack/plugins/reporting/public/management/__test__/report_listing.test.helpers.tsx @@ -73,9 +73,6 @@ export const mockConfig: ClientConfigType = { enabled: true, }, }, - roles: { - enabled: false, - }, statefulSettings: { enabled: true }, }; diff --git a/x-pack/plugins/reporting/public/mocks.ts b/x-pack/plugins/reporting/public/mocks.ts index b1a447f48a8c0..1888674e68ce2 100644 --- a/x-pack/plugins/reporting/public/mocks.ts +++ b/x-pack/plugins/reporting/public/mocks.ts @@ -17,7 +17,6 @@ const createSetupContract = (): Setup => { const coreSetup = coreMock.createSetup(); const apiClient = new ReportingAPIClient(coreSetup.http, coreSetup.uiSettings, '7.15.0'); return { - usesUiCapabilities: jest.fn().mockImplementation(() => true), components: getSharedComponents(apiClient, Rx.from(coreSetup.getStartServices())), }; }; diff --git a/x-pack/plugins/reporting/public/plugin.ts b/x-pack/plugins/reporting/public/plugin.ts index 95b53b081d408..8dc9e2d96f717 100644 --- a/x-pack/plugins/reporting/public/plugin.ts +++ b/x-pack/plugins/reporting/public/plugin.ts @@ -86,7 +86,6 @@ export class ReportingPublicPlugin private getContract(apiClient: ReportingAPIClient, startServices$: StartServices$) { this.contract = { - usesUiCapabilities: () => this.config.roles?.enabled === false, components: getSharedComponents(apiClient, startServices$), }; @@ -125,7 +124,6 @@ export class ReportingPublicPlugin ]; }) ); - const usesUiCapabilities = !this.config.roles.enabled; const apiClient = new ReportingAPIClient(core.http, core.uiSettings, this.kibanaVersion); this.apiClient = apiClient; @@ -206,7 +204,6 @@ export class ReportingPublicPlugin core, apiClient, startServices$, - usesUiCapabilities, csvConfig: this.config.csv, }) ); @@ -218,7 +215,6 @@ export class ReportingPublicPlugin apiClient, license, application, - usesUiCapabilities, startServices$, }) ); @@ -229,7 +225,6 @@ export class ReportingPublicPlugin apiClient, license, application, - usesUiCapabilities, startServices$, }) ); diff --git a/x-pack/plugins/reporting/server/config/create_config.test.ts b/x-pack/plugins/reporting/server/config/create_config.test.ts index bd65ad245e89d..f2502db6dcdf0 100644 --- a/x-pack/plugins/reporting/server/config/create_config.test.ts +++ b/x-pack/plugins/reporting/server/config/create_config.test.ts @@ -92,9 +92,6 @@ describe('Reporting server createConfig', () => { "pollInterval": 3000, "timeout": 120000, }, - "roles": Object { - "enabled": false, - }, "statefulSettings": Object { "enabled": true, }, diff --git a/x-pack/plugins/reporting/server/config/index.test.ts b/x-pack/plugins/reporting/server/config/index.test.ts deleted file mode 100644 index d6b0f31ddc5f3..0000000000000 --- a/x-pack/plugins/reporting/server/config/index.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { config } from '.'; -import { applyDeprecations, configDeprecationFactory } from '@kbn/config'; -import { configDeprecationsMock } from '@kbn/core/server/mocks'; - -const CONFIG_PATH = 'xpack.reporting'; - -const deprecationContext = configDeprecationsMock.createContext(); - -const applyReportingDeprecations = (settings: Record = {}) => { - const deprecations = config.deprecations!(configDeprecationFactory); - const deprecationMessages: string[] = []; - const _config: any = {}; - _config[CONFIG_PATH] = settings; - const { config: migrated } = applyDeprecations( - _config, - deprecations.map((deprecation) => ({ - deprecation, - path: CONFIG_PATH, - context: deprecationContext, - })), - () => - ({ message }) => - deprecationMessages.push(message) - ); - return { - messages: deprecationMessages, - migrated, - }; -}; - -describe('deprecations', () => { - it('logs a warning of roles.enabled for defaults', () => { - const { messages } = applyReportingDeprecations({}); - expect(messages).toMatchInlineSnapshot(` - Array [ - "The default mechanism for Reporting privileges will work differently in future versions, which will affect the behavior of this cluster. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - ] - `); - }); - - it('logs a warning if roles.enabled: true is set', () => { - const { messages } = applyReportingDeprecations({ roles: { enabled: true } }); - expect(messages).toMatchInlineSnapshot(` - Array [ - "The default mechanism for Reporting privileges will work differently in future versions, which will affect the behavior of this cluster. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - ] - `); - }); - - it('does not log a warning recommended settings are used', () => { - const { messages } = applyReportingDeprecations({ - roles: { enabled: false }, - }); - expect(messages).toMatchInlineSnapshot(`Array []`); - }); -}); diff --git a/x-pack/plugins/reporting/server/config/index.ts b/x-pack/plugins/reporting/server/config/index.ts index c99e2667eb6df..7ea68941caac9 100644 --- a/x-pack/plugins/reporting/server/config/index.ts +++ b/x-pack/plugins/reporting/server/config/index.ts @@ -5,68 +5,27 @@ * 2.0. */ -import { get } from 'lodash'; - import { PluginConfigDescriptor } from '@kbn/core/server'; -import { i18n } from '@kbn/i18n'; import { ConfigSchema, ReportingConfigType } from '@kbn/reporting-server'; export const config: PluginConfigDescriptor = { exposeToBrowser: { csv: { scroll: true }, poll: true, - roles: true, export_types: true, statefulSettings: true, }, schema: ConfigSchema, deprecations: ({ unused }) => [ unused('csv.enablePanelActionDownload', { level: 'warning' }), // unused since 9.0 + unused('roles.enabled', { level: 'warning' }), // unused since 9.0 + unused('roles.allow', { level: 'warning' }), // unused since 9.0 unused('queue.indexInterval', { level: 'warning' }), // unused since 8.15 unused('capture.browser.chromium.maxScreenshotDimension', { level: 'warning' }), // unused since 7.8 unused('capture.browser.type', { level: 'warning' }), unused('poll.jobCompletionNotifier.intervalErrorMultiplier', { level: 'warning' }), // unused since 7.10 unused('poll.jobsRefresh.intervalErrorMultiplier', { level: 'warning' }), // unused since 7.10 unused('capture.viewport', { level: 'warning' }), // deprecated as unused since 7.16 - (settings, fromPath, addDeprecation) => { - const reporting = get(settings, fromPath); - if (reporting?.roles?.enabled !== false) { - addDeprecation({ - configPath: `${fromPath}.roles.enabled`, - level: 'warning', - title: i18n.translate('xpack.reporting.deprecations.reportingRoles.title', { - defaultMessage: `The "{fromPath}.roles" setting is deprecated`, - values: { fromPath }, - }), - // TODO: once scheduled reports is released, restate this to say that we have no access to scheduled reporting. - // https://github.com/elastic/kibana/issues/79905 - message: i18n.translate('xpack.reporting.deprecations.reportingRoles.description', { - defaultMessage: - `The default mechanism for Reporting privileges will work differently in future versions,` + - ` which will affect the behavior of this cluster. Set "xpack.reporting.roles.enabled" to` + - ` "false" to adopt the future behavior before upgrading.`, - }), - correctiveActions: { - manualSteps: [ - i18n.translate('xpack.reporting.deprecations.reportingRoles.manualStepOne', { - defaultMessage: `Set "xpack.reporting.roles.enabled" to "false" in kibana.yml.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoles.manualStepTwo', { - defaultMessage: `Remove "xpack.reporting.roles.allow" in kibana.yml, if present.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoles.manualStepThree', { - defaultMessage: - `Go to Management > Security > Roles to create one or more roles that grant` + - ` the Kibana application privilege for Reporting.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoles.manualStepFour', { - defaultMessage: `Grant Reporting privileges to users by assigning one of the new roles.`, - }), - ], - }, - }); - } - }, ], exposeToUsage: { capture: { maxAttempts: true }, @@ -76,7 +35,6 @@ export const config: PluginConfigDescriptor = { }, kibanaServer: false, // show as [redacted] queue: { indexInterval: true, pollEnabled: true, timeout: true }, - roles: { enabled: true }, }, }; diff --git a/x-pack/plugins/reporting/server/core.ts b/x-pack/plugins/reporting/server/core.ts index 283488dd5a973..117849365de9a 100644 --- a/x-pack/plugins/reporting/server/core.ts +++ b/x-pack/plugins/reporting/server/core.ts @@ -92,7 +92,6 @@ export class ReportingCore { private pluginStartDeps?: ReportingInternalStart; private readonly pluginSetup$ = new Rx.ReplaySubject(); // observe async background setupDeps each are done private readonly pluginStart$ = new Rx.ReplaySubject(); // observe async background startDeps - private deprecatedAllowedRoles: string[] | false = false; // DEPRECATED. If `false`, the deprecated features have been disableed private executeTask: ExecuteReportTask; private config: ReportingConfigType; private executing: Set; @@ -114,11 +113,9 @@ export class ReportingCore { this.getExportTypes().forEach((et) => { this.exportTypesRegistry.register(et); }); - this.deprecatedAllowedRoles = config.roles.enabled ? config.roles.allow : false; this.executeTask = new ExecuteReportTask(this, config, this.logger); this.getContract = () => ({ - usesUiCapabilities: () => config.roles.enabled === false, registerExportTypes: (id) => id, getSpaceId: this.getSpaceId.bind(this), }); @@ -257,15 +254,6 @@ export class ReportingCore { return this.config; } - /* - * If deprecated feature has not been disabled, - * this returns an array of allowed role names - * that have access to Reporting. - */ - public getDeprecatedAllowedRoles(): string[] | false { - return this.deprecatedAllowedRoles; - } - /* * Track usage of API endpoints */ diff --git a/x-pack/plugins/reporting/server/deprecations/__snapshots__/reporting_role.test.ts.snap b/x-pack/plugins/reporting/server/deprecations/__snapshots__/reporting_role.test.ts.snap deleted file mode 100644 index 92456f9eec706..0000000000000 --- a/x-pack/plugins/reporting/server/deprecations/__snapshots__/reporting_role.test.ts.snap +++ /dev/null @@ -1,119 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`roles mapped to a deprecated role includes steps to remove the incompatible config, when applicable 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" in kibana.yml.", - "Remove \\"xpack.reporting.roles.allow\\" in kibana.yml, if present.", - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all users and add the custom role. The affected users are: reportron[reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has users who have a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check user roles", - }, -] -`; - -exports[`roles mapped to a deprecated role logs a deprecation when a role was found that maps to a deprecated custom role from the roles.allow setting 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all role mappings and add the custom role. The affected role mappings are: dungeon_master[my_test_reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has role mappings that are mapped to a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check role mappings", - }, -] -`; - -exports[`roles mapped to a deprecated role logs a deprecation when a role was found that maps to the deprecated reporting_user role 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all role mappings and add the custom role. The affected role mappings are: dungeon_master[reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has role mappings that are mapped to a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check role mappings", - }, -] -`; - -exports[`users assigned to a deprecated role includes steps to remove the incompatible config, when applicable 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" in kibana.yml.", - "Remove \\"xpack.reporting.roles.allow\\" in kibana.yml, if present.", - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all users and add the custom role. The affected users are: reportron[reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has users who have a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check user roles", - }, -] -`; - -exports[`users assigned to a deprecated role logs a deprecation when a user was found with a deprecated custom role from the roles.allow setting 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all users and add the custom role. The affected users are: reportron[my_test_reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has users who have a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check user roles", - }, -] -`; - -exports[`users assigned to a deprecated role logs a deprecation when a user was found with a deprecated reporting_user role 1`] = ` -Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Go to Management > Security > Roles to create one or more roles that grant the Kibana application privilege for Reporting.", - "Grant Reporting privileges to users by assigning one of the new roles.", - "Remove the \\"reporting_user\\" role from all users and add the custom role. The affected users are: reportron[reporting_user].", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/branch/kibana-privileges.html", - "level": "warning", - "message": "The default mechanism for Reporting privileges will work differently in future versions, and this cluster has users who have a deprecated role for this privilege. Set \\"xpack.reporting.roles.enabled\\" to \\"false\\" to adopt the future behavior before upgrading.", - "title": "The \\"reporting_user\\" role is deprecated: check user roles", - }, -] -`; diff --git a/x-pack/plugins/reporting/server/deprecations/index.ts b/x-pack/plugins/reporting/server/deprecations/index.ts index bca439532b3b0..b00cd4db68515 100644 --- a/x-pack/plugins/reporting/server/deprecations/index.ts +++ b/x-pack/plugins/reporting/server/deprecations/index.ts @@ -5,24 +5,12 @@ * 2.0. */ import { CoreSetup } from '@kbn/core/server'; -import { ReportingCore } from '../core'; - import { getDeprecationsInfo as getIlmPolicyDeprecationsInfo } from './migrate_existing_indices_ilm_policy'; -import { getDeprecationsInfo as getReportingRoleDeprecationsInfo } from './reporting_role'; -export const registerDeprecations = ({ - core, - reportingCore, -}: { - core: CoreSetup; - reportingCore: ReportingCore; -}) => { +export const registerDeprecations = ({ core }: { core: CoreSetup }) => { core.deprecations.registerDeprecations({ getDeprecations: async (ctx) => { - return [ - ...(await getIlmPolicyDeprecationsInfo(ctx)), - ...(await getReportingRoleDeprecationsInfo(ctx, { reportingCore })), - ]; + return await getIlmPolicyDeprecationsInfo(ctx); }, }); }; diff --git a/x-pack/plugins/reporting/server/deprecations/reporting_role.test.ts b/x-pack/plugins/reporting/server/deprecations/reporting_role.test.ts deleted file mode 100644 index 4f58767e78b06..0000000000000 --- a/x-pack/plugins/reporting/server/deprecations/reporting_role.test.ts +++ /dev/null @@ -1,177 +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 { GetDeprecationsContext, IScopedClusterClient } from '@kbn/core/server'; -import { elasticsearchServiceMock } from '@kbn/core/server/mocks'; -import { createMockConfigSchema } from '@kbn/reporting-mocks-server'; -import { ReportingCore } from '..'; -import { createMockPluginSetup, createMockReportingCore } from '../test_helpers'; -import { getDeprecationsInfo } from './reporting_role'; - -let reportingCore: ReportingCore; -let context: GetDeprecationsContext; -let esClient: jest.Mocked; - -beforeEach(async () => { - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { enabled: false } }) - ); - - esClient = elasticsearchServiceMock.createScopedClusterClient(); - esClient.asCurrentUser.security.getUser = jest.fn().mockResolvedValue({ - xyz: { username: 'normal_user', roles: ['data_analyst'] }, - }); - esClient.asCurrentUser.security.getRoleMapping = jest.fn().mockResolvedValue({}); - - context = { esClient } as unknown as GetDeprecationsContext; -}); - -test('logs no deprecations when setup has no issues', async () => { - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchInlineSnapshot(`Array []`); -}); - -describe('users assigned to a deprecated role', () => { - test('logs a deprecation when a user was found with a deprecated reporting_user role', async () => { - esClient.asCurrentUser.security.getUser = jest.fn().mockResolvedValue({ - reportron: { - username: 'reportron', - roles: ['kibana_admin', 'reporting_user'], - }, - }); - - reportingCore = await createMockReportingCore(createMockConfigSchema()); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); - - test('logs a deprecation when a user was found with a deprecated custom role from the roles.allow setting', async () => { - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { allow: ['my_test_reporting_user'] } }) - ); - esClient.asCurrentUser.security.getUser = jest.fn().mockResolvedValue({ - reportron: { username: 'reportron', roles: ['kibana_admin', 'my_test_reporting_user'] }, - }); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); - - test('includes steps to remove the incompatible config, when applicable', async () => { - esClient.asCurrentUser.security.getUser = jest.fn().mockResolvedValue({ - reportron: { - username: 'reportron', - roles: ['kibana_admin', 'reporting_user'], - }, - }); - - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { enabled: true } }) - ); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); -}); - -describe('roles mapped to a deprecated role', () => { - test('logs a deprecation when a role was found that maps to the deprecated reporting_user role', async () => { - esClient.asCurrentUser.security.getRoleMapping = jest - .fn() - .mockResolvedValue({ dungeon_master: { roles: ['reporting_user'] } }); - - reportingCore = await createMockReportingCore(createMockConfigSchema()); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); - - test('logs a deprecation when a role was found that maps to a deprecated custom role from the roles.allow setting', async () => { - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { allow: ['my_test_reporting_user'] } }) - ); - esClient.asCurrentUser.security.getRoleMapping = jest - .fn() - .mockResolvedValue({ dungeon_master: { roles: ['my_test_reporting_user'] } }); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); - - test('includes steps to remove the incompatible config, when applicable', async () => { - esClient.asCurrentUser.security.getUser = jest.fn().mockResolvedValue({ - reportron: { - username: 'reportron', - roles: ['kibana_admin', 'reporting_user'], - }, - }); - - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { enabled: true } }) - ); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchSnapshot(); - }); -}); - -describe('check deprecations when security is disabled', () => { - test('logs no deprecations: roles not enabled', async () => { - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { enabled: false } }), - createMockPluginSetup({ security: null }) - ); - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchInlineSnapshot(`Array []`); - }); - - test('logs no deprecations: roles enabled', async () => { - const mockReportingConfig = createMockConfigSchema(); // roles.enabled: true is default in 7.x / 8.0 - reportingCore = await createMockReportingCore( - mockReportingConfig, - createMockPluginSetup({ security: null }) - ); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchInlineSnapshot(`Array []`); - }); - - test('logs no deprecations on serverless', async () => { - reportingCore = await createMockReportingCore( - createMockConfigSchema({ statefulSettings: { enabled: false } }) - ); - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchInlineSnapshot(`Array []`); - }); -}); - -it('insufficient permissions', async () => { - const permissionsError = new Error('you shall not pass'); - (permissionsError as unknown as { statusCode: number }).statusCode = 403; - esClient.asCurrentUser.security.getUser = jest.fn().mockRejectedValue(permissionsError); - esClient.asCurrentUser.security.getRoleMapping = jest.fn().mockRejectedValue(permissionsError); - - expect(await getDeprecationsInfo(context, { reportingCore })).toMatchInlineSnapshot(` - Array [ - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Make sure you have a \\"manage_security\\" cluster privilege assigned.", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/test-branch/xpack-security.html#_required_permissions_7", - "level": "fetch_error", - "message": "You do not have enough permissions to fix this deprecation.", - "title": "The \\"reporting_user\\" role is deprecated: check user roles", - }, - Object { - "correctiveActions": Object { - "manualSteps": Array [ - "Make sure you have a \\"manage_security\\" cluster privilege assigned.", - ], - }, - "deprecationType": "feature", - "documentationUrl": "https://www.elastic.co/guide/en/kibana/test-branch/xpack-security.html#_required_permissions_7", - "level": "fetch_error", - "message": "You do not have enough permissions to fix this deprecation.", - "title": "The \\"reporting_user\\" role is deprecated: check role mappings", - }, - ] - `); -}); diff --git a/x-pack/plugins/reporting/server/deprecations/reporting_role.ts b/x-pack/plugins/reporting/server/deprecations/reporting_role.ts deleted file mode 100644 index 31633760aeb84..0000000000000 --- a/x-pack/plugins/reporting/server/deprecations/reporting_role.ts +++ /dev/null @@ -1,239 +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 { - SecurityGetRoleMappingResponse, - SecurityGetUserResponse, -} from '@elastic/elasticsearch/lib/api/types'; -import { i18n } from '@kbn/i18n'; -import type { - DeprecationsDetails, - DocLinksServiceSetup, - ElasticsearchClient, - GetDeprecationsContext, -} from '@kbn/core/server'; -import { ReportingCore } from '..'; -import { deprecations } from '../lib/deprecations'; - -const REPORTING_USER_ROLE_NAME = 'reporting_user'; -const getDocumentationUrl = (branch: string) => { - // TODO: remove when docs support "main" - const docBranch = branch === 'main' ? 'master' : branch; - return `https://www.elastic.co/guide/en/kibana/${docBranch}/kibana-privileges.html`; -}; - -interface ExtraDependencies { - reportingCore: ReportingCore; -} - -export async function getDeprecationsInfo( - { esClient }: GetDeprecationsContext, - { reportingCore }: ExtraDependencies -): Promise { - const client = esClient.asCurrentUser; - const { security, docLinks } = reportingCore.getPluginSetupDeps(); - - // Nothing to do if security is disabled - if (!security?.license.isEnabled()) { - return []; - } - - const config = reportingCore.getConfig(); - const deprecatedRoles = config.roles.allow || ['reporting_user']; - - return [ - ...(await getUsersDeprecations(client, reportingCore, deprecatedRoles, docLinks)), - ...(await getRoleMappingsDeprecations(client, reportingCore, deprecatedRoles, docLinks)), - ]; -} - -async function getUsersDeprecations( - client: ElasticsearchClient, - reportingCore: ReportingCore, - deprecatedRoles: string[], - docLinks: DocLinksServiceSetup -): Promise { - const usingDeprecatedConfig = !reportingCore.getContract().usesUiCapabilities(); - const strings = { - title: i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.title', { - defaultMessage: `The "{reportingUserRoleName}" role is deprecated: check user roles`, - values: { reportingUserRoleName: REPORTING_USER_ROLE_NAME }, - }), - message: i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.description', { - defaultMessage: - `The default mechanism for Reporting privileges will work differently in future versions, and` + - ` this cluster has users who have a deprecated role for this privilege.` + - ` Set "xpack.reporting.roles.enabled" to "false" to adopt the future behavior before upgrading.`, - }), - manualSteps: (usersRoles: string) => [ - ...(usingDeprecatedConfig - ? [ - i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.manualStepOne', { - defaultMessage: `Set "xpack.reporting.roles.enabled" to "false" in kibana.yml.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.manualStepTwo', { - defaultMessage: `Remove "xpack.reporting.roles.allow" in kibana.yml, if present.`, - }), - ] - : []), - - i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.manualStepThree', { - defaultMessage: - `Go to Management > Security > Roles to create one or more roles that grant` + - ` the Kibana application privilege for Reporting.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.manualStepFour', { - defaultMessage: `Grant Reporting privileges to users by assigning one of the new roles.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleUsers.manualStepFive', { - defaultMessage: - `Remove the "reporting_user" role from all users and add the custom role.` + - ` The affected users are: {usersRoles}.`, - values: { usersRoles }, - }), - ], - }; - - let users: SecurityGetUserResponse; - try { - users = await client.security.getUser(); - } catch (err) { - const { logger } = reportingCore.getPluginSetupDeps(); - if (deprecations.getErrorStatusCode(err) === 403) { - logger.warn( - `Failed to retrieve users when checking for deprecations:` + - ` the "manage_security" cluster privilege is required.` - ); - } else { - logger.error( - `Failed to retrieve users when checking for deprecations,` + - ` unexpected error: ${deprecations.getDetailedErrorMessage(err)}.` - ); - } - return deprecations.deprecationError(strings.title, err, docLinks); - } - - const reportingUsers = Object.entries(users).reduce((userSet, current) => { - const [userName, user] = current; - const foundRole = user.roles.find((role) => deprecatedRoles.includes(role)); - if (foundRole) { - userSet.push(`${userName}[${foundRole}]`); - } - return userSet; - }, [] as string[]); - - if (reportingUsers.length === 0) { - return []; - } - - return [ - { - title: strings.title, - message: strings.message, - correctiveActions: { manualSteps: strings.manualSteps(reportingUsers.join(', ')) }, - level: 'warning', - deprecationType: 'feature', - documentationUrl: getDocumentationUrl(reportingCore.getKibanaPackageInfo().branch), - }, - ]; -} - -async function getRoleMappingsDeprecations( - client: ElasticsearchClient, - reportingCore: ReportingCore, - deprecatedRoles: string[], - docLinks: DocLinksServiceSetup -): Promise { - const usingDeprecatedConfig = !reportingCore.getContract().usesUiCapabilities(); - const strings = { - title: i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.title', { - defaultMessage: `The "{reportingUserRoleName}" role is deprecated: check role mappings`, - values: { reportingUserRoleName: REPORTING_USER_ROLE_NAME }, - }), - message: i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.description', { - defaultMessage: - `The default mechanism for Reporting privileges will work differently in future versions, and` + - ` this cluster has role mappings that are mapped to a deprecated role for this privilege.` + - ` Set "xpack.reporting.roles.enabled" to "false" to adopt the future behavior before upgrading.`, - }), - manualSteps: (roleMappings: string) => [ - ...(usingDeprecatedConfig - ? [ - i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.manualStepOne', { - defaultMessage: `Set "xpack.reporting.roles.enabled" to "false" in kibana.yml.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.manualStepTwo', { - defaultMessage: `Remove "xpack.reporting.roles.allow" in kibana.yml, if present.`, - }), - ] - : []), - - i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.manualStepThree', { - defaultMessage: - `Go to Management > Security > Roles to create one or more roles that grant` + - ` the Kibana application privilege for Reporting.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.manualStepFour', { - defaultMessage: `Grant Reporting privileges to users by assigning one of the new roles.`, - }), - i18n.translate('xpack.reporting.deprecations.reportingRoleMappings.manualStepFive', { - defaultMessage: - `Remove the "reporting_user" role from all role mappings and add the custom role.` + - ` The affected role mappings are: {roleMappings}.`, - values: { roleMappings }, - }), - ], - }; - - let roleMappings: SecurityGetRoleMappingResponse; - try { - roleMappings = await client.security.getRoleMapping(); - } catch (err) { - const { logger } = reportingCore.getPluginSetupDeps(); - if (deprecations.getErrorStatusCode(err) === 403) { - logger.warn( - `Failed to retrieve role mappings when checking for deprecations:` + - ` the "manage_security" cluster privilege is required.` - ); - } else { - logger.error( - `Failed to retrieve role mappings when checking for deprecations,` + - ` unexpected error: ${deprecations.getDetailedErrorMessage(err)}.` - ); - } - return deprecations.deprecationError(strings.title, err, docLinks); - } - - const roleMappingsWithReportingRole: string[] = Object.entries(roleMappings).reduce( - (roleSet, current) => { - const [roleName, role] = current; - const foundMapping = role.roles?.find((roll) => deprecatedRoles.includes(roll)); - if (foundMapping) { - roleSet.push(`${roleName}[${foundMapping}]`); - } - return roleSet; - }, - [] as string[] - ); - - if (roleMappingsWithReportingRole.length === 0) { - return []; - } - - return [ - { - title: strings.title, - message: strings.message, - correctiveActions: { - manualSteps: strings.manualSteps(roleMappingsWithReportingRole.join(', ')), - }, - level: 'warning', - deprecationType: 'feature', - documentationUrl: getDocumentationUrl(reportingCore.getKibanaPackageInfo().branch), - }, - ]; -} diff --git a/x-pack/plugins/reporting/server/features.ts b/x-pack/plugins/reporting/server/features.ts index 5fb03f7428b26..a7971494b6c1a 100644 --- a/x-pack/plugins/reporting/server/features.ts +++ b/x-pack/plugins/reporting/server/features.ts @@ -5,29 +5,17 @@ * 2.0. */ -import { DEFAULT_APP_CATEGORIES, type Logger } from '@kbn/core/server'; +import { DEFAULT_APP_CATEGORIES } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; import type { FeaturesPluginSetup } from '@kbn/features-plugin/server'; import { KibanaFeatureScope } from '@kbn/features-plugin/common'; interface FeatureRegistrationOpts { features: FeaturesPluginSetup; - deprecatedRoles: string[] | false; isServerless: boolean; - logger: Logger; } -/** - * If xpack.reporting.roles.enabled === true, register Reporting as a feature - * that is controlled by user role names. Also, for Serverless register a - * 'shell' Reporting Kibana feature. - */ -export function registerFeatures({ - isServerless, - features, - deprecatedRoles, - logger, -}: FeatureRegistrationOpts) { +export function registerFeatures({ isServerless, features }: FeatureRegistrationOpts) { // Register a 'shell' feature specifically for Serverless. If granted, it will automatically provide access to // reporting capabilities in other features, such as Discover, Dashboards, and Visualizations. On its own, this // feature doesn't grant any additional privileges. @@ -48,29 +36,5 @@ export function registerFeatures({ }); } - if (deprecatedRoles !== false) { - // refer to roles.allow configuration (deprecated path) - const allowedRoles = ['superuser', ...(deprecatedRoles ?? [])]; - const privileges = allowedRoles.map((role) => ({ - requiredClusterPrivileges: [], - requiredRoles: [role], - ui: [], - })); - - // self-register as an elasticsearch feature (deprecated) - features.registerElasticsearchFeature({ - id: 'reporting', - catalogue: ['reporting'], - management: { - insightsAndAlerting: ['reporting'], - }, - privileges, - }); - } else { - logger.debug( - `Reporting roles configuration is disabled. Please assign access to Reporting use Kibana feature controls for applications.` - ); - // trigger application to register Reporting as a subfeature - features.enableReportingUiCapabilities(); - } + features.enableReportingUiCapabilities(); } diff --git a/x-pack/plugins/reporting/server/mocks/index.ts b/x-pack/plugins/reporting/server/mocks/index.ts index ea9d448aff167..6f52d1a4c77c3 100644 --- a/x-pack/plugins/reporting/server/mocks/index.ts +++ b/x-pack/plugins/reporting/server/mocks/index.ts @@ -9,7 +9,6 @@ import { ReportingStart } from '../types'; export const reportingMock = { createStart: (): ReportingStart => ({ - usesUiCapabilities: () => false, registerExportTypes: () => {}, }), }; diff --git a/x-pack/plugins/reporting/server/plugin.ts b/x-pack/plugins/reporting/server/plugin.ts index 51ba41adadac8..12bfb3decb805 100644 --- a/x-pack/plugins/reporting/server/plugin.ts +++ b/x-pack/plugins/reporting/server/plugin.ts @@ -71,7 +71,7 @@ export class ReportingPlugin }); registerUiSettings(core); - registerDeprecations({ core, reportingCore }); + registerDeprecations({ core }); registerReportingUsageCollector(reportingCore, plugins.usageCollection); registerReportingEventTypes(core); @@ -80,12 +80,9 @@ export class ReportingPlugin // async background setup (async () => { - // Feature registration relies on config, depending on whether deprecated roles are enabled, so it cannot be setup before here. registerFeatures({ features: plugins.features, - deprecatedRoles: reportingCore.getDeprecatedAllowedRoles(), isServerless: this.initContext.env.packageInfo.buildFlavor === 'serverless', - logger: this.logger, }); this.logger.debug('Setup complete'); })().catch((e) => { diff --git a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts index b66effef8961c..3236e7602df3d 100644 --- a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts +++ b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.test.ts @@ -21,7 +21,8 @@ import { authorizedUserPreRouting } from './authorized_user_pre_routing'; let mockCore: ReportingCore; let mockSetupDeps: ReportingInternalSetup; let mockStartDeps: ReportingInternalStart; -let mockReportingConfig = createMockConfigSchema({ roles: { enabled: false } }); + +const mockReportingConfig = createMockConfigSchema(); const getMockContext = () => ({ @@ -112,88 +113,4 @@ describe('authorized_user_pre_routing', function () { body: `Sorry, you aren't authenticated`, }); }); - - describe('Deprecated: security roles for access control', () => { - beforeEach(async () => { - mockReportingConfig = createMockConfigSchema({ - roles: { - allow: ['reporting_user'], - enabled: true, - }, - }); - }); - - it(`should return with 403 when security is enabled but user doesn't have the allowed role`, async function () { - mockStartDeps = await createMockPluginStart( - { - securityService: { - authc: { - getCurrentUser: () => ({ id: '123', roles: ['peasant'], username: 'Tom Riddle' }), - }, - }, - }, - mockReportingConfig - ); - mockCore = await createMockReportingCore(mockReportingConfig, mockSetupDeps, mockStartDeps); - const mockHandler = () => { - throw new Error('Handler callback should not be called'); - }; - - expect( - await authorizedUserPreRouting(mockCore, mockHandler)( - getMockContext(), - getMockRequest(), - getMockResponseFactory() - ) - ).toMatchObject({ - body: `Ask your administrator for access to reporting features. Learn more.`, - }); - }); - - it('should return from handler when security is enabled and user has explicitly allowed role', async function () { - mockStartDeps = await createMockPluginStart( - { - securityService: { - authc: { - getCurrentUser: () => ({ username: 'friendlyuser', roles: ['reporting_user'] }), - }, - }, - }, - mockReportingConfig - ); - mockCore = await createMockReportingCore(mockReportingConfig, mockSetupDeps, mockStartDeps); - - let handlerCalled = false; - await authorizedUserPreRouting(mockCore, (user: unknown) => { - expect(user).toMatchObject({ roles: ['reporting_user'], username: 'friendlyuser' }); - handlerCalled = true; - return Promise.resolve({ status: 200, options: {} }); - })(getMockContext(), getMockRequest(), getMockResponseFactory()); - expect(handlerCalled).toBe(true); - }); - - it('should return from handler when security is enabled and user has superuser role', async function () { - mockStartDeps = await createMockPluginStart( - { - securityService: { - authc: { getCurrentUser: () => ({ username: 'friendlyuser', roles: ['superuser'] }) }, - }, - }, - mockReportingConfig - ); - mockCore = await createMockReportingCore(mockReportingConfig, mockSetupDeps, mockStartDeps); - - const handler = jest.fn().mockResolvedValue({ status: 200, options: {} }); - await authorizedUserPreRouting(mockCore, handler)( - getMockContext(), - getMockRequest(), - getMockResponseFactory() - ); - - expect(handler).toHaveBeenCalled(); - const [[user]] = handler.mock.calls; - expect(user).toMatchObject({ roles: ['superuser'], username: 'friendlyuser' }); - }); - }); }); diff --git a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts index c6d82894772fd..3fdf41831c593 100644 --- a/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts +++ b/x-pack/plugins/reporting/server/routes/common/authorized_user_pre_routing.ts @@ -6,15 +6,12 @@ */ import { RequestHandler, RouteMethod } from '@kbn/core/server'; -import { i18n } from '@kbn/i18n'; import { AuthenticatedUser } from '@kbn/security-plugin/server'; import { ReportingCore } from '../../core'; import { ReportingRequestHandlerContext } from '../../types'; import { getUser } from './get_user'; -const superuserRole = 'superuser'; - type ReportingRequestUser = AuthenticatedUser | false; export type RequestHandlerUser = RequestHandler< @@ -30,7 +27,7 @@ export const authorizedUserPreRouting = ( reporting: ReportingCore, handler: RequestHandlerUser ): RequestHandler => { - const { logger, security: securitySetup, docLinks } = reporting.getPluginSetupDeps(); // ReportingInternalSetup.security?: SecurityPluginSetup | undefined + const { logger, security: securitySetup } = reporting.getPluginSetupDeps(); // ReportingInternalSetup.security?: SecurityPluginSetup | undefined return async (context, req, res) => { const { securityService } = await reporting.getPluginStartDeps(); @@ -45,30 +42,6 @@ export const authorizedUserPreRouting = ( } } - const deprecatedAllowedRoles = reporting.getDeprecatedAllowedRoles(); - if (user && deprecatedAllowedRoles !== false) { - // check allowance with the configured set of roleas + "superuser" - const allowedRoles = deprecatedAllowedRoles || []; - const authorizedRoles = [superuserRole, ...allowedRoles]; - - if (!user.roles.find((role) => authorizedRoles.includes(role))) { - const body = i18n.translate('xpack.reporting.userAccessError.message', { - defaultMessage: `Ask your administrator for access to reporting features. {grantUserAccessDocs}.`, - values: { - grantUserAccessDocs: - `` + - i18n.translate('xpack.reporting.userAccessError.learnMoreLink', { - defaultMessage: 'Learn more', - }) + - '', - }, - }); - // user's roles do not allow - return res.forbidden({ body }); - } - } - return handler(user, context, req, res); } catch (err) { logger.error(err); diff --git a/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts b/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts index d275fb2cbbaf5..c5e4da96efb26 100644 --- a/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts +++ b/x-pack/plugins/reporting/server/routes/common/jobs/job_management_pre_routing.test.ts @@ -20,7 +20,7 @@ import { jobManagementPreRouting } from './job_management_pre_routing'; jest.mock('../../../lib/content_stream'); jest.mock('./jobs_query'); -const mockReportingConfig = createMockConfigSchema({ roles: { enabled: false } }); +const mockReportingConfig = createMockConfigSchema(); let mockCore: ReportingCore; let mockSetupDeps: ReportingInternalSetup; let mockStartDeps: ReportingInternalStart; diff --git a/x-pack/plugins/reporting/server/routes/internal/generate/generate_from_jobparams.ts b/x-pack/plugins/reporting/server/routes/internal/generate/generate_from_jobparams.ts index 7f547702475cd..f8ee55cc12fb5 100644 --- a/x-pack/plugins/reporting/server/routes/internal/generate/generate_from_jobparams.ts +++ b/x-pack/plugins/reporting/server/routes/internal/generate/generate_from_jobparams.ts @@ -18,8 +18,7 @@ export function registerGenerationRoutesInternal(reporting: ReportingCore, logge const setupDeps = reporting.getPluginSetupDeps(); const { router } = setupDeps; - const useKibanaAccessControl = reporting.getDeprecatedAllowedRoles() === false; // true if Reporting's deprecated access control feature is disabled - const kibanaAccessControlTags = useKibanaAccessControl ? ['access:generateReport'] : []; + const kibanaAccessControlTags = ['access:generateReport']; const registerInternalPostGenerationEndpoint = () => { const path = `${GENERATE_PREFIX}/{exportType}`; diff --git a/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts b/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts index a9b2094fea023..ad65976d99f55 100644 --- a/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts +++ b/x-pack/plugins/reporting/server/routes/internal/management/integration_tests/jobs.test.ts @@ -76,7 +76,7 @@ describe(`Reporting Job Management Routes: Internal`, () => { }; const coreSetupMock = coreMock.createSetup(); - const mockConfigSchema = createMockConfigSchema({ roles: { enabled: false } }); + const mockConfigSchema = createMockConfigSchema(); beforeEach(async () => { ({ server, httpSetup } = await setupServer(reportingSymbol)); @@ -350,45 +350,6 @@ describe(`Reporting Job Management Routes: Internal`, () => { }); }); - describe('Deprecated: role-based access control', () => { - it('fails on users without the appropriate role', async () => { - mockStartDeps = await createMockPluginStart( - { - licensing: { - ...licensingMock.createStart(), - license$: new BehaviorSubject({ isActive: true, isAvailable: true, type: 'gold' }), - }, - securityService: { - authc: { - getCurrentUser: () => ({ id: '123', roles: ['peasant'], username: 'Tom Riddle' }), - }, - }, - }, - mockConfigSchema - ); - - reportingCore = await createMockReportingCore( - createMockConfigSchema({ roles: { enabled: true } }), - mockSetupDeps, - mockStartDeps - ); - - registerJobInfoRoutes(reportingCore); - - await server.start(); - - await supertest(httpSetup.server.listener) - .get(`${INTERNAL_ROUTES.JOBS.DOWNLOAD_PREFIX}/dope`) - .expect(403) - .then(({ body }) => - expect(body.message).toMatchInlineSnapshot(` - "Ask your administrator for access to reporting features. Learn more." - `) - ); - }); - }); - describe('usage counters', () => { it('increments the info api counter', async () => { mockEsClient.search.mockResponseOnce(getCompleteHits()); diff --git a/x-pack/plugins/reporting/server/routes/public/generate_from_jobparams.ts b/x-pack/plugins/reporting/server/routes/public/generate_from_jobparams.ts index 276c9da8a30b4..1f901634f3f00 100644 --- a/x-pack/plugins/reporting/server/routes/public/generate_from_jobparams.ts +++ b/x-pack/plugins/reporting/server/routes/public/generate_from_jobparams.ts @@ -16,8 +16,7 @@ export function registerGenerationRoutesPublic(reporting: ReportingCore, logger: const setupDeps = reporting.getPluginSetupDeps(); const { router } = setupDeps; - const useKibanaAccessControl = reporting.getDeprecatedAllowedRoles() === false; // true if Reporting's deprecated access control feature is disabled - const kibanaAccessControlTags = useKibanaAccessControl ? ['access:generateReport'] : []; + const kibanaAccessControlTags = ['access:generateReport']; const registerPublicPostGenerationEndpoint = () => { const path = `${PUBLIC_ROUTES.GENERATE_PREFIX}/{exportType}`; diff --git a/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts b/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts index 8e15ab314e723..8afb1d2aa25b0 100644 --- a/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts +++ b/x-pack/plugins/reporting/server/routes/public/integration_tests/jobs.test.ts @@ -72,7 +72,7 @@ describe(`Reporting Job Management Routes: Public`, () => { }; const coreSetupMock = coreMock.createSetup(); - const mockConfigSchema = createMockConfigSchema({ roles: { enabled: false } }); + const mockConfigSchema = createMockConfigSchema(); beforeEach(async () => { ({ server, httpSetup } = await setupServer(reportingSymbol)); diff --git a/x-pack/plugins/reporting/server/types.ts b/x-pack/plugins/reporting/server/types.ts index 40415a3aaacf4..221ec83e0b3e2 100644 --- a/x-pack/plugins/reporting/server/types.ts +++ b/x-pack/plugins/reporting/server/types.ts @@ -37,10 +37,6 @@ import type { AuthenticatedUser } from '@kbn/core-security-common'; */ export interface ReportingSetup { registerExportTypes: ExportTypesRegistry['register']; - /** - * Used to inform plugins if Reporting config is compatible with UI Capabilities / Application Sub-Feature Controls - */ - usesUiCapabilities: () => boolean; } /** diff --git a/x-pack/plugins/reporting/tsconfig.json b/x-pack/plugins/reporting/tsconfig.json index 68a7ded4ee1e8..e4e579802912b 100644 --- a/x-pack/plugins/reporting/tsconfig.json +++ b/x-pack/plugins/reporting/tsconfig.json @@ -30,7 +30,6 @@ "@kbn/test-jest-helpers", "@kbn/rison", "@kbn/task-manager-plugin", - "@kbn/config", "@kbn/core-http-server", "@kbn/core-test-helpers-test-utils", "@kbn/safer-lodash-set", diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 641fe748bc9cc..c4c4b6514d865 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -35252,26 +35252,6 @@ "xpack.reporting.deprecations.reportingRole.forbiddenErrorMessage": "Vous n’avez pas les autorisations requises pour remédier à ce déclassement.", "xpack.reporting.deprecations.reportingRole.unknownErrorCorrectiveAction": "Pour plus d'informations, veuillez consulter les logs Kibana.", "xpack.reporting.deprecations.reportingRole.unknownErrorMessage": "Impossible d'exécuter la vérification de déclassement. Pour plus d'informations, veuillez consulter les logs Kibana.", - "xpack.reporting.deprecations.reportingRoleMappings.description": "Le mécanisme par défaut pour les privilèges de Reporting fonctionnera différemment dans les versions futures, et ce cluster a des mappings de rôle associés à un rôle déclassé pour ces privilèges. Définissez \"xpack.reporting.roles.enabled\" sur \"false\" pour adopter le comportement futur avant la mise à niveau.", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFive": "Supprimez le rôle \"reporting_user\" pour tous les mappings de rôle et ajoutez le rôle personnalisé. Les mappings de rôle concernés sont les suivants : {roleMappings}.", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFour": "Accordez les privilèges de Reporting aux utilisateurs en leur affectant l’un des nouveaux rôles.", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepOne": "Définissez \"xpack.reporting.roles.enabled\" sur \"false\" dans le fichier kibana.yml.", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepThree": "Sous Gestion > Sécurité > Rôles, créez un ou plusieurs rôles permettant d'accorder le privilège de l'application Kibana à Reporting.", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepTwo": "Supprimez le paramètre \"xpack.reporting.roles.allow\" du fichier kibana.yml, le cas échéant.", - "xpack.reporting.deprecations.reportingRoleMappings.title": "Le rôle \"{reportingUserRoleName}\" est déclassé : vérifiez les mappings de rôle.", - "xpack.reporting.deprecations.reportingRoles.description": "Le mécanisme par défaut pour les privilèges de Reporting fonctionnera différemment dans les versions futures, ce qui affectera le comportement de ce cluster. Définissez \"xpack.reporting.roles.enabled\" sur \"false\" pour adopter le comportement futur avant la mise à niveau.", - "xpack.reporting.deprecations.reportingRoles.manualStepFour": "Accordez les privilèges de Reporting aux utilisateurs en leur affectant l’un des nouveaux rôles.", - "xpack.reporting.deprecations.reportingRoles.manualStepOne": "Définissez \"xpack.reporting.roles.enabled\" sur \"false\" dans le fichier kibana.yml.", - "xpack.reporting.deprecations.reportingRoles.manualStepThree": "Sous Gestion > Sécurité > Rôles, créez un ou plusieurs rôles permettant d'accorder le privilège de l'application Kibana à Reporting.", - "xpack.reporting.deprecations.reportingRoles.manualStepTwo": "Supprimez le paramètre \"xpack.reporting.roles.allow\" du fichier kibana.yml, le cas échéant.", - "xpack.reporting.deprecations.reportingRoles.title": "Le paramètre \"{fromPath}.roles\" est déclassé.", - "xpack.reporting.deprecations.reportingRoleUsers.description": "Le mécanisme par défaut pour les privilèges de Reporting fonctionnera différemment dans les versions futures, et ce cluster a des utilisateurs associés à un rôle déclassé pour ces privilèges. Définissez \"xpack.reporting.roles.enabled\" sur \"false\" pour adopter le comportement futur avant la mise à niveau.", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFive": "Supprimez le rôle \"reporting_user\" pour tous les utilisateurs et ajoutez le rôle personnalisé. Les utilisateurs concernés sont les suivants : {usersRoles}.", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFour": "Accordez les privilèges de Reporting aux utilisateurs en leur affectant l’un des nouveaux rôles.", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepOne": "Définissez \"xpack.reporting.roles.enabled\" sur \"false\" dans le fichier kibana.yml.", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepThree": "Sous Gestion > Sécurité > Rôles, créez un ou plusieurs rôles permettant d'accorder le privilège de l'application Kibana à Reporting.", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepTwo": "Supprimez le paramètre \"xpack.reporting.roles.allow\" du fichier kibana.yml, le cas échéant.", - "xpack.reporting.deprecations.reportingRoleUsers.title": "Le rôle \"{reportingUserRoleName}\" est déclassé : vérifiez les rôles utilisateur.", "xpack.reporting.diagnostic.browserMissingDependency": "Le navigateur n'a pas pu démarrer correctement en raison de dépendances système manquantes. Veuillez consulter {url}", "xpack.reporting.diagnostic.browserMissingFonts": "Le navigateur n'a pas réussi à localiser de police par défaut. Consultez {url} pour corriger le problème.", "xpack.reporting.diagnostic.fontconfigError": "Le navigateur n'a pas pu démarrer correctement en raison de dépendances de polices système manquantes. Veuillez consulter {url}", @@ -35408,8 +35388,6 @@ "xpack.reporting.statusIndicator.unknownLabel": "Inconnu", "xpack.reporting.uiSettings.validate.customLogo.badFile": "Désolé, ce fichier ne convient pas. Veuillez essayer un autre fichier image.", "xpack.reporting.uiSettings.validate.customLogo.tooLarge": "Désolé, ce fichier est trop volumineux. Le fichier image doit être inférieur à 200 kilo-octets.", - "xpack.reporting.userAccessError.learnMoreLink": "En savoir plus", - "xpack.reporting.userAccessError.message": "Demandez à votre administrateur un accès aux fonctionnalités de reporting. {grantUserAccessDocs}.", "xpack.rollupJobs.appTitle": "Tâches de cumul", "xpack.rollupJobs.create.backButton.label": "Retour", "xpack.rollupJobs.create.dateTypeField": "date", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 8ee66aeaeeeee..9437c83a30c31 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -35111,26 +35111,6 @@ "xpack.reporting.deprecations.reportingRole.forbiddenErrorMessage": "この廃止予定を修正する十分な権限がありません。", "xpack.reporting.deprecations.reportingRole.unknownErrorCorrectiveAction": "詳細については、Kibanaログを確認してください。", "xpack.reporting.deprecations.reportingRole.unknownErrorMessage": "廃止予定チェックを実行できませんでした。詳細については、Kibanaログを確認してください。", - "xpack.reporting.deprecations.reportingRoleMappings.description": "将来のバージョンでは、レポート権限のデフォルトメカニズムの動作が変更されます。また、このクラスターには、この権限の廃止予定のロールにマッピングされたロールマッピングが存在します。「xpack.reporting.roles.enabled」を「false」に設定すると、アップグレード前に将来の動作を導入できます。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFive": "すべてのロールマッピングから\"reporting_user\"ロールを削除し、カスタムロールを追加します。影響を受けるロールマッピング:{roleMappings}。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFour": "新しいロールのいずれかを割り当てて、レポート権限をユーザーに付与します。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepOne": "kibana.ymlで「xpack.reporting.roles.enabled」をfalseに設定します。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepThree": "[管理]>[セキュリティ]>[ロール]から、レポートのKibanaアプリケーション権限を付与する1つ以上のロールを作成します。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepTwo": "存在する場合は、kibana.ymlで「xpack.reporting.roles.allow」を削除します。", - "xpack.reporting.deprecations.reportingRoleMappings.title": "\"{reportingUserRoleName}\"ロールは廃止予定です。ロールマッピングを確認してください", - "xpack.reporting.deprecations.reportingRoles.description": "将来のバージョンでは、レポート権限のデフォルトメカニズムが変更されます。これはこのクラスターの動作に影響します。「xpack.reporting.roles.enabled」を「false」に設定すると、アップグレード前に将来の動作を導入できます。", - "xpack.reporting.deprecations.reportingRoles.manualStepFour": "新しいロールのいずれかを割り当てて、レポート権限をユーザーに付与します。", - "xpack.reporting.deprecations.reportingRoles.manualStepOne": "kibana.ymlで「xpack.reporting.roles.enabled」をfalseに設定します。", - "xpack.reporting.deprecations.reportingRoles.manualStepThree": "[管理]>[セキュリティ]>[ロール]から、レポートのKibanaアプリケーション権限を付与する1つ以上のロールを作成します。", - "xpack.reporting.deprecations.reportingRoles.manualStepTwo": "存在する場合は、kibana.ymlで「xpack.reporting.roles.allow」を削除します。", - "xpack.reporting.deprecations.reportingRoles.title": "\"{fromPath}.roles\"設定は廃止予定です", - "xpack.reporting.deprecations.reportingRoleUsers.description": "将来のバージョンでは、レポート権限のデフォルトメカニズムの動作が変更されます。また、このクラスターには、この権限の廃止予定のロールが割り当てられたユーザーが存在します。「xpack.reporting.roles.enabled」を「false」に設定すると、アップグレード前に将来の動作を導入できます。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFive": "すべてのユーザーから「reporting_user」ロールを削除し、カスタムロールを追加します。影響を受けるユーザー:{usersRoles}。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFour": "新しいロールのいずれかを割り当てて、レポート権限をユーザーに付与します。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepOne": "kibana.ymlで「xpack.reporting.roles.enabled」をfalseに設定します。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepThree": "[管理]>[セキュリティ]>[ロール]から、レポートのKibanaアプリケーション権限を付与する1つ以上のロールを作成します。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepTwo": "存在する場合は、kibana.ymlで「xpack.reporting.roles.allow」を削除します。", - "xpack.reporting.deprecations.reportingRoleUsers.title": "\"{reportingUserRoleName}\"ロールは廃止予定です。ユーザーロールを確認してください", "xpack.reporting.diagnostic.browserMissingDependency": "システム依存関係が不足しているため、ブラウザーを正常に起動できませんでした。{url}を参照してください", "xpack.reporting.diagnostic.browserMissingFonts": "ブラウザーはデフォルトフォントを検索できませんでした。この問題を修正するには、{url}を参照してください。", "xpack.reporting.diagnostic.fontconfigError": "システムフォント依存関係が不足しているため、ブラウザーを正常に起動できませんでした。{url}を参照してください", @@ -35267,8 +35247,6 @@ "xpack.reporting.statusIndicator.unknownLabel": "不明", "xpack.reporting.uiSettings.validate.customLogo.badFile": "このファイルは動作しません。別の画像ファイルを試してください。", "xpack.reporting.uiSettings.validate.customLogo.tooLarge": "このファイルは大きすぎます。画像ファイルは200キロバイト未満でなければなりません。", - "xpack.reporting.userAccessError.learnMoreLink": "詳細", - "xpack.reporting.userAccessError.message": "レポート機能にアクセスするには、管理者に問い合わせてください。{grantUserAccessDocs}。", "xpack.rollupJobs.appTitle": "ロールアップジョブ", "xpack.rollupJobs.create.backButton.label": "戻る", "xpack.rollupJobs.create.dateTypeField": "日付", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index b6ac70304497b..cf6fb36f8f20b 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -34604,23 +34604,6 @@ "xpack.reporting.deprecations.reportingRole.forbiddenErrorMessage": "您没有足够的权限来修复此弃用。", "xpack.reporting.deprecations.reportingRole.unknownErrorCorrectiveAction": "请检查 Kibana 日志了解更多详情。", "xpack.reporting.deprecations.reportingRole.unknownErrorMessage": "无法执行弃用检查。请检查 Kibana 日志了解更多详情。", - "xpack.reporting.deprecations.reportingRoleMappings.description": "在未来版本中,报告权限的默认工作机制会有所不同,并且此集群具有映射到该权限的过时角色的角色映射。在升级之前,请将'xpack.reporting.roles.enabled'设置为'false'以采用未来的行为。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFive": "从所有角色映射中移除'reporting_user'角色,然后添加定制角色。受影响的角色映射为:{roleMappings}。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepFour": "通过分配新角色之一向用户授予报告权限。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepOne": "在 kibana.yml 中将'xpack.reporting.roles.enabled'设置为'false'。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepThree": "前往'管理'>'安全性'>'角色'以创建一个或多个针对 Reporting 授予 Kibana 应用程序权限的角色。", - "xpack.reporting.deprecations.reportingRoleMappings.manualStepTwo": "移除 kibana.yml 中的'xpack.reporting.roles.allow'(如果存在)。", - "xpack.reporting.deprecations.reportingRoles.description": "在未来版本中,报告权限的默认工作机制会有所不同,这将影响此集群的行为。在升级之前,请将'xpack.reporting.roles.enabled'设置为'false'以采用未来的行为。", - "xpack.reporting.deprecations.reportingRoles.manualStepFour": "通过分配新角色之一向用户授予报告权限。", - "xpack.reporting.deprecations.reportingRoles.manualStepOne": "在 kibana.yml 中将'xpack.reporting.roles.enabled'设置为'false'。", - "xpack.reporting.deprecations.reportingRoles.manualStepThree": "前往'管理'>'安全性'>'角色'以创建一个或多个针对 Reporting 授予 Kibana 应用程序权限的角色。", - "xpack.reporting.deprecations.reportingRoles.manualStepTwo": "移除 kibana.yml 中的'xpack.reporting.roles.allow'(如果存在)。", - "xpack.reporting.deprecations.reportingRoleUsers.description": "在未来版本中,报告权限的默认工作机制会有所不同,并且此集群的用户具有用于该权限的过时角色。在升级之前,请将'xpack.reporting.roles.enabled'设置为'false'以采用未来的行为。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFive": "从所有用户中移除'reporting_user'角色,然后添加定制角色。受影响的用户为:{usersRoles}。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepFour": "通过分配新角色之一向用户授予报告权限。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepOne": "在 kibana.yml 中将'xpack.reporting.roles.enabled'设置为'false'。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepThree": "前往'管理'>'安全性'>'角色'以创建一个或多个针对 Reporting 授予 Kibana 应用程序权限的角色。", - "xpack.reporting.deprecations.reportingRoleUsers.manualStepTwo": "移除 kibana.yml 中的'xpack.reporting.roles.allow'(如果存在)。", "xpack.reporting.diagnostic.browserMissingDependency": "由于缺少系统依赖项,浏览器无法正常启动。请参见 {url}", "xpack.reporting.diagnostic.browserMissingFonts": "浏览器找不到默认字体。请参见 {url} 以解决此问题。", "xpack.reporting.diagnostic.fontconfigError": "由于缺少系统字体依赖项,浏览器无法正常启动。请参见 {url}", @@ -34752,8 +34735,6 @@ "xpack.reporting.statusIndicator.unknownLabel": "未知", "xpack.reporting.uiSettings.validate.customLogo.badFile": "抱歉,该文件无效。请尝试其他图像文件。", "xpack.reporting.uiSettings.validate.customLogo.tooLarge": "抱歉,该文件过大。图像文件必须小于 200 千字节。", - "xpack.reporting.userAccessError.learnMoreLink": "了解详情", - "xpack.reporting.userAccessError.message": "请联系管理员以访问报告功能。{grantUserAccessDocs}。", "xpack.rollupJobs.appTitle": "汇总/打包作业", "xpack.rollupJobs.create.backButton.label": "返回", "xpack.rollupJobs.create.dateTypeField": "日期", diff --git a/x-pack/test/accessibility/apps/group3/reporting.ts b/x-pack/test/accessibility/apps/group3/reporting.ts index 45959e42b383a..edd5bbeb0a0a6 100644 --- a/x-pack/test/accessibility/apps/group3/reporting.ts +++ b/x-pack/test/accessibility/apps/group3/reporting.ts @@ -20,7 +20,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const createReportingUser = async () => { await security.user.create(reporting.REPORTING_USER_USERNAME, { password: reporting.REPORTING_USER_PASSWORD, - roles: ['reporting_user', 'data_analyst', 'kibana_user'], // Deprecated: using built-in `reporting_user` role grants all Reporting privileges + roles: ['data_analyst', 'kibana_user'], full_name: 'a reporting user', }); }; diff --git a/x-pack/test/api_integration/apis/security/license_downgrade.ts b/x-pack/test/api_integration/apis/security/license_downgrade.ts index ad7fba3ac3d64..812a6385af970 100644 --- a/x-pack/test/api_integration/apis/security/license_downgrade.ts +++ b/x-pack/test/api_integration/apis/security/license_downgrade.ts @@ -26,6 +26,7 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'url_create', 'store_search_session', + 'generate_report', ]; const trialPrivileges = await supertest .get('/api/security/privileges') diff --git a/x-pack/test/api_integration/apis/security/privileges.ts b/x-pack/test/api_integration/apis/security/privileges.ts index 0d34480910a25..4cf8cc46a9338 100644 --- a/x-pack/test/api_integration/apis/security/privileges.ts +++ b/x-pack/test/api_integration/apis/security/privileges.ts @@ -20,7 +20,7 @@ export default function ({ getService }: FtrProviderContext) { features: { graph: ['all', 'read', 'minimal_all', 'minimal_read'], savedObjectsTagging: ['all', 'read', 'minimal_all', 'minimal_read'], - canvas: ['all', 'read', 'minimal_all', 'minimal_read'], + canvas: ['all', 'read', 'minimal_all', 'minimal_read', 'generate_report'], maps: ['all', 'read', 'minimal_all', 'minimal_read'], generalCases: [ 'all', @@ -137,8 +137,9 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'url_create', 'store_search_session', + 'generate_report', ], - visualize: ['all', 'read', 'minimal_all', 'minimal_read', 'url_create'], + visualize: ['all', 'read', 'minimal_all', 'minimal_read', 'url_create', 'generate_report'], dashboard: [ 'all', 'read', @@ -146,6 +147,8 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'url_create', 'store_search_session', + 'generate_report', + 'download_csv_report', ], dev_tools: ['all', 'read', 'minimal_all', 'minimal_read'], advancedSettings: ['all', 'read', 'minimal_all', 'minimal_read'], diff --git a/x-pack/test/api_integration/apis/security/privileges_basic.ts b/x-pack/test/api_integration/apis/security/privileges_basic.ts index 94cfe21cbbd02..3911d95ea9bed 100644 --- a/x-pack/test/api_integration/apis/security/privileges_basic.ts +++ b/x-pack/test/api_integration/apis/security/privileges_basic.ts @@ -223,6 +223,7 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'url_create', 'store_search_session', + 'generate_report', ], visualize: ['all', 'read', 'minimal_all', 'minimal_read', 'url_create'], dashboard: [ @@ -232,6 +233,7 @@ export default function ({ getService }: FtrProviderContext) { 'minimal_read', 'url_create', 'store_search_session', + 'download_csv_report', ], dev_tools: ['all', 'read', 'minimal_all', 'minimal_read'], advancedSettings: ['all', 'read', 'minimal_all', 'minimal_read'], diff --git a/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts b/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts index afcee962374db..1790fdd914289 100644 --- a/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts +++ b/x-pack/test/functional/apps/canvas/feature_controls/canvas_security.ts @@ -69,7 +69,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('shows canvas navlink', async () => { const navLinks = (await appsMenu.readLinks()).map((link) => link.text); - expect(navLinks).to.eql(['Canvas']); + expect(navLinks).to.eql(['Canvas', 'Stack Management']); // access to the Reporting feature grants access to Stack Management }); it(`landing page shows "Create new workpad" button`, async () => { diff --git a/x-pack/test/functional/apps/canvas/reports.ts b/x-pack/test/functional/apps/canvas/reports.ts index 147f9c2b4b91d..880a8573991d0 100644 --- a/x-pack/test/functional/apps/canvas/reports.ts +++ b/x-pack/test/functional/apps/canvas/reports.ts @@ -27,14 +27,11 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { { spaces: ['*'], base: [], - feature: { canvas: ['read'] }, + feature: { canvas: ['read', 'generate_report'] }, }, ], }); - await security.testUser.setRoles([ - 'test_canvas_user', - 'reporting_user', // NOTE: the built-in role granting full reporting access is deprecated. See xpack.reporting.roles.enabled - ]); + await security.testUser.setRoles(['test_canvas_user']); await kibanaServer.importExport.load(archive); await browser.setWindowSize(1600, 850); }); diff --git a/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts b/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts index 42c933f8792a8..30a715dc472a7 100644 --- a/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts +++ b/x-pack/test/functional/apps/dashboard/group3/reporting/screenshots.ts @@ -62,15 +62,12 @@ export default function ({ { spaces: ['*'], base: [], - feature: { dashboard: ['minimal_all'] }, + feature: { dashboard: ['minimal_all', 'generate_report'] }, }, ], }); - await security.testUser.setRoles([ - 'test_dashboard_user', - 'reporting_user', // NOTE: the built-in role granting full reporting access is deprecated. See the xpack.reporting.roles.enabled setting - ]); + await security.testUser.setRoles(['test_dashboard_user']); }); after('clean up archives', async () => { await share.closeShareModal(); diff --git a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts index 26f68e73d10ef..f3bde620f21f9 100644 --- a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts +++ b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts @@ -30,12 +30,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'x-pack/test/functional/fixtures/kbn_archiver/lens/reporting' ); await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + + // need reporting privileges in dashboard + await security.role.create('test_dashboard_user', { + elasticsearch: { cluster: [], indices: [], run_as: [] }, + kibana: [ + { + spaces: ['*'], + base: [], + feature: { dashboard: ['minimal_read', 'generate_report'] }, + }, + ], + }); + await security.testUser.setRoles( [ 'test_logstash_reader', 'global_dashboard_read', 'global_visualize_all', - 'reporting_user', // NOTE: the built-in role granting full reporting access is deprecated. See xpack.reporting.roles.enabled + 'test_dashboard_user', ], { skipBrowserRefresh: true } ); diff --git a/x-pack/test/functional/apps/management/feature_controls/management_security.ts b/x-pack/test/functional/apps/management/feature_controls/management_security.ts index 4e0b41270d231..286963b77d53b 100644 --- a/x-pack/test/functional/apps/management/feature_controls/management_security.ts +++ b/x-pack/test/functional/apps/management/feature_controls/management_security.ts @@ -72,6 +72,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { 'triggersActions', 'cases', 'triggersActionsConnectors', + 'reporting', 'jobsListLink', 'maintenanceWindows', ], diff --git a/x-pack/test/functional/apps/reporting_management/report_listing.ts b/x-pack/test/functional/apps/reporting_management/report_listing.ts index cd2cdfba1ea31..7907121ae2e55 100644 --- a/x-pack/test/functional/apps/reporting_management/report_listing.ts +++ b/x-pack/test/functional/apps/reporting_management/report_listing.ts @@ -27,7 +27,6 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { before(async () => { await security.testUser.setRoles([ 'kibana_admin', // to access stack management - 'reporting_user', // NOTE: the built-in role granting full reporting access is deprecated. See xpack.reporting.roles.enabled ]); await kibanaServer.savedObjects.cleanStandardList(); await kibanaServer.importExport.load(kbnArchive); diff --git a/x-pack/test/reporting_api_integration/reporting_and_security.config.ts b/x-pack/test/reporting_api_integration/reporting_and_security.config.ts index 237bb94ed1dc6..3a7f31ae91033 100644 --- a/x-pack/test/reporting_api_integration/reporting_and_security.config.ts +++ b/x-pack/test/reporting_api_integration/reporting_and_security.config.ts @@ -36,7 +36,6 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { `--xpack.screenshotting.networkPolicy.rules=${JSON.stringify(testPolicyRules)}`, `--xpack.reporting.capture.maxAttempts=1`, `--xpack.reporting.csv.maxSizeBytes=6000`, - '--xpack.reporting.roles.enabled=false', // Reporting access control is implemented by sub-feature application privileges // for testing set buffer duration to 0 to immediately flush counters into saved objects. '--usageCollection.usageCounters.bufferDuration=0', ], diff --git a/x-pack/test/reporting_functional/reporting_and_deprecated_security.config.ts b/x-pack/test/reporting_functional/reporting_and_deprecated_security.config.ts deleted file mode 100644 index a65755e97b0c9..0000000000000 --- a/x-pack/test/reporting_functional/reporting_and_deprecated_security.config.ts +++ /dev/null @@ -1,26 +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 { FtrConfigProviderContext } from '@kbn/test'; -import { resolve } from 'path'; - -export default async function ({ readConfigFile }: FtrConfigProviderContext) { - const reportingConfig = await readConfigFile(require.resolve('./reporting_and_security.config')); - - return { - ...reportingConfig.getAll(), - junit: { reportName: 'X-Pack Reporting Functional Tests With Deprecated Roles config' }, - testFiles: [resolve(__dirname, './reporting_and_deprecated_security')], - kbnTestServer: { - ...reportingConfig.get('kbnTestServer'), - serverArgs: [ - ...reportingConfig.get('kbnTestServer.serverArgs'), - `--xpack.reporting.roles.enabled=true`, // DEPRECATED: support for `true` will be removed in 8.0 - ], - }, - }; -} diff --git a/x-pack/test/reporting_functional/reporting_and_deprecated_security/index.ts b/x-pack/test/reporting_functional/reporting_and_deprecated_security/index.ts deleted file mode 100644 index 722b6545115cd..0000000000000 --- a/x-pack/test/reporting_functional/reporting_and_deprecated_security/index.ts +++ /dev/null @@ -1,58 +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 { FtrProviderContext } from '../ftr_provider_context'; - -// eslint-disable-next-line import/no-default-export -export default function (context: FtrProviderContext) { - const security = context.getService('security'); - const createDataAnalystRole = async () => { - await security.role.create('data_analyst', { - metadata: {}, - elasticsearch: { - cluster: [], - indices: [ - { - names: ['ecommerce'], - privileges: ['read', 'view_index_metadata'], - allow_restricted_indices: false, - }, - ], - run_as: [], - }, - kibana: [{ base: ['all'], feature: {}, spaces: ['*'] }], - }); - }; - const createDataAnalyst = async () => { - await security.user.create('data_analyst', { - password: 'data_analyst-password', - roles: ['data_analyst', 'kibana_user'], - full_name: 'a kibana user called data_a', - }); - }; - const createReportingUser = async () => { - await security.user.create('reporting_user', { - password: 'reporting_user-password', - roles: ['reporting_user', 'data_analyst', 'kibana_user'], // Deprecated: using built-in `reporting_user` role grants all Reporting privileges - full_name: 'a reporting user', - }); - }; - - describe('Reporting Functional Tests with Deprecated Security configuration enabled', function () { - before(async () => { - const reportingAPI = context.getService('reportingAPI'); - await reportingAPI.logTaskManagerHealth(); - await createDataAnalystRole(); - await createDataAnalyst(); - await createReportingUser(); - }); - - const { loadTestFile } = context; - loadTestFile(require.resolve('./security_roles_privileges')); - loadTestFile(require.resolve('./management')); - }); -} diff --git a/x-pack/test/reporting_functional/reporting_and_deprecated_security/management.ts b/x-pack/test/reporting_functional/reporting_and_deprecated_security/management.ts deleted file mode 100644 index dba16c798d4ff..0000000000000 --- a/x-pack/test/reporting_functional/reporting_and_deprecated_security/management.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { FtrProviderContext } from '../ftr_provider_context'; - -// eslint-disable-next-line import/no-default-export -export default ({ getService, getPageObjects }: FtrProviderContext) => { - const PageObjects = getPageObjects(['common', 'reporting', 'discover']); - - const testSubjects = getService('testSubjects'); - const reportingFunctional = getService('reportingFunctional'); - - describe('Access to Management > Reporting', () => { - before(async () => { - await reportingFunctional.initEcommerce(); - }); - after(async () => { - await reportingFunctional.teardownEcommerce(); - }); - - it('does not allow user that does not have reporting_user role', async () => { - await reportingFunctional.loginDataAnalyst(); - await PageObjects.common.navigateToApp('reporting'); - await testSubjects.missingOrFail('reportJobListing'); - }); - - it('does allow user with reporting_user role', async () => { - await reportingFunctional.loginReportingUser(); - await PageObjects.common.navigateToApp('reporting'); - await testSubjects.existOrFail('reportJobListing'); - }); - }); -}; diff --git a/x-pack/test/reporting_functional/reporting_and_deprecated_security/security_roles_privileges.ts b/x-pack/test/reporting_functional/reporting_and_deprecated_security/security_roles_privileges.ts deleted file mode 100644 index f73ec8e39fb48..0000000000000 --- a/x-pack/test/reporting_functional/reporting_and_deprecated_security/security_roles_privileges.ts +++ /dev/null @@ -1,82 +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 { FtrProviderContext } from '../ftr_provider_context'; - -const DASHBOARD_TITLE = 'Ecom Dashboard'; -const SAVEDSEARCH_TITLE = 'Ecommerce Data'; -const VIS_TITLE = 'e-commerce pie chart'; - -// eslint-disable-next-line import/no-default-export -export default function ({ getService }: FtrProviderContext) { - const reportingFunctional = getService('reportingFunctional'); - - describe('Security with `reporting_user` built-in role', () => { - before(async () => { - await reportingFunctional.initEcommerce(); - }); - after(async () => { - await reportingFunctional.teardownEcommerce(); - }); - - describe('Dashboard: Download CSV file', () => { - it('does not allow user that does not have reporting_user role', async () => { - await reportingFunctional.loginDataAnalyst(); - await reportingFunctional.openSavedDashboard(DASHBOARD_TITLE); - await reportingFunctional.tryDashboardGenerateCsvFail('Ecommerce Data'); - }); - - it('does allow user with reporting_user role', async () => { - await reportingFunctional.loginReportingUser(); - await reportingFunctional.openSavedDashboard(DASHBOARD_TITLE); - await reportingFunctional.tryDashboardGenerateCsvSuccess('Ecommerce Data'); - }); - }); - - describe('Dashboard: Generate Screenshot', () => { - it('does not allow user that does not have reporting_user role', async () => { - await reportingFunctional.loginDataAnalyst(); - await reportingFunctional.openSavedDashboard(DASHBOARD_TITLE); - await reportingFunctional.tryGeneratePdfFail(); - }); - - it('does allow user with reporting_user role', async () => { - await reportingFunctional.loginReportingUser(); - await reportingFunctional.openSavedDashboard(DASHBOARD_TITLE); - await reportingFunctional.tryGeneratePdfSuccess(); - }); - }); - - describe('Discover: Generate CSV', () => { - it('does not allow user that does not have reporting_user role', async () => { - await reportingFunctional.loginDataAnalyst(); - await reportingFunctional.openSavedSearch(SAVEDSEARCH_TITLE); - await reportingFunctional.tryDiscoverCsvFail(); - }); - - it('does allow user with reporting_user role', async () => { - await reportingFunctional.loginReportingUser(); - await reportingFunctional.openSavedSearch(SAVEDSEARCH_TITLE); - await reportingFunctional.tryDiscoverCsvSuccess(); - }); - }); - - describe('Visualize Editor: Generate Screenshot', () => { - it('does not allow user that does not have reporting_user role', async () => { - await reportingFunctional.loginDataAnalyst(); - await reportingFunctional.openSavedVisualization(VIS_TITLE); - await reportingFunctional.tryGeneratePdfFail(); - }); - - it('does allow user with reporting_user role', async () => { - await reportingFunctional.loginReportingUser(); - await reportingFunctional.openSavedVisualization(VIS_TITLE); - await reportingFunctional.tryGeneratePdfSuccess(); - }); - }); - }); -} diff --git a/x-pack/test/reporting_functional/reporting_and_security.config.ts b/x-pack/test/reporting_functional/reporting_and_security.config.ts index 7d8c3ed696696..48096dbeb3226 100644 --- a/x-pack/test/reporting_functional/reporting_and_security.config.ts +++ b/x-pack/test/reporting_functional/reporting_and_security.config.ts @@ -25,7 +25,6 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { ...functionalConfig.get('kbnTestServer.serverArgs'), `--xpack.reporting.capture.maxAttempts=1`, `--xpack.reporting.csv.maxSizeBytes=6000`, - '--xpack.reporting.roles.enabled=false', // Reporting access control is implemented by sub-feature application privileges ], }, services: { diff --git a/x-pack/test/security_api_integration/tests/anonymous/capabilities.ts b/x-pack/test/security_api_integration/tests/anonymous/capabilities.ts index f4f43b070f0d5..2327292f3ea44 100644 --- a/x-pack/test/security_api_integration/tests/anonymous/capabilities.ts +++ b/x-pack/test/security_api_integration/tests/anonymous/capabilities.ts @@ -56,6 +56,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -63,6 +65,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -76,6 +79,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -87,6 +91,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -94,6 +100,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -107,6 +114,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -118,6 +126,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -125,6 +135,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -138,6 +149,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -168,6 +180,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -175,6 +189,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -188,6 +203,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -199,6 +215,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -206,6 +224,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -219,6 +238,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -230,6 +250,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -237,6 +259,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -250,6 +273,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -298,6 +322,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": true, "showWriteControls": false, @@ -305,6 +331,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": true, @@ -318,6 +345,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": true, @@ -331,6 +359,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -338,6 +368,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -351,6 +382,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": false, @@ -364,6 +396,8 @@ export default function ({ getService }: FtrProviderContext) { "dashboard": Object { "createNew": false, "createShortUrl": false, + "downloadCsv": false, + "generateScreenshot": false, "saveQuery": false, "show": false, "showWriteControls": false, @@ -371,6 +405,7 @@ export default function ({ getService }: FtrProviderContext) { }, "discover": Object { "createShortUrl": false, + "generateCsv": false, "save": false, "saveQuery": false, "show": false, @@ -384,6 +419,7 @@ export default function ({ getService }: FtrProviderContext) { "visualize": Object { "createShortUrl": false, "delete": false, + "generateScreenshot": false, "save": false, "saveQuery": false, "show": true, From b24be408697f68f0642bc706650d6f98fd4b5c6c Mon Sep 17 00:00:00 2001 From: Andrea Del Rio Date: Wed, 4 Dec 2024 08:52:38 -0800 Subject: [PATCH 039/141] [Dashboard] Adjust panel titles (#202864) ## Summary As presented in DnD, this PR adjusts the title of panels in Dashboards. It increases the font size from 12 to 14px and reduces the font-weight from bold to semibold. Actual implementation ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. ~- [ ] 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~ ~- [ ] 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 was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations.~ ~- [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed~ - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../public/panel_component/_presentation_panel.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/presentation_panel/public/panel_component/_presentation_panel.scss b/src/plugins/presentation_panel/public/panel_component/_presentation_panel.scss index 86f9e8d378e5a..a205501c0d08f 100644 --- a/src/plugins/presentation_panel/public/panel_component/_presentation_panel.scss +++ b/src/plugins/presentation_panel/public/panel_component/_presentation_panel.scss @@ -54,7 +54,7 @@ } .embPanel__title { - @include euiTitle('xxxs'); + @include euiTitle('xxs'); overflow: hidden; line-height: 1.5; flex-grow: 1; @@ -80,7 +80,7 @@ .embPanel__titleText { @include euiTextTruncate; - font-weight: $euiFontWeightBold; + font-weight: $euiFontWeightSemiBold; } .embPanel__placeholderTitleText { From 3b132b634d7f8cd46994cb72201c0d92729843a3 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Wed, 4 Dec 2024 18:24:07 +0100 Subject: [PATCH 040/141] [Synthetics] Fix overview trends for read-only user !! (#202914) ## Summary Fix overview trends for read-only user , we wrongly assume that this `POST` route needs write permission. --- .../synthetics/server/routes/overview_trends/overview_trends.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_trends/overview_trends.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_trends/overview_trends.ts index d68fc71c59b11..66be7171b2fe4 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/overview_trends/overview_trends.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/overview_trends/overview_trends.ts @@ -53,6 +53,7 @@ export async function fetchTrends( export const createOverviewTrendsRoute: SyntheticsRestApiRouteFactory = () => ({ method: 'POST', + writeAccess: false, path: SYNTHETICS_API_URLS.OVERVIEW_TRENDS, validate: { body: schema.arrayOf( From 4b8710998489ac95e06cbf1958707d909e50f968 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Wed, 4 Dec 2024 10:39:22 -0700 Subject: [PATCH 041/141] [SharedUX] Replace Sass with Emotion, Round 1 (#199885) ## Summary Part of https://github.com/elastic/kibana-team/issues/1082 Selects certain Sass files to replace with styles declared with Emotion. This PR does not include any changes that would be noticeable by end-users. It changes the internals to use a different technology for styling components. ~~Some `className` attributes have been kept, because they are referenced in JS and tests.~~ Update: all classNames that are no longer needed for styling purposes have been removed. * If the className was needed for tests, it has been replaced with a test-subj. * If the className was used as a selector in production code, it has been replaced with alternative JS. ## References 1. https://emotion.sh/docs/globals 2. https://emotion.sh/docs/best-practices 3. https://github.com/elastic/eui/discussions/6828#discussioncomment-10825360 --------- Co-authored-by: Jatin Kathuria --- .../loading_indicator.test.tsx.snap | 73 +++++++++++++------ .../collapsible_nav.test.tsx.snap | 40 +++++++--- .../header/__snapshots__/header.test.tsx.snap | 6 +- .../src/ui/header/collapsible_nav.scss | 46 ------------ .../src/ui/header/collapsible_nav.tsx | 15 ++-- .../ui/header/get_collapsible_nav_styles.ts | 72 ++++++++++++++++++ .../src/ui/header/header_logo.scss | 11 --- .../src/ui/header/header_logo.tsx | 25 ++++++- .../src/ui/loading_indicator.scss | 9 --- .../src/ui/loading_indicator.test.tsx | 4 +- .../src/ui/loading_indicator.tsx | 47 ++++++++---- .../chrome/navigation/src/ui/header_logo.scss | 4 - .../timelines/components/timeline/helpers.tsx | 2 +- x-pack/test/custom_branding/tests/settings.ts | 3 +- 14 files changed, 222 insertions(+), 135 deletions(-) delete mode 100644 packages/core/chrome/core-chrome-browser-internal/src/ui/header/collapsible_nav.scss create mode 100644 packages/core/chrome/core-chrome-browser-internal/src/ui/header/get_collapsible_nav_styles.ts delete mode 100644 packages/core/chrome/core-chrome-browser-internal/src/ui/header/header_logo.scss delete mode 100644 packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.scss delete mode 100644 packages/shared-ux/chrome/navigation/src/ui/header_logo.scss diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/__snapshots__/loading_indicator.test.tsx.snap b/packages/core/chrome/core-chrome-browser-internal/src/ui/__snapshots__/loading_indicator.test.tsx.snap index b221e4e9a64ab..c8e702f228b20 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/__snapshots__/loading_indicator.test.tsx.snap +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/__snapshots__/loading_indicator.test.tsx.snap @@ -1,31 +1,62 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`kbnLoadingIndicator is hidden by default 1`] = ` - + + + + `; exports[`kbnLoadingIndicator is visible when loadingCount is > 0 1`] = ` - + + + + `; exports[`kbnLoadingIndicator shows logo image when customLogo is set 1`] = ` - + + + + `; diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/collapsible_nav.test.tsx.snap b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/collapsible_nav.test.tsx.snap index 62b40f0d05e9b..167c919d6f498 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/collapsible_nav.test.tsx.snap +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/collapsible_nav.test.tsx.snap @@ -168,7 +168,7 @@ Array [ >

  • @@ -351,7 +351,7 @@ Array [
    @@ -464,7 +464,7 @@ Array [
    @@ -560,7 +560,7 @@ Array [
    @@ -858,7 +858,15 @@ exports[`CollapsibleNav renders the default nav 1`] = ` } - className="kbnCollapsibleNav" + css={ + Object { + "map": undefined, + "name": "1pvcuvk", + "next": undefined, + "styles": "@media (max-height: 240px){overflow-y:auto;}", + "toString": [Function], + } + } data-test-subj="collapsibleNav" id="collapsibe-nav" isOpen={false} @@ -1045,7 +1053,15 @@ exports[`CollapsibleNav renders the default nav 2`] = ` } - className="kbnCollapsibleNav" + css={ + Object { + "map": undefined, + "name": "1pvcuvk", + "next": undefined, + "styles": "@media (max-height: 240px){overflow-y:auto;}", + "toString": [Function], + } + } data-test-subj="collapsibleNav" id="collapsibe-nav" isOpen={false} diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap index 3e5b746b31536..6596f7c69db24 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/header/__snapshots__/header.test.tsx.snap @@ -56,12 +56,11 @@ Array [ > ); diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.scss b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.scss deleted file mode 100644 index d12331d9c042d..0000000000000 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.scss +++ /dev/null @@ -1,9 +0,0 @@ -.kbnLoadingIndicator-hidden { - visibility: hidden; - animation-play-state: paused; -} - -.euiHeaderSectionItem .euiButtonEmpty__text { - // stop global header buttons from jumping during loading state - display: flex; -} \ No newline at end of file diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.test.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.test.tsx index 1cdc7aa32533c..42bb1c718c88d 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.test.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.test.tsx @@ -16,7 +16,9 @@ import { LoadingIndicator } from './loading_indicator'; describe('kbnLoadingIndicator', () => { it('is hidden by default', () => { const wrapper = shallow(); - expect(wrapper.prop('data-test-subj')).toBe('globalLoadingIndicator-hidden'); + expect( + wrapper.findWhere((node) => node.prop('data-test-subj') === 'globalLoadingIndicator-hidden') + ).toHaveLength(1); expect(wrapper).toMatchSnapshot(); }); diff --git a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx index 2c9d5f6b931d6..28b91a5714a03 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/ui/loading_indicator.tsx @@ -7,6 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { Global, css } from '@emotion/react'; import { EuiLoadingSpinner, EuiProgress, EuiIcon, EuiImage } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; @@ -14,8 +15,6 @@ import classNames from 'classnames'; import type { Subscription } from 'rxjs'; import type { HttpStart } from '@kbn/core-http-browser'; -import './loading_indicator.scss'; - export interface LoadingIndicatorProps { loadingCount$: ReturnType; showAsBar?: boolean; @@ -60,6 +59,12 @@ export class LoadingIndicator extends React.Component + return ( + <> + + {!this.props.showAsBar ? ( + logo + ) : ( + + )} + ); } } diff --git a/packages/shared-ux/chrome/navigation/src/ui/header_logo.scss b/packages/shared-ux/chrome/navigation/src/ui/header_logo.scss deleted file mode 100644 index f75fd9cfa2466..0000000000000 --- a/packages/shared-ux/chrome/navigation/src/ui/header_logo.scss +++ /dev/null @@ -1,4 +0,0 @@ -.chrHeaderLogo__mark { - margin-left: $euiSizeS; - fill: $euiColorGhost; -} diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx index 43c4648abb83a..a5570d2750f5f 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/helpers.tsx @@ -184,7 +184,7 @@ export const focusUtilityBarAction = (containerElement: HTMLElement | null) => { * Resets keyboard focus on the page */ export const resetKeyboardFocus = () => { - document.querySelector('header.headerGlobalNav a.chrHeaderLogo')?.focus(); + document.body.focus(); }; interface OperatorHandler { diff --git a/x-pack/test/custom_branding/tests/settings.ts b/x-pack/test/custom_branding/tests/settings.ts index df4ccc53e7893..4b26641e3e4f2 100644 --- a/x-pack/test/custom_branding/tests/settings.ts +++ b/x-pack/test/custom_branding/tests/settings.ts @@ -91,8 +91,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { require.resolve('./acme_text.png') ); await goToSettings(); - const logo = await testSubjects.find('logo'); - const img = await logo.findByCssSelector('.chrHeaderLogo__mark'); + const img = await testSubjects.find('logoMark'); const imgSrc = (await img.getAttribute('src')) ?? ''; expect(imgSrc.startsWith('data:image/png')).to.be(true); }); From ccad2273d63c553ca30743709231a3f015c0e989 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Wed, 4 Dec 2024 17:58:51 +0000 Subject: [PATCH 042/141] chore(NA): update versions after v7.17.27 bump (#202810) This PR is a simple update of our versions file after the recent bumps. --- versions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions.json b/versions.json index 67e0a6ac49320..30b013e25cd2b 100644 --- a/versions.json +++ b/versions.json @@ -29,7 +29,7 @@ "previousMajor": true }, { - "version": "7.17.26", + "version": "7.17.27", "branch": "7.17" } ] From 391021be89bf99ecd10be2eae6819e46a1b92a1b Mon Sep 17 00:00:00 2001 From: Davis Plumlee <56367316+dplumlee@users.noreply.github.com> Date: Wed, 4 Dec 2024 13:17:55 -0500 Subject: [PATCH 043/141] [Security Solution] Disables `author` and `license` fields in rule edit form for prebuilt rule types (#201887) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Fixes https://github.com/elastic/kibana/issues/200251 > [!NOTE] > This bug/related fix is only visible with the `prebuiltRulesCustomizationEnabled` feature flag turned on. Disables `author` and `license` fields in rule edit form for prebuilt rule types as we throw API errors when they are changed from the existing rule value if the rule source is external. ### Screenshots - the same prebuilt rule in the Rule edit form **Before** Screenshot 2024-11-26 at 5 32 00 PM **After** ![Screenshot 2024-12-03 at 3 22 34 PM](https://github.com/user-attachments/assets/bfb4c468-3ea2-4fa0-bd36-a90c32eacce4) ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../components/step_about_rule/index.tsx | 73 ++++++++++++------- .../step_about_rule/translations.ts | 14 ++++ .../pages/rule_editing/index.tsx | 2 + 3 files changed, 64 insertions(+), 25 deletions(-) diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx index ac5c91aa8a25a..2d2ef8c8930d6 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/step_about_rule/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { EuiAccordion, EuiFlexItem, EuiSpacer, EuiFormRow } from '@elastic/eui'; +import { EuiAccordion, EuiFlexItem, EuiSpacer, EuiFormRow, EuiToolTip } from '@elastic/eui'; import type { FC } from 'react'; import React, { memo, useCallback, useEffect, useState, useMemo } from 'react'; import styled from 'styled-components'; @@ -13,6 +13,7 @@ import styled from 'styled-components'; import type { DataViewBase } from '@kbn/es-query'; import type { Severity, Type } from '@kbn/securitysolution-io-ts-alerting-types'; +import type { RuleSource } from '../../../../../common/api/detection_engine'; import { isThreatMatchRule, isEsqlRule } from '../../../../../common/detection_engine/utils'; import type { RuleStepProps, @@ -55,6 +56,7 @@ interface StepAboutRuleProps extends RuleStepProps { timestampOverride: string; form: FormHook; esqlQuery?: string | undefined; + ruleSource?: RuleSource; } interface StepAboutRuleReadOnlyProps { @@ -85,6 +87,7 @@ const StepAboutRuleComponent: FC = ({ isLoading, form, esqlQuery, + ruleSource, }) => { const { data } = useKibana().services; @@ -280,31 +283,51 @@ const StepAboutRuleComponent: FC = ({ }} /> - + + + - + + + = ({ rule }) => { form={aboutStepForm} esqlQuery={esqlQueryForAboutStep} key="aboutStep" + ruleSource={rule.rule_source} /> )} @@ -343,6 +344,7 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { [ isPrebuiltRulesCustomizationEnabled, rule?.immutable, + rule.rule_source, rule?.id, activeStep, loading, From 373a9c7927b05c877fb1a34d8e19f3f13a39df04 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Wed, 4 Dec 2024 19:37:05 +0100 Subject: [PATCH 044/141] [ES|QL] Removes the warnings from the console (#202899) --- packages/kbn-esql-editor/src/editor_footer/index.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/kbn-esql-editor/src/editor_footer/index.tsx b/packages/kbn-esql-editor/src/editor_footer/index.tsx index 4e60e65f19ca4..e6973e39657d9 100644 --- a/packages/kbn-esql-editor/src/editor_footer/index.tsx +++ b/packages/kbn-esql-editor/src/editor_footer/index.tsx @@ -297,7 +297,13 @@ export const EditorFooter = memo(function EditorFooter({ /> )} - + From 20b8737318843a12f0f560c3ab9ee60ce762b35a Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Wed, 4 Dec 2024 19:50:18 +0100 Subject: [PATCH 045/141] [ML] Trained Models: Optimize trained models Kibana API (#200977) ## Summary Closes #191939 Closes https://github.com/elastic/kibana/issues/175220 Adds various optimizations for the Trained Models page: --- - Creates a new Kibana `/trained_models_list` endpoint responsible for fetching complete data for the Trained Model UI page, including pipelines, indices and stats. Before the Trained Models page required 3 endpoints. The new `trained_models_list` replaces them, reducing the overall latency. Screenshot 2024-12-02 at 16 18 32 --- - Optimized fetching of pipelines, indices and stats, reducing the number of API calls to ES Several issues with the old endpoint stemmed from the with_indices flag. This flag triggered a method designed for the Model Map feature, which involved fetching a complete list of pipelines, iterating over each model, retrieving index settings multiple times, and obtaining both index content and a full list of transforms. The new endpoint solves these issues by fetching only the necessary information for the Trained Model page with minimal calls to Elasticsearch. #### APM transaction with a new endpoint image #### APM transaction with an old endpoint https://github.com/user-attachments/assets/c9d62ddb-5e13-4ac1-9cbf-d685fbed7808 --- - Improves type definitions for different model types ### 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 --- .../plugins/ml/common/types/trained_models.ts | 164 +++++-- .../add_inference_pipeline_flyout.tsx | 4 +- .../components/processor_configuration.tsx | 8 +- .../components/ml_inference/state.ts | 12 +- .../analytics_id_selector.tsx | 1 + .../model_management/add_model_flyout.tsx | 6 +- .../create_pipeline_for_model_flyout.tsx | 4 +- .../create_pipeline_for_model/state.ts | 4 +- .../test_trained_model.tsx | 4 +- .../model_management/delete_models_modal.tsx | 16 +- .../model_management/deployment_setup.tsx | 10 +- .../model_management/expanded_row.tsx | 35 +- .../model_management/force_stop_dialog.tsx | 6 +- .../model_management/get_model_state.tsx | 32 +- .../model_management/inference_api_tab.tsx | 4 +- .../model_management/model_actions.tsx | 198 ++++----- .../model_management/models_list.tsx | 322 ++++---------- .../model_management/pipelines/pipelines.tsx | 6 +- .../test_dfa_models_flyout.tsx | 5 +- .../model_management/test_models/index.ts | 2 +- .../test_models/test_flyout.tsx | 6 +- ...est_model_and_pipeline_creation_flyout.tsx | 5 +- .../test_trained_model_content.tsx | 12 +- .../model_management/test_models/utils.ts | 23 +- .../services/ml_api_service/management.ts | 17 - .../services/ml_api_service/trained_models.ts | 21 +- .../data_frame_analytics/analytics_manager.ts | 7 +- .../model_management/get_model_state.test.tsx | 12 +- .../model_management/get_model_state.ts | 30 ++ .../model_management/model_provider.test.ts | 195 ++++++-- .../model_management/models_provider.ts | 420 ++++++++++++++++-- x-pack/plugins/ml/server/plugin.ts | 3 +- .../ml/server/routes/inference_models.ts | 9 +- .../server/routes/schemas/inference_schema.ts | 2 - .../ml/server/routes/trained_models.test.ts | 139 ------ .../ml/server/routes/trained_models.ts | 302 ++++--------- .../providers/trained_models.ts | 25 +- .../server/shared_services/shared_services.ts | 7 +- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - .../apis/ml/trained_models/get_models.ts | 92 +--- .../apis/ml/trained_models/index.ts | 1 + .../ml/trained_models/trained_models_list.ts | 96 ++++ .../model_management/model_list.ts | 20 +- 45 files changed, 1239 insertions(+), 1051 deletions(-) rename x-pack/plugins/ml/{public/application => server/models}/model_management/get_model_state.test.tsx (94%) create mode 100644 x-pack/plugins/ml/server/models/model_management/get_model_state.ts delete mode 100644 x-pack/plugins/ml/server/routes/trained_models.test.ts create mode 100644 x-pack/test/api_integration/apis/ml/trained_models/trained_models_list.ts diff --git a/x-pack/plugins/ml/common/types/trained_models.ts b/x-pack/plugins/ml/common/types/trained_models.ts index f4ed52ff21f52..25d7e231bf166 100644 --- a/x-pack/plugins/ml/common/types/trained_models.ts +++ b/x-pack/plugins/ml/common/types/trained_models.ts @@ -5,14 +5,25 @@ * 2.0. */ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { TrainedModelType } from '@kbn/ml-trained-models-utils'; +import type { + InferenceInferenceEndpointInfo, + MlInferenceConfigCreateContainer, +} from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { + ModelDefinitionResponse, + ModelState, + TrainedModelType, +} from '@kbn/ml-trained-models-utils'; +import { + BUILT_IN_MODEL_TAG, + ELASTIC_MODEL_TAG, + TRAINED_MODEL_TYPE, +} from '@kbn/ml-trained-models-utils'; import type { DataFrameAnalyticsConfig, FeatureImportanceBaseline, TotalFeatureImportance, } from '@kbn/ml-data-frame-analytics-utils'; -import type { IndexName, IndicesIndexState } from '@elastic/elasticsearch/lib/api/types'; -import type { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; import type { XOR } from './common'; import type { MlSavedObjectType } from './saved_objects'; @@ -95,33 +106,12 @@ export type PutTrainedModelConfig = { >; // compressed_definition and definition are mutually exclusive export type TrainedModelConfigResponse = estypes.MlTrainedModelConfig & { - /** - * Associated pipelines. Extends response from the ES endpoint. - */ - pipelines?: Record | null; - origin_job_exists?: boolean; - - metadata?: { - analytics_config: DataFrameAnalyticsConfig; + metadata?: estypes.MlTrainedModelConfig['metadata'] & { + analytics_config?: DataFrameAnalyticsConfig; input: unknown; total_feature_importance?: TotalFeatureImportance[]; feature_importance_baseline?: FeatureImportanceBaseline; - model_aliases?: string[]; } & Record; - model_id: string; - model_type: TrainedModelType; - tags: string[]; - version: string; - inference_config?: Record; - indices?: Array>; - /** - * Whether the model has inference services - */ - hasInferenceServices?: boolean; - /** - * Inference services associated with the model - */ - inference_apis?: InferenceAPIConfigResponse[]; }; export interface PipelineDefinition { @@ -309,3 +299,125 @@ export interface ModelDownloadState { total_parts: number; downloaded_parts: number; } + +export type Stats = Omit; + +/** + * Additional properties for all items in the Trained models table + * */ +interface BaseModelItem { + type?: string[]; + tags: string[]; + /** + * Whether the model has inference services + */ + hasInferenceServices?: boolean; + /** + * Inference services associated with the model + */ + inference_apis?: InferenceInferenceEndpointInfo[]; + /** + * Associated pipelines. Extends response from the ES endpoint. + */ + pipelines?: Record; + /** + * Indices with associated pipelines that have inference processors utilizing the model deployments. + */ + indices?: string[]; +} + +/** Common properties for existing NLP models and NLP model download configs */ +interface BaseNLPModelItem extends BaseModelItem { + disclaimer?: string; + recommended?: boolean; + supported?: boolean; + state: ModelState | undefined; + downloadState?: ModelDownloadState; +} + +/** Model available for download */ +export type ModelDownloadItem = BaseNLPModelItem & + Omit & { + putModelConfig?: object; + softwareLicense?: string; + }; +/** Trained NLP model, i.e. pytorch model returned by the trained_models API */ +export type NLPModelItem = BaseNLPModelItem & + TrainedModelItem & { + stats: Stats & { deployment_stats: TrainedModelDeploymentStatsResponse[] }; + /** + * Description of the current model state + */ + stateDescription?: string; + /** + * Deployment ids extracted from the deployment stats + */ + deployment_ids: string[]; + }; + +export function isBaseNLPModelItem(item: unknown): item is BaseNLPModelItem { + return ( + typeof item === 'object' && + item !== null && + 'type' in item && + Array.isArray(item.type) && + item.type.includes(TRAINED_MODEL_TYPE.PYTORCH) + ); +} + +export function isNLPModelItem(item: unknown): item is NLPModelItem { + return isExistingModel(item) && item.model_type === TRAINED_MODEL_TYPE.PYTORCH; +} + +export const isElasticModel = (item: TrainedModelConfigResponse) => + item.tags.includes(ELASTIC_MODEL_TAG); + +export type ExistingModelBase = TrainedModelConfigResponse & BaseModelItem; + +/** Any model returned by the trained_models API, e.g. lang_ident, elser, dfa model */ +export type TrainedModelItem = ExistingModelBase & { stats: Stats }; + +/** Trained DFA model */ +export type DFAModelItem = Omit & { + origin_job_exists?: boolean; + inference_config?: Pick; + metadata?: estypes.MlTrainedModelConfig['metadata'] & { + analytics_config: DataFrameAnalyticsConfig; + input: unknown; + total_feature_importance?: TotalFeatureImportance[]; + feature_importance_baseline?: FeatureImportanceBaseline; + } & Record; +}; + +export type TrainedModelWithPipelines = TrainedModelItem & { + pipelines: Record; +}; + +export function isExistingModel(item: unknown): item is TrainedModelItem { + return ( + typeof item === 'object' && + item !== null && + 'model_type' in item && + 'create_time' in item && + !!item.create_time + ); +} + +export function isDFAModelItem(item: unknown): item is DFAModelItem { + return isExistingModel(item) && item.model_type === TRAINED_MODEL_TYPE.TREE_ENSEMBLE; +} + +export function isModelDownloadItem(item: TrainedModelUIItem): item is ModelDownloadItem { + return 'putModelConfig' in item && !!item.type?.includes(TRAINED_MODEL_TYPE.PYTORCH); +} + +export const isBuiltInModel = (item: TrainedModelConfigResponse | TrainedModelUIItem) => + item.tags.includes(BUILT_IN_MODEL_TAG); +/** + * This type represents a union of different model entities: + * - Any existing trained model returned by the API, e.g., lang_ident_model_1, DFA models, etc. + * - Hosted model configurations available for download, e.g., ELSER or E5 + * - NLP models already downloaded into Elasticsearch + * - DFA models + */ +export type TrainedModelUIItem = TrainedModelItem | ModelDownloadItem | NLPModelItem | DFAModelItem; diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/add_inference_pipeline_flyout.tsx b/x-pack/plugins/ml/public/application/components/ml_inference/add_inference_pipeline_flyout.tsx index 1d58dce866449..5bd47702ed3f0 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/add_inference_pipeline_flyout.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_inference/add_inference_pipeline_flyout.tsx @@ -20,7 +20,7 @@ import { import { i18n } from '@kbn/i18n'; import { extractErrorProperties } from '@kbn/ml-error-utils'; -import type { ModelItem } from '../../model_management/models_list'; +import type { DFAModelItem } from '../../../../common/types/trained_models'; import type { AddInferencePipelineSteps } from './types'; import { ADD_INFERENCE_PIPELINE_STEPS } from './constants'; import { AddInferencePipelineFooter } from '../shared'; @@ -39,7 +39,7 @@ import { useFetchPipelines } from './hooks/use_fetch_pipelines'; export interface AddInferencePipelineFlyoutProps { onClose: () => void; - model: ModelItem; + model: DFAModelItem; } export const AddInferencePipelineFlyout: FC = ({ diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/components/processor_configuration.tsx b/x-pack/plugins/ml/public/application/components/ml_inference/components/processor_configuration.tsx index cd8bdf52166e0..0803cd98679a8 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/components/processor_configuration.tsx +++ b/x-pack/plugins/ml/public/application/components/ml_inference/components/processor_configuration.tsx @@ -25,7 +25,7 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { CodeEditor } from '@kbn/code-editor'; -import type { ModelItem } from '../../../model_management/models_list'; +import type { DFAModelItem } from '../../../../../common/types/trained_models'; import { EDIT_MESSAGE, CANCEL_EDIT_MESSAGE, @@ -56,9 +56,9 @@ interface Props { condition?: string; fieldMap: MlInferenceState['fieldMap']; handleAdvancedConfigUpdate: (configUpdate: Partial) => void; - inferenceConfig: ModelItem['inference_config']; - modelInferenceConfig: ModelItem['inference_config']; - modelInputFields: ModelItem['input']; + inferenceConfig: DFAModelItem['inference_config']; + modelInferenceConfig: DFAModelItem['inference_config']; + modelInputFields: DFAModelItem['input']; modelType?: InferenceModelTypes; setHasUnsavedChanges: React.Dispatch>; tag?: string; diff --git a/x-pack/plugins/ml/public/application/components/ml_inference/state.ts b/x-pack/plugins/ml/public/application/components/ml_inference/state.ts index 787a2335717df..26bfe934eb46b 100644 --- a/x-pack/plugins/ml/public/application/components/ml_inference/state.ts +++ b/x-pack/plugins/ml/public/application/components/ml_inference/state.ts @@ -6,10 +6,10 @@ */ import { getAnalysisType } from '@kbn/ml-data-frame-analytics-utils'; +import type { DFAModelItem } from '../../../../common/types/trained_models'; import type { MlInferenceState } from './types'; -import type { ModelItem } from '../../model_management/models_list'; -export const getModelType = (model: ModelItem): string | undefined => { +export const getModelType = (model: DFAModelItem): string | undefined => { const analysisConfig = model.metadata?.analytics_config?.analysis; return analysisConfig !== undefined ? getAnalysisType(analysisConfig) : undefined; }; @@ -54,13 +54,17 @@ export const getDefaultOnFailureConfiguration = (): MlInferenceState['onFailure' }, ]; -export const getInitialState = (model: ModelItem): MlInferenceState => { +export const getInitialState = (model: DFAModelItem): MlInferenceState => { const modelType = getModelType(model); let targetField; if (modelType !== undefined) { targetField = model.inference_config - ? `ml.inference.${model.inference_config[modelType].results_field}` + ? `ml.inference.${ + model.inference_config[ + modelType as keyof Exclude + ]!.results_field + }` : undefined; } diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/components/analytics_selector/analytics_id_selector.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/components/analytics_selector/analytics_id_selector.tsx index bf786436919a9..9fe4da68aa6f8 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/components/analytics_selector/analytics_id_selector.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/components/analytics_selector/analytics_id_selector.tsx @@ -154,6 +154,7 @@ export function AnalyticsIdSelector({ async function fetchAnalyticsModels() { setIsLoading(true); try { + // FIXME should if fetch all trained models? const response = await trainedModelsApiService.getTrainedModels(); setTrainedModels(response); } catch (e) { diff --git a/x-pack/plugins/ml/public/application/model_management/add_model_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/add_model_flyout.tsx index 5a92a67962579..24c8ce0915234 100644 --- a/x-pack/plugins/ml/public/application/model_management/add_model_flyout.tsx +++ b/x-pack/plugins/ml/public/application/model_management/add_model_flyout.tsx @@ -30,12 +30,12 @@ import { FormattedMessage } from '@kbn/i18n-react'; import React, { type FC, useMemo, useState } from 'react'; import { groupBy } from 'lodash'; import { ElandPythonClient } from '@kbn/inference_integration_flyout'; +import type { ModelDownloadItem } from '../../../common/types/trained_models'; import { usePermissionCheck } from '../capabilities/check_capabilities'; import { useMlKibana } from '../contexts/kibana'; -import type { ModelItem } from './models_list'; export interface AddModelFlyoutProps { - modelDownloads: ModelItem[]; + modelDownloads: ModelDownloadItem[]; onClose: () => void; onSubmit: (modelId: string) => void; } @@ -138,7 +138,7 @@ export const AddModelFlyout: FC = ({ onClose, onSubmit, mod }; interface ClickToDownloadTabContentProps { - modelDownloads: ModelItem[]; + modelDownloads: ModelDownloadItem[]; onModelDownload: (modelId: string) => void; } diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/create_pipeline_for_model_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/create_pipeline_for_model_flyout.tsx index 21fac6f6a28f8..580341800f3b5 100644 --- a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/create_pipeline_for_model_flyout.tsx +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/create_pipeline_for_model_flyout.tsx @@ -21,7 +21,7 @@ import { i18n } from '@kbn/i18n'; import { extractErrorProperties } from '@kbn/ml-error-utils'; import type { SupportedPytorchTasksType } from '@kbn/ml-trained-models-utils'; -import type { ModelItem } from '../models_list'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import type { AddInferencePipelineSteps } from '../../components/ml_inference/types'; import { ADD_INFERENCE_PIPELINE_STEPS } from '../../components/ml_inference/constants'; import { AddInferencePipelineFooter } from '../../components/shared'; @@ -40,7 +40,7 @@ import { useTestTrainedModelsContext } from '../test_models/test_trained_models_ export interface CreatePipelineForModelFlyoutProps { onClose: (refreshList?: boolean) => void; - model: ModelItem; + model: TrainedModelItem; } export const CreatePipelineForModelFlyout: FC = ({ diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/state.ts b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/state.ts index 603a542e7964f..586537222c3c5 100644 --- a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/state.ts +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/state.ts @@ -7,8 +7,8 @@ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import type { IngestInferenceProcessor } from '@elastic/elasticsearch/lib/api/types'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import { getDefaultOnFailureConfiguration } from '../../components/ml_inference/state'; -import type { ModelItem } from '../models_list'; export interface InferecePipelineCreationState { creatingPipeline: boolean; @@ -26,7 +26,7 @@ export interface InferecePipelineCreationState { } export const getInitialState = ( - model: ModelItem, + model: TrainedModelItem, initialPipelineConfig: estypes.IngestPipeline | undefined ): InferecePipelineCreationState => ({ creatingPipeline: false, diff --git a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/test_trained_model.tsx b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/test_trained_model.tsx index 46ec8a6060ac5..ba25e3b26f920 100644 --- a/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/test_trained_model.tsx +++ b/x-pack/plugins/ml/public/application/model_management/create_pipeline_for_model/test_trained_model.tsx @@ -12,13 +12,13 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { ModelItem } from '../models_list'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import { TestTrainedModelContent } from '../test_models/test_trained_model_content'; import { useMlKibana } from '../../contexts/kibana'; import { type InferecePipelineCreationState } from './state'; interface ContentProps { - model: ModelItem; + model: TrainedModelItem; handlePipelineConfigUpdate: (configUpdate: Partial) => void; externalPipelineConfig?: estypes.IngestPipeline; } diff --git a/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx b/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx index 0f5c515c22776..7afad711521dc 100644 --- a/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx +++ b/x-pack/plugins/ml/public/application/model_management/delete_models_modal.tsx @@ -22,14 +22,15 @@ import { EuiSpacer, } from '@elastic/eui'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import type { TrainedModelItem, TrainedModelUIItem } from '../../../common/types/trained_models'; +import { isExistingModel } from '../../../common/types/trained_models'; import { type WithRequired } from '../../../common/types/common'; import { useTrainedModelsApiService } from '../services/ml_api_service/trained_models'; import { useToastNotificationService } from '../services/toast_notification_service'; import { DeleteSpaceAwareItemCheckModal } from '../components/delete_space_aware_item_check_modal'; -import { type ModelItem } from './models_list'; interface DeleteModelsModalProps { - models: ModelItem[]; + models: TrainedModelUIItem[]; onClose: (refreshList?: boolean) => void; } @@ -42,11 +43,14 @@ export const DeleteModelsModal: FC = ({ models, onClose const modelIds = models.map((m) => m.model_id); - const modelsWithPipelines = models.filter((m) => isPopulatedObject(m.pipelines)) as Array< - WithRequired - >; + const modelsWithPipelines = models.filter( + (m): m is WithRequired => + isExistingModel(m) && isPopulatedObject(m.pipelines) + ); - const modelsWithInferenceAPIs = models.filter((m) => m.hasInferenceServices); + const modelsWithInferenceAPIs = models.filter( + (m): m is TrainedModelItem => isExistingModel(m) && !!m.hasInferenceServices + ); const inferenceAPIsIDs: string[] = modelsWithInferenceAPIs.flatMap((model) => { return (model.inference_apis ?? []).map((inference) => inference.inference_id); diff --git a/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx b/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx index 87fff2bf3eb75..c5b38feb4c799 100644 --- a/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx +++ b/x-pack/plugins/ml/public/application/model_management/deployment_setup.tsx @@ -42,9 +42,11 @@ import { css } from '@emotion/react'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { dictionaryValidator } from '@kbn/ml-validators'; import type { NLPSettings } from '../../../common/constants/app'; -import type { TrainedModelDeploymentStatsResponse } from '../../../common/types/trained_models'; +import type { + NLPModelItem, + TrainedModelDeploymentStatsResponse, +} from '../../../common/types/trained_models'; import { type CloudInfo, getNewJobLimits } from '../services/ml_server_info'; -import type { ModelItem } from './models_list'; import type { MlStartTrainedModelDeploymentRequestNew } from './deployment_params_mapper'; import { DeploymentParamsMapper } from './deployment_params_mapper'; @@ -645,7 +647,7 @@ export const DeploymentSetup: FC = ({ }; interface StartDeploymentModalProps { - model: ModelItem; + model: NLPModelItem; startModelDeploymentDocUrl: string; onConfigChange: (config: DeploymentParamsUI) => void; onClose: () => void; @@ -845,7 +847,7 @@ export const getUserInputModelDeploymentParamsProvider = nlpSettings: NLPSettings ) => ( - model: ModelItem, + model: NLPModelItem, initialParams?: TrainedModelDeploymentStatsResponse, deploymentIds?: string[] ): Promise => { diff --git a/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx b/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx index f44dc55dab2df..4304e9e207e20 100644 --- a/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx +++ b/x-pack/plugins/ml/public/application/model_management/expanded_row.tsx @@ -26,18 +26,23 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { isDefined } from '@kbn/ml-is-defined'; -import { TRAINED_MODEL_TYPE } from '@kbn/ml-trained-models-utils'; +import { MODEL_STATE, TRAINED_MODEL_TYPE } from '@kbn/ml-trained-models-utils'; import { dynamic } from '@kbn/shared-ux-utility'; import { InferenceApi } from './inference_api_tab'; -import type { ModelItemFull } from './models_list'; import { ModelPipelines } from './pipelines'; import { AllocatedModels } from '../memory_usage/nodes_overview/allocated_models'; -import type { AllocatedModel, TrainedModelStat } from '../../../common/types/trained_models'; +import type { + AllocatedModel, + NLPModelItem, + TrainedModelItem, + TrainedModelStat, +} from '../../../common/types/trained_models'; import { useFieldFormatter } from '../contexts/kibana/use_field_formatter'; import { useEnabledFeatures } from '../contexts/ml'; +import { isNLPModelItem } from '../../../common/types/trained_models'; interface ExpandedRowProps { - item: ModelItemFull; + item: TrainedModelItem; } const JobMap = dynamic(async () => ({ @@ -169,8 +174,14 @@ export const ExpandedRow: FC = ({ item }) => { license_level, ]); + const hideColumns = useMemo(() => { + return showNodeInfo ? ['model_id'] : ['model_id', 'node_name']; + }, [showNodeInfo]); + const deploymentStatItems = useMemo(() => { - const deploymentStats = stats.deployment_stats; + if (!isNLPModelItem(item)) return []; + + const deploymentStats = (stats as NLPModelItem['stats'])!.deployment_stats; const modelSizeStats = stats.model_size_stats; if (!deploymentStats || !modelSizeStats) return []; @@ -228,11 +239,7 @@ export const ExpandedRow: FC = ({ item }) => { }; }); }); - }, [stats]); - - const hideColumns = useMemo(() => { - return showNodeInfo ? ['model_id'] : ['model_id', 'node_name']; - }, [showNodeInfo]); + }, [stats, item]); const tabs = useMemo(() => { return [ @@ -320,9 +327,7 @@ export const ExpandedRow: FC = ({ item }) => { @@ -529,7 +534,9 @@ export const ExpandedRow: FC = ({ item }) => { ]); const initialSelectedTab = - item.state === 'started' ? tabs.find((t) => t.id === 'stats') : tabs[0]; + isNLPModelItem(item) && item.state === MODEL_STATE.STARTED + ? tabs.find((t) => t.id === 'stats') + : tabs[0]; return ( void; onConfirm: (deploymentIds: string[]) => void; } @@ -220,7 +220,7 @@ export const StopModelDeploymentsConfirmDialog: FC) => - async (forceStopModel: ModelItem): Promise => { + async (forceStopModel: NLPModelItem): Promise => { return new Promise(async (resolve, reject) => { try { const modalSession = overlays.openModal( diff --git a/x-pack/plugins/ml/public/application/model_management/get_model_state.tsx b/x-pack/plugins/ml/public/application/model_management/get_model_state.tsx index d8bf2b8084a6a..75f8f9faa7a91 100644 --- a/x-pack/plugins/ml/public/application/model_management/get_model_state.tsx +++ b/x-pack/plugins/ml/public/application/model_management/get_model_state.tsx @@ -5,40 +5,18 @@ * 2.0. */ -import React from 'react'; -import { DEPLOYMENT_STATE, MODEL_STATE, type ModelState } from '@kbn/ml-trained-models-utils'; import { EuiBadge, - EuiHealth, - EuiLoadingSpinner, - type EuiHealthProps, EuiFlexGroup, EuiFlexItem, + EuiHealth, + EuiLoadingSpinner, EuiText, + type EuiHealthProps, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import type { ModelItem } from './models_list'; - -/** - * Resolves result model state based on the state of each deployment. - * - * If at least one deployment is in the STARTED state, the model state is STARTED. - * Then if none of the deployments are in the STARTED state, but at least one is in the STARTING state, the model state is STARTING. - * If all deployments are in the STOPPING state, the model state is STOPPING. - */ -export const getModelDeploymentState = (model: ModelItem): ModelState | undefined => { - if (!model.stats?.deployment_stats?.length) return; - - if (model.stats?.deployment_stats?.some((v) => v.state === DEPLOYMENT_STATE.STARTED)) { - return MODEL_STATE.STARTED; - } - if (model.stats?.deployment_stats?.some((v) => v.state === DEPLOYMENT_STATE.STARTING)) { - return MODEL_STATE.STARTING; - } - if (model.stats?.deployment_stats?.every((v) => v.state === DEPLOYMENT_STATE.STOPPING)) { - return MODEL_STATE.STOPPING; - } -}; +import { MODEL_STATE, type ModelState } from '@kbn/ml-trained-models-utils'; +import React from 'react'; export const getModelStateColor = ( state: ModelState | undefined diff --git a/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx b/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx index dc86c359bb1aa..3f55871a93e44 100644 --- a/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx +++ b/x-pack/plugins/ml/public/application/model_management/inference_api_tab.tsx @@ -16,10 +16,10 @@ import { EuiTitle, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; +import type { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; export interface InferenceAPITabProps { - inferenceApis: InferenceAPIConfigResponse[]; + inferenceApis: InferenceInferenceEndpointInfo[]; } export const InferenceApi: FC = ({ inferenceApis }) => { diff --git a/x-pack/plugins/ml/public/application/model_management/model_actions.tsx b/x-pack/plugins/ml/public/application/model_management/model_actions.tsx index 133698b0e72f1..1fe008871b0ef 100644 --- a/x-pack/plugins/ml/public/application/model_management/model_actions.tsx +++ b/x-pack/plugins/ml/public/application/model_management/model_actions.tsx @@ -8,18 +8,28 @@ import type { Action } from '@elastic/eui/src/components/basic_table/action_types'; import { i18n } from '@kbn/i18n'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; -import { EuiToolTip, useIsWithinMaxBreakpoint } from '@elastic/eui'; -import React, { useCallback, useMemo, useEffect, useState } from 'react'; -import { - BUILT_IN_MODEL_TAG, - DEPLOYMENT_STATE, - TRAINED_MODEL_TYPE, -} from '@kbn/ml-trained-models-utils'; +import { useIsWithinMaxBreakpoint } from '@elastic/eui'; +import React, { useMemo, useEffect, useState } from 'react'; +import { DEPLOYMENT_STATE } from '@kbn/ml-trained-models-utils'; import { MODEL_STATE } from '@kbn/ml-trained-models-utils/src/constants/trained_models'; import { getAnalysisType, type DataFrameAnalysisConfigType, } from '@kbn/ml-data-frame-analytics-utils'; +import useMountedState from 'react-use/lib/useMountedState'; +import type { + DFAModelItem, + NLPModelItem, + TrainedModelItem, + TrainedModelUIItem, +} from '../../../common/types/trained_models'; +import { + isBuiltInModel, + isDFAModelItem, + isExistingModel, + isModelDownloadItem, + isNLPModelItem, +} from '../../../common/types/trained_models'; import { useEnabledFeatures, useMlServerInfo } from '../contexts/ml'; import { useTrainedModelsApiService } from '../services/ml_api_service/trained_models'; import { getUserConfirmationProvider } from './force_stop_dialog'; @@ -27,8 +37,7 @@ import { useToastNotificationService } from '../services/toast_notification_serv import { getUserInputModelDeploymentParamsProvider } from './deployment_setup'; import { useMlKibana, useMlLocator, useNavigateToPath } from '../contexts/kibana'; import { ML_PAGES } from '../../../common/constants/locator'; -import { isTestable, isDfaTrainedModel } from './test_models'; -import type { ModelItem } from './models_list'; +import { isTestable } from './test_models'; import { usePermissionCheck } from '../capabilities/check_capabilities'; import { useCloudCheck } from '../components/node_available_warning/hooks'; @@ -44,16 +53,17 @@ export function useModelActions({ onModelDownloadRequest, }: { isLoading: boolean; - onDfaTestAction: (model: ModelItem) => void; - onTestAction: (model: ModelItem) => void; - onModelsDeleteRequest: (models: ModelItem[]) => void; - onModelDeployRequest: (model: ModelItem) => void; + onDfaTestAction: (model: DFAModelItem) => void; + onTestAction: (model: TrainedModelItem) => void; + onModelsDeleteRequest: (models: TrainedModelUIItem[]) => void; + onModelDeployRequest: (model: DFAModelItem) => void; onModelDownloadRequest: (modelId: string) => void; onLoading: (isLoading: boolean) => void; fetchModels: () => Promise; modelAndDeploymentIds: string[]; -}): Array> { +}): Array> { const isMobileLayout = useIsWithinMaxBreakpoint('l'); + const isMounted = useMountedState(); const { services: { @@ -95,23 +105,19 @@ export function useModelActions({ const trainedModelsApiService = useTrainedModelsApiService(); useEffect(() => { - let isMounted = true; mlApi .hasPrivileges({ cluster: ['manage_ingest_pipelines'], }) .then((result) => { - if (isMounted) { + if (isMounted()) { setCanManageIngestPipelines( result.hasPrivileges === undefined || result.hasPrivileges.cluster?.manage_ingest_pipelines === true ); } }); - return () => { - isMounted = false; - }; - }, [mlApi]); + }, [mlApi, isMounted]); const getUserConfirmation = useMemo( () => getUserConfirmationProvider(overlays, startServices), @@ -131,12 +137,7 @@ export function useModelActions({ [overlays, startServices, startModelDeploymentDocUrl, cloudInfo, showNodeInfo, nlpSettings] ); - const isBuiltInModel = useCallback( - (item: ModelItem) => item.tags.includes(BUILT_IN_MODEL_TAG), - [] - ); - - return useMemo>>( + return useMemo>>( () => [ { name: i18n.translate('xpack.ml.trainedModels.modelsList.viewTrainingDataNameActionLabel', { @@ -150,10 +151,10 @@ export function useModelActions({ ), icon: 'visTable', type: 'icon', - available: (item) => !!item.metadata?.analytics_config?.id, - enabled: (item) => item.origin_job_exists === true, + available: (item) => isDFAModelItem(item) && !!item.metadata?.analytics_config?.id, + enabled: (item) => isDFAModelItem(item) && item.origin_job_exists === true, onClick: async (item) => { - if (item.metadata?.analytics_config === undefined) return; + if (!isDFAModelItem(item) || item.metadata?.analytics_config === undefined) return; const analysisType = getAnalysisType( item.metadata?.analytics_config.analysis @@ -185,7 +186,7 @@ export function useModelActions({ icon: 'graphApp', type: 'icon', isPrimary: true, - available: (item) => !!item.metadata?.analytics_config?.id, + available: (item) => isDFAModelItem(item) && !!item.metadata?.analytics_config?.id, onClick: async (item) => { const path = await urlLocator.getUrl({ page: ML_PAGES.DATA_FRAME_ANALYTICS_MAP, @@ -216,15 +217,14 @@ export function useModelActions({ }, available: (item) => { return ( - item.model_type === TRAINED_MODEL_TYPE.PYTORCH && - !!item.state && + isNLPModelItem(item) && item.state !== MODEL_STATE.DOWNLOADING && item.state !== MODEL_STATE.NOT_DOWNLOADED ); }, onClick: async (item) => { const modelDeploymentParams = await getUserInputModelDeploymentParams( - item, + item as NLPModelItem, undefined, modelAndDeploymentIds ); @@ -277,11 +277,13 @@ export function useModelActions({ type: 'icon', isPrimary: false, available: (item) => - item.model_type === TRAINED_MODEL_TYPE.PYTORCH && + isNLPModelItem(item) && canStartStopTrainedModels && !isLoading && !!item.stats?.deployment_stats?.some((v) => v.state === DEPLOYMENT_STATE.STARTED), onClick: async (item) => { + if (!isNLPModelItem(item)) return; + const deploymentIdToUpdate = item.deployment_ids[0]; const targetDeployment = item.stats!.deployment_stats.find( @@ -345,7 +347,7 @@ export function useModelActions({ type: 'icon', isPrimary: false, available: (item) => - item.model_type === TRAINED_MODEL_TYPE.PYTORCH && + isNLPModelItem(item) && canStartStopTrainedModels && // Deployment can be either started, starting, or exist in a failed state (item.state === MODEL_STATE.STARTED || item.state === MODEL_STATE.STARTING) && @@ -358,6 +360,8 @@ export function useModelActions({ )), enabled: (item) => !isLoading, onClick: async (item) => { + if (!isNLPModelItem(item)) return; + const requireForceStop = isPopulatedObject(item.pipelines); const hasMultipleDeployments = item.deployment_ids.length > 1; @@ -423,7 +427,10 @@ export function useModelActions({ // @ts-ignore type: isMobileLayout ? 'icon' : 'button', isPrimary: true, - available: (item) => canCreateTrainedModels && item.state === MODEL_STATE.NOT_DOWNLOADED, + available: (item) => + canCreateTrainedModels && + isModelDownloadItem(item) && + item.state === MODEL_STATE.NOT_DOWNLOADED, enabled: (item) => !isLoading, onClick: async (item) => { onModelDownloadRequest(item.model_id); @@ -431,28 +438,9 @@ export function useModelActions({ }, { name: (model) => { - const hasDeployments = model.state === MODEL_STATE.STARTED; - return ( - - <> - {i18n.translate('xpack.ml.trainedModels.modelsList.deployModelActionLabel', { - defaultMessage: 'Deploy model', - })} - - - ); + return i18n.translate('xpack.ml.trainedModels.modelsList.deployModelActionLabel', { + defaultMessage: 'Deploy model', + }); }, description: i18n.translate('xpack.ml.trainedModels.modelsList.deployModelActionLabel', { defaultMessage: 'Deploy model', @@ -462,23 +450,18 @@ export function useModelActions({ type: 'icon', isPrimary: false, onClick: (model) => { - onModelDeployRequest(model); + onModelDeployRequest(model as DFAModelItem); }, available: (item) => { - return ( - isDfaTrainedModel(item) && - !isBuiltInModel(item) && - !item.putModelConfig && - canManageIngestPipelines - ); + return isDFAModelItem(item) && canManageIngestPipelines; }, enabled: (item) => { - return canStartStopTrainedModels && item.state !== MODEL_STATE.STARTED; + return canStartStopTrainedModels; }, }, { name: (model) => { - return model.state === MODEL_STATE.DOWNLOADING ? ( + return isModelDownloadItem(model) && model.state === MODEL_STATE.DOWNLOADING ? ( <> {i18n.translate('xpack.ml.trainedModels.modelsList.deleteModelActionLabel', { defaultMessage: 'Cancel', @@ -492,33 +475,33 @@ export function useModelActions({ ); }, - description: (model: ModelItem) => { - const hasDeployments = model.deployment_ids.length > 0; - const { hasInferenceServices } = model; - - if (model.state === MODEL_STATE.DOWNLOADING) { + description: (model: TrainedModelUIItem) => { + if (isModelDownloadItem(model) && model.state === MODEL_STATE.DOWNLOADING) { return i18n.translate('xpack.ml.trainedModels.modelsList.cancelDownloadActionLabel', { defaultMessage: 'Cancel download', }); - } else if (hasInferenceServices) { - return i18n.translate( - 'xpack.ml.trainedModels.modelsList.deleteDisabledWithInferenceServicesTooltip', - { - defaultMessage: 'Model is used by the _inference API', - } - ); - } else if (hasDeployments) { - return i18n.translate( - 'xpack.ml.trainedModels.modelsList.deleteDisabledWithDeploymentsTooltip', - { - defaultMessage: 'Model has started deployments', - } - ); - } else { - return i18n.translate('xpack.ml.trainedModels.modelsList.deleteModelActionLabel', { - defaultMessage: 'Delete model', - }); + } else if (isNLPModelItem(model)) { + const hasDeployments = model.deployment_ids?.length ?? 0 > 0; + const { hasInferenceServices } = model; + if (hasInferenceServices) { + return i18n.translate( + 'xpack.ml.trainedModels.modelsList.deleteDisabledWithInferenceServicesTooltip', + { + defaultMessage: 'Model is used by the _inference API', + } + ); + } else if (hasDeployments) { + return i18n.translate( + 'xpack.ml.trainedModels.modelsList.deleteDisabledWithDeploymentsTooltip', + { + defaultMessage: 'Model has started deployments', + } + ); + } } + return i18n.translate('xpack.ml.trainedModels.modelsList.deleteModelActionLabel', { + defaultMessage: 'Delete model', + }); }, 'data-test-subj': 'mlModelsTableRowDeleteAction', icon: 'trash', @@ -530,16 +513,17 @@ export function useModelActions({ onModelsDeleteRequest([model]); }, available: (item) => { - const hasZeroPipelines = Object.keys(item.pipelines ?? {}).length === 0; - return ( - canDeleteTrainedModels && - !isBuiltInModel(item) && - !item.putModelConfig && - (hasZeroPipelines || canManageIngestPipelines) - ); + if (!canDeleteTrainedModels || isBuiltInModel(item)) return false; + + if (isModelDownloadItem(item)) { + return !!item.downloadState; + } else { + const hasZeroPipelines = Object.keys(item.pipelines ?? {}).length === 0; + return hasZeroPipelines || canManageIngestPipelines; + } }, enabled: (item) => { - return item.state !== MODEL_STATE.STARTED; + return !isNLPModelItem(item) || item.state !== MODEL_STATE.STARTED; }, }, { @@ -556,9 +540,9 @@ export function useModelActions({ isPrimary: true, available: (item) => isTestable(item, true), onClick: (item) => { - if (isDfaTrainedModel(item) && !isBuiltInModel(item)) { + if (isDFAModelItem(item)) { onDfaTestAction(item); - } else { + } else if (isExistingModel(item)) { onTestAction(item); } }, @@ -579,19 +563,20 @@ export function useModelActions({ isPrimary: true, available: (item) => { return ( - item?.metadata?.analytics_config !== undefined || - (Array.isArray(item.indices) && item.indices.length > 0) + isDFAModelItem(item) || + (isExistingModel(item) && Array.isArray(item.indices) && item.indices.length > 0) ); }, onClick: async (item) => { - let indexPatterns: string[] | undefined = item?.indices - ?.map((o) => Object.keys(o)) - .flat(); + if (!isDFAModelItem(item) || !isExistingModel(item)) return; - if (item?.metadata?.analytics_config?.dest?.index !== undefined) { + let indexPatterns: string[] | undefined = item.indices; + + if (isDFAModelItem(item) && item?.metadata?.analytics_config?.dest?.index !== undefined) { const destIndex = item.metadata.analytics_config.dest?.index; indexPatterns = [destIndex]; } + const path = await urlLocator.getUrl({ page: ML_PAGES.DATA_DRIFT_CUSTOM, pageState: indexPatterns ? { comparison: indexPatterns.join(',') } : {}, @@ -612,7 +597,6 @@ export function useModelActions({ fetchModels, getUserConfirmation, getUserInputModelDeploymentParams, - isBuiltInModel, isLoading, modelAndDeploymentIds, navigateToPath, diff --git a/x-pack/plugins/ml/public/application/model_management/models_list.tsx b/x-pack/plugins/ml/public/application/model_management/models_list.tsx index d66ab1ab3db16..9547e7c6473bd 100644 --- a/x-pack/plugins/ml/public/application/model_management/models_list.tsx +++ b/x-pack/plugins/ml/public/application/model_management/models_list.tsx @@ -29,33 +29,29 @@ import type { EuiTableSelectionType } from '@elastic/eui/src/components/basic_ta import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { useTimefilter } from '@kbn/ml-date-picker'; -import { isDefined } from '@kbn/ml-is-defined'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { useStorage } from '@kbn/ml-local-storage'; -import { - BUILT_IN_MODEL_TAG, - BUILT_IN_MODEL_TYPE, - ELASTIC_MODEL_TAG, - ELASTIC_MODEL_TYPE, - ELSER_ID_V1, - MODEL_STATE, - type ModelState, -} from '@kbn/ml-trained-models-utils'; +import { ELSER_ID_V1, MODEL_STATE } from '@kbn/ml-trained-models-utils'; import type { ListingPageUrlState } from '@kbn/ml-url-state'; import { usePageUrlState } from '@kbn/ml-url-state'; import { dynamic } from '@kbn/shared-ux-utility'; -import { cloneDeep, groupBy, isEmpty, memoize } from 'lodash'; +import { cloneDeep, isEmpty } from 'lodash'; import type { FC } from 'react'; import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import useMountedState from 'react-use/lib/useMountedState'; import { ML_PAGES } from '../../../common/constants/locator'; import { ML_ELSER_CALLOUT_DISMISSED } from '../../../common/types/storage'; import type { - ModelDownloadState, - ModelPipelines, - TrainedModelConfigResponse, - TrainedModelDeploymentStatsResponse, - TrainedModelStat, + DFAModelItem, + NLPModelItem, + TrainedModelItem, + TrainedModelUIItem, +} from '../../../common/types/trained_models'; +import { + isBaseNLPModelItem, + isBuiltInModel, + isModelDownloadItem, + isNLPModelItem, } from '../../../common/types/trained_models'; import { AddInferencePipelineFlyout } from '../components/ml_inference'; import { SavedObjectsWarning } from '../components/saved_objects_warning'; @@ -70,41 +66,11 @@ import { useTrainedModelsApiService } from '../services/ml_api_service/trained_m import { useToastNotificationService } from '../services/toast_notification_service'; import { ModelsTableToConfigMapping } from './config_mapping'; import { DeleteModelsModal } from './delete_models_modal'; -import { getModelDeploymentState, getModelStateColor } from './get_model_state'; +import { getModelStateColor } from './get_model_state'; import { useModelActions } from './model_actions'; import { TestDfaModelsFlyout } from './test_dfa_models_flyout'; import { TestModelAndPipelineCreationFlyout } from './test_models'; -type Stats = Omit; - -export type ModelItem = TrainedModelConfigResponse & { - type?: string[]; - stats?: Stats & { deployment_stats: TrainedModelDeploymentStatsResponse[] }; - pipelines?: ModelPipelines['pipelines'] | null; - origin_job_exists?: boolean; - deployment_ids: string[]; - putModelConfig?: object; - state: ModelState | undefined; - /** - * Description of the current model state - */ - stateDescription?: string; - recommended?: boolean; - supported: boolean; - /** - * Model name, e.g. elser - */ - modelName?: string; - os?: string; - arch?: string; - softwareLicense?: string; - licenseUrl?: string; - downloadState?: ModelDownloadState; - disclaimer?: string; -}; - -export type ModelItemFull = Required; - interface PageUrlState { pageKey: typeof ML_PAGES.TRAINED_MODELS_MANAGE; pageUrlState: ListingPageUrlState; @@ -185,120 +151,29 @@ export const ModelsList: FC = ({ const [isInitialized, setIsInitialized] = useState(false); const [isLoading, setIsLoading] = useState(false); - const [items, setItems] = useState([]); - const [selectedModels, setSelectedModels] = useState([]); - const [modelsToDelete, setModelsToDelete] = useState([]); - const [modelToDeploy, setModelToDeploy] = useState(); + const [items, setItems] = useState([]); + const [selectedModels, setSelectedModels] = useState([]); + const [modelsToDelete, setModelsToDelete] = useState([]); + const [modelToDeploy, setModelToDeploy] = useState(); const [itemIdToExpandedRowMap, setItemIdToExpandedRowMap] = useState>( {} ); - const [modelToTest, setModelToTest] = useState(null); - const [dfaModelToTest, setDfaModelToTest] = useState(null); + const [modelToTest, setModelToTest] = useState(null); + const [dfaModelToTest, setDfaModelToTest] = useState(null); const [isAddModelFlyoutVisible, setIsAddModelFlyoutVisible] = useState(false); - const isBuiltInModel = useCallback( - (item: ModelItem) => item.tags.includes(BUILT_IN_MODEL_TAG), - [] - ); - - const isElasticModel = useCallback( - (item: ModelItem) => item.tags.includes(ELASTIC_MODEL_TAG), - [] - ); - // List of downloaded/existing models - const existingModels = useMemo(() => { - return items.filter((i) => !i.putModelConfig); + const existingModels = useMemo>(() => { + return items.filter((i): i is NLPModelItem | DFAModelItem => !isModelDownloadItem(i)); }, [items]); - /** - * Fetch of model definitions available for download needs to happen only once - */ - const getTrainedModelDownloads = memoize(trainedModelsApiService.getTrainedModelDownloads); - /** * Fetches trained models. */ const fetchModelsData = useCallback(async () => { setIsLoading(true); try { - const response = await trainedModelsApiService.getTrainedModels(undefined, { - with_pipelines: true, - with_indices: true, - }); - - const newItems: ModelItem[] = []; - const expandedItemsToRefresh = []; - - for (const model of response) { - const tableItem: ModelItem = { - ...model, - // Extract model types - ...(typeof model.inference_config === 'object' - ? { - type: [ - model.model_type, - ...Object.keys(model.inference_config), - ...(isBuiltInModel(model as ModelItem) ? [BUILT_IN_MODEL_TYPE] : []), - ...(isElasticModel(model as ModelItem) ? [ELASTIC_MODEL_TYPE] : []), - ], - } - : {}), - } as ModelItem; - newItems.push(tableItem); - - if (itemIdToExpandedRowMap[model.model_id]) { - expandedItemsToRefresh.push(tableItem); - } - } - - // Need to fetch stats for all models to enable/disable actions - // TODO combine fetching models definitions and stats into a single function - await fetchModelsStats(newItems); - - let resultItems = newItems; - // don't add any of the built-in models (e.g. elser) if NLP is disabled - if (isNLPEnabled) { - const idMap = new Map( - resultItems.map((model) => [model.model_id, model]) - ); - /** - * Fetches model definitions available for download - */ - const forDownload = await getTrainedModelDownloads(); - - const notDownloaded: ModelItem[] = forDownload - .filter(({ model_id: modelId, hidden, recommended, supported, disclaimer }) => { - if (idMap.has(modelId)) { - const model = idMap.get(modelId)!; - if (recommended) { - model.recommended = true; - } - model.supported = supported; - model.disclaimer = disclaimer; - } - return !idMap.has(modelId) && !hidden; - }) - .map((modelDefinition) => { - return { - model_id: modelDefinition.model_id, - type: modelDefinition.type, - tags: modelDefinition.type?.includes(ELASTIC_MODEL_TAG) ? [ELASTIC_MODEL_TAG] : [], - putModelConfig: modelDefinition.config, - description: modelDefinition.description, - state: MODEL_STATE.NOT_DOWNLOADED, - recommended: !!modelDefinition.recommended, - modelName: modelDefinition.modelName, - os: modelDefinition.os, - arch: modelDefinition.arch, - softwareLicense: modelDefinition.license, - licenseUrl: modelDefinition.licenseUrl, - supported: modelDefinition.supported, - disclaimer: modelDefinition.disclaimer, - } as ModelItem; - }); - resultItems = [...resultItems, ...notDownloaded]; - } + const resultItems = await trainedModelsApiService.getTrainedModelsList(); setItems((prevItems) => { // Need to merge existing items with new items @@ -307,7 +182,7 @@ export const ModelsList: FC = ({ const prevItem = prevItems.find((i) => i.model_id === item.model_id); return { ...item, - ...(prevItem?.state === MODEL_STATE.DOWNLOADING + ...(isBaseNLPModelItem(prevItem) && prevItem?.state === MODEL_STATE.DOWNLOADING ? { state: prevItem.state, downloadState: prevItem.downloadState, @@ -322,7 +197,7 @@ export const ModelsList: FC = ({ return Object.fromEntries( Object.keys(prev).map((modelId) => { const item = resultItems.find((i) => i.model_id === modelId); - return item ? [modelId, ] : []; + return item ? [modelId, ] : []; }) ); }); @@ -365,51 +240,6 @@ export const ModelsList: FC = ({ }; }, [existingModels]); - /** - * Fetches models stats and update the original object - */ - const fetchModelsStats = useCallback(async (models: ModelItem[]) => { - try { - if (models) { - const { trained_model_stats: modelsStatsResponse } = - await trainedModelsApiService.getTrainedModelStats(); - - const groupByModelId = groupBy(modelsStatsResponse, 'model_id'); - - models.forEach((model) => { - const modelStats = groupByModelId[model.model_id]; - model.stats = { - ...(model.stats ?? {}), - ...modelStats[0], - deployment_stats: modelStats.map((d) => d.deployment_stats).filter(isDefined), - }; - - // Extract deployment ids from deployment stats - model.deployment_ids = modelStats - .map((v) => v.deployment_stats?.deployment_id) - .filter(isDefined); - - model.state = getModelDeploymentState(model); - model.stateDescription = model.stats.deployment_stats.reduce((acc, c) => { - if (acc) return acc; - return c.reason ?? ''; - }, ''); - }); - } - - return true; - } catch (error) { - displayErrorToast( - error, - i18n.translate('xpack.ml.trainedModels.modelsList.fetchModelStatsErrorMessage', { - defaultMessage: 'Error loading trained models statistics', - }) - ); - return false; - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - const downLoadStatusFetchInProgress = useRef(false); const abortedDownload = useRef(new Set()); @@ -432,7 +262,7 @@ export const ModelsList: FC = ({ if (isMounted()) { setItems((prevItems) => { return prevItems.map((item) => { - if (!item.type?.includes('pytorch')) { + if (!isBaseNLPModelItem(item)) { return item; } const newItem = cloneDeep(item); @@ -493,7 +323,9 @@ export const ModelsList: FC = ({ if (type) { acc.add(type); } - acc.add(item.model_type); + if (item.model_type) { + acc.add(item.model_type); + } return acc; }, new Set()); return [...result] @@ -504,15 +336,15 @@ export const ModelsList: FC = ({ })); }, [existingModels]); - const modelAndDeploymentIds = useMemo( - () => [ + const modelAndDeploymentIds = useMemo(() => { + const nlpModels = existingModels.filter(isNLPModelItem); + return [ ...new Set([ - ...existingModels.flatMap((v) => v.deployment_ids), - ...existingModels.map((i) => i.model_id), + ...nlpModels.flatMap((v) => v.deployment_ids), + ...nlpModels.map((i) => i.model_id), ]), - ], - [existingModels] - ); + ]; + }, [existingModels]); const onModelDownloadRequest = useCallback( async (modelId: string) => { @@ -550,22 +382,22 @@ export const ModelsList: FC = ({ onModelDownloadRequest, }); - const toggleDetails = async (item: ModelItem) => { + const toggleDetails = async (item: TrainedModelUIItem) => { const itemIdToExpandedRowMapValues = { ...itemIdToExpandedRowMap }; if (itemIdToExpandedRowMapValues[item.model_id]) { delete itemIdToExpandedRowMapValues[item.model_id]; } else { - itemIdToExpandedRowMapValues[item.model_id] = ; + itemIdToExpandedRowMapValues[item.model_id] = ; } setItemIdToExpandedRowMap(itemIdToExpandedRowMapValues); }; - const columns: Array> = [ + const columns: Array> = [ { isExpander: true, align: 'center', - render: (item: ModelItem) => { - if (!item.stats) { + render: (item: TrainedModelUIItem) => { + if (isModelDownloadItem(item) || !item.stats) { return null; } return ( @@ -588,38 +420,38 @@ export const ModelsList: FC = ({ }, { name: modelIdColumnName, - sortable: ({ model_id: modelId }: ModelItem) => modelId, + sortable: ({ model_id: modelId }: TrainedModelUIItem) => modelId, truncateText: false, textOnly: false, 'data-test-subj': 'mlModelsTableColumnId', - render: ({ - description, - model_id: modelId, - recommended, - supported, - type, - disclaimer, - }: ModelItem) => { + render: (item: TrainedModelUIItem) => { + const { description, model_id: modelId, type } = item; + const isTechPreview = description?.includes('(Tech Preview)'); let descriptionText = description?.replace('(Tech Preview)', ''); - if (disclaimer) { - descriptionText += '. ' + disclaimer; - } + let tooltipContent = null; - const tooltipContent = - supported === false ? ( - - ) : recommended === false ? ( - - ) : null; + if (isBaseNLPModelItem(item)) { + const { disclaimer, recommended, supported } = item; + if (disclaimer) { + descriptionText += '. ' + disclaimer; + } + + tooltipContent = + supported === false ? ( + + ) : recommended === false ? ( + + ) : null; + } return ( @@ -675,7 +507,10 @@ export const ModelsList: FC = ({ }), truncateText: false, width: '150px', - render: ({ state, downloadState }: ModelItem) => { + render: (item: TrainedModelUIItem) => { + if (!isBaseNLPModelItem(item)) return null; + + const { state, downloadState } = item; const config = getModelStateColor(state); if (!config) return null; @@ -776,7 +611,7 @@ export const ModelsList: FC = ({ const isSelectionAllowed = canDeleteTrainedModels; - const selection: EuiTableSelectionType | undefined = isSelectionAllowed + const selection: EuiTableSelectionType | undefined = isSelectionAllowed ? { selectableMessage: (selectable, item) => { if (selectable) { @@ -784,31 +619,28 @@ export const ModelsList: FC = ({ defaultMessage: 'Select a model', }); } - if (isPopulatedObject(item.pipelines)) { + // TODO support multiple model downloads with selection + if (!isModelDownloadItem(item) && isPopulatedObject(item.pipelines)) { return i18n.translate('xpack.ml.trainedModels.modelsList.disableSelectableMessage', { defaultMessage: 'Model has associated pipelines', }); } - if (isBuiltInModel(item)) { return i18n.translate('xpack.ml.trainedModels.modelsList.builtInModelMessage', { defaultMessage: 'Built-in model', }); } - return ''; }, selectable: (item) => - !isPopulatedObject(item.pipelines) && - !isBuiltInModel(item) && - !(isElasticModel(item) && !item.state), + !isModelDownloadItem(item) && !isPopulatedObject(item.pipelines) && !isBuiltInModel(item), onSelectionChange: (selectedItems) => { setSelectedModels(selectedItems); }, } : undefined; - const { onTableChange, pagination, sorting } = useTableSettings( + const { onTableChange, pagination, sorting } = useTableSettings( items.length, pageState, updatePageState, @@ -847,7 +679,7 @@ export const ModelsList: FC = ({ return items; } else { // by default show only deployed models or recommended for download - return items.filter((item) => item.create_time || item.recommended); + return items.filter((item) => !isModelDownloadItem(item) || item.recommended); } }, [items, pageState.showAll]); @@ -896,7 +728,7 @@ export const ModelsList: FC = ({
    - + tableLayout={'auto'} responsiveBreakpoint={'xl'} allowNeutralSort={false} @@ -952,7 +784,7 @@ export const ModelsList: FC = ({ { modelsToDelete.forEach((model) => { - if (model.state === MODEL_STATE.DOWNLOADING) { + if (isBaseNLPModelItem(model) && model.state === MODEL_STATE.DOWNLOADING) { abortedDownload.current.add(model.model_id); } }); @@ -996,7 +828,7 @@ export const ModelsList: FC = ({ ) : null} {isAddModelFlyoutVisible ? ( i.state === MODEL_STATE.NOT_DOWNLOADED)} + modelDownloads={items.filter(isModelDownloadItem)} onClose={setIsAddModelFlyoutVisible.bind(null, false)} onSubmit={(modelId) => { onModelDownloadRequest(modelId); diff --git a/x-pack/plugins/ml/public/application/model_management/pipelines/pipelines.tsx b/x-pack/plugins/ml/public/application/model_management/pipelines/pipelines.tsx index d144bf2aaf558..384a0736ed6f2 100644 --- a/x-pack/plugins/ml/public/application/model_management/pipelines/pipelines.tsx +++ b/x-pack/plugins/ml/public/application/model_management/pipelines/pipelines.tsx @@ -17,14 +17,14 @@ import { EuiAccordion, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import { useMlKibana } from '../../contexts/kibana'; -import type { ModelItem } from '../models_list'; import { ProcessorsStats } from './expanded_row'; -export type IngestStatsResponse = Exclude['ingest']; +export type IngestStatsResponse = Exclude['ingest']; interface ModelPipelinesProps { - pipelines: ModelItem['pipelines']; + pipelines: TrainedModelItem['pipelines']; ingestStats: IngestStatsResponse; } diff --git a/x-pack/plugins/ml/public/application/model_management/test_dfa_models_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/test_dfa_models_flyout.tsx index 86ddd16e620ad..4593413154bd5 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_dfa_models_flyout.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_dfa_models_flyout.tsx @@ -9,14 +9,13 @@ import type { FC } from 'react'; import React, { useMemo } from 'react'; import { EuiFlyout, EuiFlyoutBody, EuiFlyoutHeader, EuiSpacer, EuiTitle } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; - +import type { DFAModelItem } from '../../../common/types/trained_models'; import { TestPipeline } from '../components/ml_inference/components/test_pipeline'; import { getInitialState } from '../components/ml_inference/state'; -import type { ModelItem } from './models_list'; import { TEST_PIPELINE_MODE } from '../components/ml_inference/types'; interface Props { - model: ModelItem; + model: DFAModelItem; onClose: () => void; } diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/index.ts b/x-pack/plugins/ml/public/application/model_management/test_models/index.ts index 4b238f477092e..209704581f489 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/index.ts +++ b/x-pack/plugins/ml/public/application/model_management/test_models/index.ts @@ -6,4 +6,4 @@ */ export { TestModelAndPipelineCreationFlyout } from './test_model_and_pipeline_creation_flyout'; -export { isTestable, isDfaTrainedModel } from './utils'; +export { isTestable } from './utils'; diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx index b8bc2d706b8c0..3b8d3cc7bdea9 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/test_flyout.tsx @@ -7,15 +7,13 @@ import type { FC } from 'react'; import React from 'react'; - import { FormattedMessage } from '@kbn/i18n-react'; import { EuiFlyout, EuiFlyoutBody, EuiFlyoutHeader, EuiSpacer, EuiTitle } from '@elastic/eui'; - -import { type ModelItem } from '../models_list'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import { TestTrainedModelContent } from './test_trained_model_content'; interface Props { - model: ModelItem; + model: TrainedModelItem; onClose: () => void; } export const TestTrainedModelFlyout: FC = ({ model, onClose }) => ( diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/test_model_and_pipeline_creation_flyout.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/test_model_and_pipeline_creation_flyout.tsx index 240c2545f3d8e..f78f12cf88211 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/test_model_and_pipeline_creation_flyout.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/test_model_and_pipeline_creation_flyout.tsx @@ -7,17 +7,16 @@ import type { FC } from 'react'; import React, { useState } from 'react'; - +import type { TrainedModelItem } from '../../../../common/types/trained_models'; import { type TestTrainedModelsContextType, TestTrainedModelsContext, } from './test_trained_models_context'; -import type { ModelItem } from '../models_list'; import { TestTrainedModelFlyout } from './test_flyout'; import { CreatePipelineForModelFlyout } from '../create_pipeline_for_model/create_pipeline_for_model_flyout'; interface Props { - model: ModelItem; + model: TrainedModelItem; onClose: (refreshList?: boolean) => void; } export const TestModelAndPipelineCreationFlyout: FC = ({ model, onClose }) => { diff --git a/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_model_content.tsx b/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_model_content.tsx index da4c496700687..3c829c8f7cd49 100644 --- a/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_model_content.tsx +++ b/x-pack/plugins/ml/public/application/model_management/test_models/test_trained_model_content.tsx @@ -12,14 +12,15 @@ import { SUPPORTED_PYTORCH_TASKS } from '@kbn/ml-trained-models-utils'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiFormRow, EuiSelect, EuiSpacer, EuiTab, EuiTabs, useEuiPaddingSize } from '@elastic/eui'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; +import type { TrainedModelItem } from '../../../../common/types/trained_models'; +import { isNLPModelItem } from '../../../../common/types/trained_models'; import { SelectedModel } from './selected_model'; -import { type ModelItem } from '../models_list'; import { INPUT_TYPE } from './models/inference_base'; import { useTestTrainedModelsContext } from './test_trained_models_context'; import { type InferecePipelineCreationState } from '../create_pipeline_for_model/state'; interface ContentProps { - model: ModelItem; + model: TrainedModelItem; handlePipelineConfigUpdate?: (configUpdate: Partial) => void; externalPipelineConfig?: estypes.IngestPipeline; } @@ -29,7 +30,9 @@ export const TestTrainedModelContent: FC = ({ handlePipelineConfigUpdate, externalPipelineConfig, }) => { - const [deploymentId, setDeploymentId] = useState(model.deployment_ids[0]); + const [deploymentId, setDeploymentId] = useState( + isNLPModelItem(model) ? model.deployment_ids[0] : model.model_id + ); const mediumPadding = useEuiPaddingSize('m'); const [inputType, setInputType] = useState(INPUT_TYPE.TEXT); @@ -46,8 +49,7 @@ export const TestTrainedModelContent: FC = ({ }, [model, createPipelineFlyoutOpen]); return ( <> - {' '} - {model.deployment_ids.length > 1 ? ( + {isNLPModelItem(model) && model.deployment_ids.length > 1 ? ( <> ({ + path: `${ML_INTERNAL_BASE_PATH}/trained_models_list`, + method: 'GET', + version: '1', + }); + }, + /** * Fetches usage information for trained inference models. * @param modelId - Model ID, collection of Model IDs or Model ID pattern. diff --git a/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts b/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts index e720f12fa4dd5..04a14c7f235ff 100644 --- a/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts +++ b/x-pack/plugins/ml/server/models/data_frame_analytics/analytics_manager.ts @@ -51,7 +51,12 @@ export class AnalyticsManager { private readonly _enabledFeatures: MlFeatures, cloud: CloudSetup ) { - this._modelsProvider = modelsProvider(this._client, this._mlClient, cloud); + this._modelsProvider = modelsProvider( + this._client, + this._mlClient, + cloud, + this._enabledFeatures + ); } private async initData() { diff --git a/x-pack/plugins/ml/public/application/model_management/get_model_state.test.tsx b/x-pack/plugins/ml/server/models/model_management/get_model_state.test.tsx similarity index 94% rename from x-pack/plugins/ml/public/application/model_management/get_model_state.test.tsx rename to x-pack/plugins/ml/server/models/model_management/get_model_state.test.tsx index 1431b2da0439c..16c30395d1b15 100644 --- a/x-pack/plugins/ml/public/application/model_management/get_model_state.test.tsx +++ b/x-pack/plugins/ml/server/models/model_management/get_model_state.test.tsx @@ -5,9 +5,9 @@ * 2.0. */ -import { getModelDeploymentState } from './get_model_state'; import { MODEL_STATE } from '@kbn/ml-trained-models-utils'; -import type { ModelItem } from './models_list'; +import type { NLPModelItem } from '../../../common/types/trained_models'; +import { getModelDeploymentState } from './get_model_state'; describe('getModelDeploymentState', () => { it('returns STARTED if any deployment is in STARTED state', () => { @@ -37,7 +37,7 @@ describe('getModelDeploymentState', () => { }, ], }, - } as unknown as ModelItem; + } as unknown as NLPModelItem; const result = getModelDeploymentState(model); expect(result).toEqual(MODEL_STATE.STARTED); }); @@ -69,7 +69,7 @@ describe('getModelDeploymentState', () => { }, ], }, - } as unknown as ModelItem; + } as unknown as NLPModelItem; const result = getModelDeploymentState(model); expect(result).toEqual(MODEL_STATE.STARTING); }); @@ -96,7 +96,7 @@ describe('getModelDeploymentState', () => { }, ], }, - } as unknown as ModelItem; + } as unknown as NLPModelItem; const result = getModelDeploymentState(model); expect(result).toEqual(MODEL_STATE.STOPPING); }); @@ -112,7 +112,7 @@ describe('getModelDeploymentState', () => { deployment_stats: [], }, - } as unknown as ModelItem; + } as unknown as NLPModelItem; const result = getModelDeploymentState(model); expect(result).toEqual(undefined); }); diff --git a/x-pack/plugins/ml/server/models/model_management/get_model_state.ts b/x-pack/plugins/ml/server/models/model_management/get_model_state.ts new file mode 100644 index 0000000000000..2ee2bf8cb4532 --- /dev/null +++ b/x-pack/plugins/ml/server/models/model_management/get_model_state.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 { DEPLOYMENT_STATE, MODEL_STATE, type ModelState } from '@kbn/ml-trained-models-utils'; +import type { NLPModelItem } from '../../../common/types/trained_models'; + +/** + * Resolves result model state based on the state of each deployment. + * + * If at least one deployment is in the STARTED state, the model state is STARTED. + * Then if none of the deployments are in the STARTED state, but at least one is in the STARTING state, the model state is STARTING. + * If all deployments are in the STOPPING state, the model state is STOPPING. + */ +export const getModelDeploymentState = (model: NLPModelItem): ModelState | undefined => { + if (!model.stats?.deployment_stats?.length) return; + + if (model.stats?.deployment_stats?.some((v) => v.state === DEPLOYMENT_STATE.STARTED)) { + return MODEL_STATE.STARTED; + } + if (model.stats?.deployment_stats?.some((v) => v.state === DEPLOYMENT_STATE.STARTING)) { + return MODEL_STATE.STARTING; + } + if (model.stats?.deployment_stats?.every((v) => v.state === DEPLOYMENT_STATE.STOPPING)) { + return MODEL_STATE.STOPPING; + } +}; diff --git a/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts b/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts index 0b9b93720234d..0a73dfa3053db 100644 --- a/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts +++ b/x-pack/plugins/ml/server/models/model_management/model_provider.test.ts @@ -6,45 +6,54 @@ */ import { modelsProvider } from './models_provider'; -import { type IScopedClusterClient } from '@kbn/core/server'; import { cloudMock } from '@kbn/cloud-plugin/server/mocks'; import type { MlClient } from '../../lib/ml_client'; import downloadTasksResponse from './__mocks__/mock_download_tasks.json'; +import type { MlFeatures } from '../../../common/constants/app'; +import { mlLog } from '../../lib/log'; +import { errors } from '@elastic/elasticsearch'; +import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; +import type { ExistingModelBase } from '../../../common/types/trained_models'; +import type { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; + +jest.mock('../../lib/log'); describe('modelsProvider', () => { - const mockClient = { - asInternalUser: { - transport: { - request: jest.fn().mockResolvedValue({ - _nodes: { - total: 1, - successful: 1, - failed: 0, - }, - cluster_name: 'default', - nodes: { - yYmqBqjpQG2rXsmMSPb9pQ: { - name: 'node-0', - roles: ['ml'], - attributes: {}, - os: { - name: 'Linux', - arch: 'amd64', - }, - }, - }, - }), - }, - tasks: { - list: jest.fn().mockResolvedValue({ tasks: [] }), + const mockClient = elasticsearchClientMock.createScopedClusterClient(); + + mockClient.asInternalUser.transport.request.mockResolvedValue({ + _nodes: { + total: 1, + successful: 1, + failed: 0, + }, + cluster_name: 'default', + nodes: { + yYmqBqjpQG2rXsmMSPb9pQ: { + name: 'node-0', + roles: ['ml'], + attributes: {}, + os: { + name: 'Linux', + arch: 'amd64', + }, }, }, - } as unknown as jest.Mocked; + }); + + mockClient.asInternalUser.tasks.list.mockResolvedValue({ tasks: [] }); const mockMlClient = {} as unknown as jest.Mocked; const mockCloud = cloudMock.createSetup(); - const modelService = modelsProvider(mockClient, mockMlClient, mockCloud); + + const enabledMlFeatures: MlFeatures = { + ad: false, + dfa: true, + nlp: true, + }; + + const modelService = modelsProvider(mockClient, mockMlClient, mockCloud, enabledMlFeatures); afterEach(() => { jest.clearAllMocks(); @@ -122,7 +131,7 @@ describe('modelsProvider', () => { test('provides a list of models with default model as recommended', async () => { mockCloud.cloudId = undefined; - (mockClient.asInternalUser.transport.request as jest.Mock).mockResolvedValueOnce({ + mockClient.asInternalUser.transport.request.mockResolvedValueOnce({ _nodes: { total: 1, successful: 1, @@ -218,7 +227,7 @@ describe('modelsProvider', () => { test('provides a default version if there is no recommended', async () => { mockCloud.cloudId = undefined; - (mockClient.asInternalUser.transport.request as jest.Mock).mockResolvedValueOnce({ + mockClient.asInternalUser.transport.request.mockResolvedValueOnce({ _nodes: { total: 1, successful: 1, @@ -261,7 +270,7 @@ describe('modelsProvider', () => { test('provides a default version if there is no recommended', async () => { mockCloud.cloudId = undefined; - (mockClient.asInternalUser.transport.request as jest.Mock).mockResolvedValueOnce({ + mockClient.asInternalUser.transport.request.mockResolvedValueOnce({ _nodes: { total: 1, successful: 1, @@ -292,9 +301,7 @@ describe('modelsProvider', () => { expect(result).toEqual({}); }); test('provides download status for all models', async () => { - (mockClient.asInternalUser.tasks.list as jest.Mock).mockResolvedValueOnce( - downloadTasksResponse - ); + mockClient.asInternalUser.tasks.list.mockResolvedValueOnce(downloadTasksResponse); const result = await modelService.getModelsDownloadStatus(); expect(result).toEqual({ '.elser_model_2': { downloaded_parts: 0, total_parts: 418 }, @@ -302,4 +309,124 @@ describe('modelsProvider', () => { }); }); }); + + describe('#assignInferenceEndpoints', () => { + let trainedModels: ExistingModelBase[]; + + const inferenceServices = [ + { + service: 'elser', + model_id: 'elser_test', + service_settings: { model_id: '.elser_model_2' }, + }, + { service: 'open_api_01', service_settings: {} }, + ] as InferenceInferenceEndpointInfo[]; + + beforeEach(() => { + trainedModels = [ + { model_id: '.elser_model_2' }, + { model_id: 'model2' }, + ] as ExistingModelBase[]; + + mockClient.asInternalUser.inference.get.mockResolvedValue({ + endpoints: inferenceServices, + }); + + jest.clearAllMocks(); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('when the user has required privileges', () => { + beforeEach(() => { + mockClient.asCurrentUser.inference.get.mockResolvedValue({ + endpoints: inferenceServices, + }); + }); + + test('should populate inference services for trained models', async () => { + // act + await modelService.assignInferenceEndpoints(trainedModels, false); + + // assert + expect(mockClient.asCurrentUser.inference.get).toHaveBeenCalledWith({ + inference_id: '_all', + }); + + expect(mockClient.asInternalUser.inference.get).not.toHaveBeenCalled(); + + expect(trainedModels[0].inference_apis).toEqual([ + { + model_id: 'elser_test', + service: 'elser', + service_settings: { model_id: '.elser_model_2' }, + }, + ]); + expect(trainedModels[0].hasInferenceServices).toBe(true); + + expect(trainedModels[1].inference_apis).toEqual(undefined); + expect(trainedModels[1].hasInferenceServices).toBe(false); + + expect(mlLog.error).not.toHaveBeenCalled(); + }); + }); + + describe('when the user does not have required privileges', () => { + beforeEach(() => { + mockClient.asCurrentUser.inference.get.mockRejectedValue( + new errors.ResponseError( + elasticsearchClientMock.createApiResponse({ + statusCode: 403, + body: { message: 'not allowed' }, + }) + ) + ); + }); + + test('should retry with internal user if an error occurs', async () => { + await modelService.assignInferenceEndpoints(trainedModels, false); + + // assert + expect(mockClient.asCurrentUser.inference.get).toHaveBeenCalledWith({ + inference_id: '_all', + }); + + expect(mockClient.asInternalUser.inference.get).toHaveBeenCalledWith({ + inference_id: '_all', + }); + + expect(trainedModels[0].inference_apis).toEqual(undefined); + expect(trainedModels[0].hasInferenceServices).toBe(true); + + expect(trainedModels[1].inference_apis).toEqual(undefined); + expect(trainedModels[1].hasInferenceServices).toBe(false); + + expect(mlLog.error).not.toHaveBeenCalled(); + }); + }); + + test('should not retry on any other error than 403', async () => { + const notFoundError = new errors.ResponseError( + elasticsearchClientMock.createApiResponse({ + statusCode: 404, + body: { message: 'not found' }, + }) + ); + + mockClient.asCurrentUser.inference.get.mockRejectedValue(notFoundError); + + await modelService.assignInferenceEndpoints(trainedModels, false); + + // assert + expect(mockClient.asCurrentUser.inference.get).toHaveBeenCalledWith({ + inference_id: '_all', + }); + + expect(mockClient.asInternalUser.inference.get).not.toHaveBeenCalled(); + + expect(mlLog.error).toHaveBeenCalledWith(notFoundError); + }); + }); }); diff --git a/x-pack/plugins/ml/server/models/model_management/models_provider.ts b/x-pack/plugins/ml/server/models/model_management/models_provider.ts index 1c175cee26d14..0f302363f66ea 100644 --- a/x-pack/plugins/ml/server/models/model_management/models_provider.ts +++ b/x-pack/plugins/ml/server/models/model_management/models_provider.ts @@ -8,10 +8,11 @@ import Boom from '@hapi/boom'; import type { IScopedClusterClient } from '@kbn/core/server'; import { JOB_MAP_NODE_TYPES, type MapElements } from '@kbn/ml-data-frame-analytics-utils'; -import { flatten } from 'lodash'; +import { flatten, groupBy, isEmpty } from 'lodash'; import type { InferenceInferenceEndpoint, InferenceTaskType, + MlGetTrainedModelsRequest, TasksTaskInfo, TransformGetTransformTransformSummary, } from '@elastic/elasticsearch/lib/api/types'; @@ -24,22 +25,50 @@ import type { } from '@elastic/elasticsearch/lib/api/types'; import { ELASTIC_MODEL_DEFINITIONS, + ELASTIC_MODEL_TAG, + MODEL_STATE, type GetModelDownloadConfigOptions, type ModelDefinitionResponse, + ELASTIC_MODEL_TYPE, + BUILT_IN_MODEL_TYPE, } from '@kbn/ml-trained-models-utils'; import type { CloudSetup } from '@kbn/cloud-plugin/server'; import type { ElasticCuratedModelName } from '@kbn/ml-trained-models-utils'; -import type { ModelDownloadState, PipelineDefinition } from '../../../common/types/trained_models'; +import { isDefined } from '@kbn/ml-is-defined'; +import { DEFAULT_TRAINED_MODELS_PAGE_SIZE } from '../../../common/constants/trained_models'; +import type { MlFeatures } from '../../../common/constants/app'; +import type { + DFAModelItem, + ExistingModelBase, + ModelDownloadItem, + NLPModelItem, + TrainedModelItem, + TrainedModelUIItem, + TrainedModelWithPipelines, +} from '../../../common/types/trained_models'; +import { isBuiltInModel, isExistingModel } from '../../../common/types/trained_models'; +import { + isDFAModelItem, + isElasticModel, + isNLPModelItem, + type ModelDownloadState, + type PipelineDefinition, + type TrainedModelConfigResponse, +} from '../../../common/types/trained_models'; import type { MlClient } from '../../lib/ml_client'; import type { MLSavedObjectService } from '../../saved_objects'; +import { filterForEnabledFeatureModels } from '../../routes/trained_models'; +import { mlLog } from '../../lib/log'; +import { getModelDeploymentState } from './get_model_state'; export type ModelService = ReturnType; export const modelsProvider = ( client: IScopedClusterClient, mlClient: MlClient, - cloud: CloudSetup -) => new ModelsProvider(client, mlClient, cloud); + cloud: CloudSetup, + enabledFeatures: MlFeatures +) => new ModelsProvider(client, mlClient, cloud, enabledFeatures); interface ModelMapResult { ingestPipelines: Map | null>; @@ -66,7 +95,8 @@ export class ModelsProvider { constructor( private _client: IScopedClusterClient, private _mlClient: MlClient, - private _cloud: CloudSetup + private _cloud: CloudSetup, + private _enabledFeatures: MlFeatures ) {} private async initTransformData() { @@ -110,6 +140,291 @@ export class ModelsProvider { return `${elementOriginalId}-${nodeType}`; } + /** + * Assigns inference endpoints to trained models + * @param trainedModels + * @param asInternal + */ + async assignInferenceEndpoints(trainedModels: ExistingModelBase[], asInternal: boolean = false) { + const esClient = asInternal ? this._client.asInternalUser : this._client.asCurrentUser; + + try { + // Check if model is used by an inference service + const { endpoints } = await esClient.inference.get({ + inference_id: '_all', + }); + + const inferenceAPIMap = groupBy( + endpoints, + (endpoint) => endpoint.service === 'elser' && endpoint.service_settings.model_id + ); + + for (const model of trainedModels) { + const inferenceApis = inferenceAPIMap[model.model_id]; + model.hasInferenceServices = !!inferenceApis; + if (model.hasInferenceServices && !asInternal) { + model.inference_apis = inferenceApis; + } + } + } catch (e) { + if (!asInternal && e.statusCode === 403) { + // retry with internal user to get an indicator if models has associated inference services, without mentioning the names + await this.assignInferenceEndpoints(trainedModels, true); + } else { + mlLog.error(e); + } + } + } + + /** + * Assigns trained model stats to trained models + * @param trainedModels + */ + async assignModelStats(trainedModels: ExistingModelBase[]): Promise { + const { trained_model_stats: modelsStatsResponse } = await this._mlClient.getTrainedModelsStats( + { + size: DEFAULT_TRAINED_MODELS_PAGE_SIZE, + } + ); + + const groupByModelId = groupBy(modelsStatsResponse, 'model_id'); + + return trainedModels.map((model) => { + const modelStats = groupByModelId[model.model_id]; + + const completeModelItem: TrainedModelItem = { + ...model, + // @ts-ignore FIXME: fix modelStats type + stats: { + ...modelStats[0], + ...(isNLPModelItem(model) + ? { deployment_stats: modelStats.map((d) => d.deployment_stats).filter(isDefined) } + : {}), + }, + }; + + if (isNLPModelItem(completeModelItem)) { + // Extract deployment ids from deployment stats + completeModelItem.deployment_ids = modelStats + .map((v) => v.deployment_stats?.deployment_id) + .filter(isDefined); + + completeModelItem.state = getModelDeploymentState(completeModelItem); + + completeModelItem.stateDescription = completeModelItem.stats.deployment_stats.reduce( + (acc, c) => { + if (acc) return acc; + return c.reason ?? ''; + }, + '' + ); + } + + return completeModelItem; + }); + } + + /** + * Merges the list of models with the list of models available for download. + */ + async includeModelDownloads(resultItems: TrainedModelUIItem[]): Promise { + const idMap = new Map( + resultItems.map((model) => [model.model_id, model]) + ); + /** + * Fetches model definitions available for download + */ + const forDownload = await this.getModelDownloads(); + + const notDownloaded: TrainedModelUIItem[] = forDownload + .filter(({ model_id: modelId, hidden, recommended, supported, disclaimer }) => { + if (idMap.has(modelId)) { + const model = idMap.get(modelId)! as NLPModelItem; + if (recommended) { + model.recommended = true; + } + model.supported = supported; + model.disclaimer = disclaimer; + } + return !idMap.has(modelId) && !hidden; + }) + .map((modelDefinition) => { + return { + model_id: modelDefinition.model_id, + type: modelDefinition.type, + tags: modelDefinition.type?.includes(ELASTIC_MODEL_TAG) ? [ELASTIC_MODEL_TAG] : [], + putModelConfig: modelDefinition.config, + description: modelDefinition.description, + state: MODEL_STATE.NOT_DOWNLOADED, + recommended: !!modelDefinition.recommended, + modelName: modelDefinition.modelName, + os: modelDefinition.os, + arch: modelDefinition.arch, + softwareLicense: modelDefinition.license, + licenseUrl: modelDefinition.licenseUrl, + supported: modelDefinition.supported, + disclaimer: modelDefinition.disclaimer, + } as ModelDownloadItem; + }); + + // show model downloads first + return [...notDownloaded, ...resultItems]; + } + + /** + * Assigns pipelines to trained models + */ + async assignPipelines(trainedModels: TrainedModelItem[]): Promise { + // For each model create a dict with model aliases and deployment ids for faster lookup + const modelToAliasesAndDeployments: Record> = Object.fromEntries( + trainedModels.map((model) => [ + model.model_id, + new Set([ + model.model_id, + ...(model.metadata?.model_aliases ?? []), + ...(isNLPModelItem(model) ? model.deployment_ids : []), + ]), + ]) + ); + + // Set of unique model ids, aliases, and deployment ids. + const modelIdsAndAliases: string[] = Object.values(modelToAliasesAndDeployments).flatMap((s) => + Array.from(s) + ); + + try { + // Get all pipelines first in one call: + const modelPipelinesMap = await this.getModelsPipelines(modelIdsAndAliases); + + trainedModels.forEach((model) => { + const modelAliasesAndDeployments = modelToAliasesAndDeployments[model.model_id]; + // Check model pipelines map for any pipelines associated with the model + for (const [modelEntityId, pipelines] of modelPipelinesMap) { + if (modelAliasesAndDeployments.has(modelEntityId)) { + // Merge pipeline definitions into the model + model.pipelines = model.pipelines + ? Object.assign(model.pipelines, pipelines) + : pipelines; + } + } + }); + } catch (e) { + // the user might not have required permissions to fetch pipelines + // log the error to the debug log as this might be a common situation and + // we don't need to fill kibana's log with these messages. + mlLog.debug(e); + } + } + + /** + * Assigns indices to trained models + */ + async assignModelIndices(trainedModels: TrainedModelItem[]): Promise { + // Get a list of all uniquer pipeline ids to retrieve mapping with indices + const pipelineIds = new Set( + trainedModels + .filter((model): model is TrainedModelWithPipelines => isDefined(model.pipelines)) + .flatMap((model) => Object.keys(model.pipelines)) + ); + + const pipelineToIndicesMap = await this.getPipelineToIndicesMap(pipelineIds); + + trainedModels.forEach((model) => { + if (!isEmpty(model.pipelines)) { + model.indices = Object.entries(pipelineToIndicesMap) + .filter(([pipelineId]) => !isEmpty(model.pipelines?.[pipelineId])) + .flatMap(([_, indices]) => indices); + } + }); + } + + /** + * Assign a check for each DFA model if origin job exists + */ + async assignDFAJobCheck(trainedModels: DFAModelItem[]): Promise { + try { + const dfaJobIds = trainedModels + .map((model) => { + const id = model.metadata?.analytics_config?.id; + if (id) { + return `${id}*`; + } + }) + .filter(isDefined); + + if (dfaJobIds.length > 0) { + const { data_frame_analytics: jobs } = await this._mlClient.getDataFrameAnalytics({ + id: dfaJobIds.join(','), + allow_no_match: true, + }); + + trainedModels.forEach((model) => { + const dfaId = model?.metadata?.analytics_config?.id; + if (dfaId !== undefined) { + // if this is a dfa model, set origin_job_exists + model.origin_job_exists = jobs.find((job) => job.id === dfaId) !== undefined; + } + }); + } + } catch (e) { + return; + } + } + + /** + * Returns a complete list of entities for the Trained Models UI + */ + async getTrainedModelList(): Promise { + const resp = await this._mlClient.getTrainedModels({ + size: 1000, + } as MlGetTrainedModelsRequest); + + let resultItems: TrainedModelUIItem[] = []; + + // Filter models based on enabled features + const filteredModels = filterForEnabledFeatureModels( + resp.trained_model_configs, + this._enabledFeatures + ) as TrainedModelConfigResponse[]; + + const formattedModels = filteredModels.map((model) => { + return { + ...model, + // Extract model types + type: [ + model.model_type, + ...(isBuiltInModel(model) ? [BUILT_IN_MODEL_TYPE] : []), + ...(isElasticModel(model) ? [ELASTIC_MODEL_TYPE] : []), + ...(typeof model.inference_config === 'object' + ? Object.keys(model.inference_config) + : []), + ].filter(isDefined), + }; + }); + + // Update inference endpoints info + await this.assignInferenceEndpoints(formattedModels); + + // Assign model stats + resultItems = await this.assignModelStats(formattedModels); + + if (this._enabledFeatures.nlp) { + resultItems = await this.includeModelDownloads(resultItems); + } + + const existingModels = resultItems.filter(isExistingModel); + + // Assign pipelines to existing models + await this.assignPipelines(existingModels); + + // Assign indices + await this.assignModelIndices(existingModels); + + await this.assignDFAJobCheck(resultItems.filter(isDFAModelItem)); + + return resultItems; + } + /** * Simulates the effect of the pipeline on given document. * @@ -170,12 +485,13 @@ export class ModelsProvider { } /** - * Retrieves the map of model ids and aliases with associated pipelines. + * Retrieves the map of model ids and aliases with associated pipelines, + * where key is a model, alias or deployment id, and value is a map of pipeline ids and pipeline definitions. * @param modelIds - Array of models ids and model aliases. */ async getModelsPipelines(modelIds: string[]) { - const modelIdsMap = new Map | null>( - modelIds.map((id: string) => [id, null]) + const modelIdsMap = new Map>( + modelIds.map((id: string) => [id, {}]) ); try { @@ -208,6 +524,53 @@ export class ModelsProvider { return modelIdsMap; } + /** + * Match pipelines to indices based on the default_pipeline setting in the index settings. + */ + async getPipelineToIndicesMap(pipelineIds: Set): Promise> { + const pipelineIdsToDestinationIndices: Record = {}; + + let indicesPermissions; + let indicesSettings; + + try { + indicesSettings = await this._client.asInternalUser.indices.getSettings(); + const hasPrivilegesResponse = await this._client.asCurrentUser.security.hasPrivileges({ + index: [ + { + names: Object.keys(indicesSettings), + privileges: ['read'], + }, + ], + }); + indicesPermissions = hasPrivilegesResponse.index; + } catch (e) { + // Possible that the user doesn't have permissions to view + if (e.meta?.statusCode !== 403) { + mlLog.error(e); + } + return pipelineIdsToDestinationIndices; + } + + // From list of model pipelines, find all indices that have pipeline set as index.default_pipeline + for (const [indexName, { settings }] of Object.entries(indicesSettings)) { + const defaultPipeline = settings?.index?.default_pipeline; + if ( + defaultPipeline && + pipelineIds.has(defaultPipeline) && + indicesPermissions[indexName]?.read === true + ) { + if (Array.isArray(pipelineIdsToDestinationIndices[defaultPipeline])) { + pipelineIdsToDestinationIndices[defaultPipeline].push(indexName); + } else { + pipelineIdsToDestinationIndices[defaultPipeline] = [indexName]; + } + } + } + + return pipelineIdsToDestinationIndices; + } + /** * Retrieves the network map and metadata of model ids, pipelines, and indices that are tied to the model ids. * @param modelIds - Array of models ids and model aliases. @@ -229,7 +592,6 @@ export class ModelsProvider { }; let pipelinesResponse; - let indicesSettings; try { pipelinesResponse = await this.getModelsPipelines([modelId]); @@ -264,44 +626,8 @@ export class ModelsProvider { } if (withIndices === true) { - const pipelineIdsToDestinationIndices: Record = {}; - - let indicesPermissions; - try { - indicesSettings = await this._client.asInternalUser.indices.getSettings(); - const hasPrivilegesResponse = await this._client.asCurrentUser.security.hasPrivileges({ - index: [ - { - names: Object.keys(indicesSettings), - privileges: ['read'], - }, - ], - }); - indicesPermissions = hasPrivilegesResponse.index; - } catch (e) { - // Possible that the user doesn't have permissions to view - // If so, gracefully exit - if (e.meta?.statusCode !== 403) { - // eslint-disable-next-line no-console - console.error(e); - } - return result; - } - - // 2. From list of model pipelines, find all indices that have pipeline set as index.default_pipeline - for (const [indexName, { settings }] of Object.entries(indicesSettings)) { - if ( - settings?.index?.default_pipeline && - pipelineIds.has(settings.index.default_pipeline) && - indicesPermissions[indexName]?.read === true - ) { - if (Array.isArray(pipelineIdsToDestinationIndices[settings.index.default_pipeline])) { - pipelineIdsToDestinationIndices[settings.index.default_pipeline].push(indexName); - } else { - pipelineIdsToDestinationIndices[settings.index.default_pipeline] = [indexName]; - } - } - } + const pipelineIdsToDestinationIndices: Record = + await this.getPipelineToIndicesMap(pipelineIds); // 3. Grab index information for all the indices found, and add their info to the map for (const [pipelineId, indexIds] of Object.entries(pipelineIdsToDestinationIndices)) { diff --git a/x-pack/plugins/ml/server/plugin.ts b/x-pack/plugins/ml/server/plugin.ts index ba6c5387a93cb..e40bed733f0da 100644 --- a/x-pack/plugins/ml/server/plugin.ts +++ b/x-pack/plugins/ml/server/plugin.ts @@ -226,7 +226,8 @@ export class MlServerPlugin getDataViews, () => this.auditService, () => this.isMlReady, - this.compatibleModuleType + this.compatibleModuleType, + this.enabledFeatures ); const routeInit: RouteInitialization = { diff --git a/x-pack/plugins/ml/server/routes/inference_models.ts b/x-pack/plugins/ml/server/routes/inference_models.ts index 866398ac56ce9..8318fadee8ebd 100644 --- a/x-pack/plugins/ml/server/routes/inference_models.ts +++ b/x-pack/plugins/ml/server/routes/inference_models.ts @@ -19,7 +19,7 @@ import { ML_INTERNAL_BASE_PATH } from '../../common/constants/app'; import { syncSavedObjectsFactory } from '../saved_objects'; export function inferenceModelRoutes( - { router, routeGuard }: RouteInitialization, + { router, routeGuard, getEnabledFeatures }: RouteInitialization, cloud: CloudSetup ) { router.versioned @@ -48,7 +48,12 @@ export function inferenceModelRoutes( async ({ client, mlClient, request, response, mlSavedObjectService }) => { try { const { inferenceId, taskType } = request.params; - const body = await modelsProvider(client, mlClient, cloud).createInferenceEndpoint( + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).createInferenceEndpoint( inferenceId, taskType as InferenceTaskType, request.body as InferenceInferenceEndpoint diff --git a/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts b/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts index f8305cff189ed..1c2ec984fc286 100644 --- a/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts +++ b/x-pack/plugins/ml/server/routes/schemas/inference_schema.ts @@ -65,8 +65,6 @@ export const optionalModelIdSchema = schema.object({ export const getInferenceQuerySchema = schema.object({ size: schema.maybe(schema.string()), - with_pipelines: schema.maybe(schema.string()), - with_indices: schema.maybe(schema.oneOf([schema.string(), schema.boolean()])), include: schema.maybe(schema.string()), }); diff --git a/x-pack/plugins/ml/server/routes/trained_models.test.ts b/x-pack/plugins/ml/server/routes/trained_models.test.ts deleted file mode 100644 index ca3eb19e757c6..0000000000000 --- a/x-pack/plugins/ml/server/routes/trained_models.test.ts +++ /dev/null @@ -1,139 +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 { errors } from '@elastic/elasticsearch'; -import { elasticsearchClientMock } from '@kbn/core-elasticsearch-client-server-mocks'; -import type { TrainedModelConfigResponse } from '../../common/types/trained_models'; -import { populateInferenceServicesProvider } from './trained_models'; -import { mlLog } from '../lib/log'; - -jest.mock('../lib/log'); - -describe('populateInferenceServicesProvider', () => { - const client = elasticsearchClientMock.createScopedClusterClient(); - - let trainedModels: TrainedModelConfigResponse[]; - - const inferenceServices = [ - { - service: 'elser', - model_id: 'elser_test', - service_settings: { model_id: '.elser_model_2' }, - }, - { service: 'open_api_01', model_id: 'open_api_model', service_settings: {} }, - ]; - - beforeEach(() => { - trainedModels = [ - { model_id: '.elser_model_2' }, - { model_id: 'model2' }, - ] as TrainedModelConfigResponse[]; - - client.asInternalUser.transport.request.mockResolvedValue({ endpoints: inferenceServices }); - - jest.clearAllMocks(); - }); - - afterEach(() => { - jest.clearAllMocks(); - }); - - describe('when the user has required privileges', () => { - beforeEach(() => { - client.asCurrentUser.transport.request.mockResolvedValue({ endpoints: inferenceServices }); - }); - - test('should populate inference services for trained models', async () => { - const populateInferenceServices = populateInferenceServicesProvider(client); - // act - await populateInferenceServices(trainedModels, false); - - // assert - expect(client.asCurrentUser.transport.request).toHaveBeenCalledWith({ - method: 'GET', - path: '/_inference/_all', - }); - - expect(client.asInternalUser.transport.request).not.toHaveBeenCalled(); - - expect(trainedModels[0].inference_apis).toEqual([ - { - model_id: 'elser_test', - service: 'elser', - service_settings: { model_id: '.elser_model_2' }, - }, - ]); - expect(trainedModels[0].hasInferenceServices).toBe(true); - - expect(trainedModels[1].inference_apis).toEqual(undefined); - expect(trainedModels[1].hasInferenceServices).toBe(false); - - expect(mlLog.error).not.toHaveBeenCalled(); - }); - }); - - describe('when the user does not have required privileges', () => { - beforeEach(() => { - client.asCurrentUser.transport.request.mockRejectedValue( - new errors.ResponseError( - elasticsearchClientMock.createApiResponse({ - statusCode: 403, - body: { message: 'not allowed' }, - }) - ) - ); - }); - - test('should retry with internal user if an error occurs', async () => { - const populateInferenceServices = populateInferenceServicesProvider(client); - await populateInferenceServices(trainedModels, false); - - // assert - expect(client.asCurrentUser.transport.request).toHaveBeenCalledWith({ - method: 'GET', - path: '/_inference/_all', - }); - - expect(client.asInternalUser.transport.request).toHaveBeenCalledWith({ - method: 'GET', - path: '/_inference/_all', - }); - - expect(trainedModels[0].inference_apis).toEqual(undefined); - expect(trainedModels[0].hasInferenceServices).toBe(true); - - expect(trainedModels[1].inference_apis).toEqual(undefined); - expect(trainedModels[1].hasInferenceServices).toBe(false); - - expect(mlLog.error).not.toHaveBeenCalled(); - }); - }); - - test('should not retry on any other error than 403', async () => { - const notFoundError = new errors.ResponseError( - elasticsearchClientMock.createApiResponse({ - statusCode: 404, - body: { message: 'not found' }, - }) - ); - - client.asCurrentUser.transport.request.mockRejectedValue(notFoundError); - - const populateInferenceServices = populateInferenceServicesProvider(client); - await populateInferenceServices(trainedModels, false); - - // assert - expect(client.asCurrentUser.transport.request).toHaveBeenCalledWith({ - method: 'GET', - path: '/_inference/_all', - }); - - expect(client.asInternalUser.transport.request).not.toHaveBeenCalled(); - - expect(mlLog.error).toHaveBeenCalledWith(notFoundError); - }); -}); diff --git a/x-pack/plugins/ml/server/routes/trained_models.ts b/x-pack/plugins/ml/server/routes/trained_models.ts index 2782c4be18207..adedb37b4a7a5 100644 --- a/x-pack/plugins/ml/server/routes/trained_models.ts +++ b/x-pack/plugins/ml/server/routes/trained_models.ts @@ -6,21 +6,18 @@ */ import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { groupBy } from 'lodash'; +import type { CloudSetup } from '@kbn/cloud-plugin/server'; import { schema } from '@kbn/config-schema'; import type { ErrorType } from '@kbn/ml-error-utils'; -import type { CloudSetup } from '@kbn/cloud-plugin/server'; -import type { - ElasticCuratedModelName, - ElserVersion, - InferenceAPIConfigResponse, -} from '@kbn/ml-trained-models-utils'; -import { isDefined } from '@kbn/ml-is-defined'; -import type { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; +import type { ElasticCuratedModelName, ElserVersion } from '@kbn/ml-trained-models-utils'; +import { TRAINED_MODEL_TYPE } from '@kbn/ml-trained-models-utils'; +import { ML_INTERNAL_BASE_PATH, type MlFeatures } from '../../common/constants/app'; import { DEFAULT_TRAINED_MODELS_PAGE_SIZE } from '../../common/constants/trained_models'; -import { type MlFeatures, ML_INTERNAL_BASE_PATH } from '../../common/constants/app'; -import type { RouteInitialization } from '../types'; +import { type TrainedModelConfigResponse } from '../../common/types/trained_models'; import { wrapError } from '../client/error_wrapper'; +import { modelsProvider } from '../models/model_management'; +import type { RouteInitialization } from '../types'; +import { forceQuerySchema } from './schemas/anomaly_detectors_schema'; import { createIngestPipelineSchema, curatedModelsParamsSchema, @@ -39,70 +36,57 @@ import { threadingParamsQuerySchema, updateDeploymentParamsSchema, } from './schemas/inference_schema'; -import type { PipelineDefinition } from '../../common/types/trained_models'; -import { type TrainedModelConfigResponse } from '../../common/types/trained_models'; -import { mlLog } from '../lib/log'; -import { forceQuerySchema } from './schemas/anomaly_detectors_schema'; -import { modelsProvider } from '../models/model_management'; export function filterForEnabledFeatureModels< T extends TrainedModelConfigResponse | estypes.MlTrainedModelConfig >(models: T[], enabledFeatures: MlFeatures) { let filteredModels = models; if (enabledFeatures.nlp === false) { - filteredModels = filteredModels.filter((m) => m.model_type === 'tree_ensemble'); + filteredModels = filteredModels.filter((m) => m.model_type !== TRAINED_MODEL_TYPE.PYTORCH); } - if (enabledFeatures.dfa === false) { - filteredModels = filteredModels.filter((m) => m.model_type !== 'tree_ensemble'); + filteredModels = filteredModels.filter( + (m) => m.model_type !== TRAINED_MODEL_TYPE.TREE_ENSEMBLE + ); } - return filteredModels; } -export const populateInferenceServicesProvider = (client: IScopedClusterClient) => { - return async function populateInferenceServices( - trainedModels: TrainedModelConfigResponse[], - asInternal: boolean = false - ) { - const esClient = asInternal ? client.asInternalUser : client.asCurrentUser; - - try { - // Check if model is used by an inference service - const { endpoints } = await esClient.transport.request<{ - endpoints: InferenceAPIConfigResponse[]; - }>({ - method: 'GET', - path: `/_inference/_all`, - }); - - const inferenceAPIMap = groupBy( - endpoints, - (endpoint) => endpoint.service === 'elser' && endpoint.service_settings.model_id - ); - - for (const model of trainedModels) { - const inferenceApis = inferenceAPIMap[model.model_id]; - model.hasInferenceServices = !!inferenceApis; - if (model.hasInferenceServices && !asInternal) { - model.inference_apis = inferenceApis; - } - } - } catch (e) { - if (!asInternal && e.statusCode === 403) { - // retry with internal user to get an indicator if models has associated inference services, without mentioning the names - await populateInferenceServices(trainedModels, true); - } else { - mlLog.error(e); - } - } - }; -}; - export function trainedModelsRoutes( { router, routeGuard, getEnabledFeatures }: RouteInitialization, cloud: CloudSetup ) { + router.versioned + .get({ + path: `${ML_INTERNAL_BASE_PATH}/trained_models_list`, + access: 'internal', + security: { + authz: { + requiredPrivileges: ['ml:canGetTrainedModels'], + }, + }, + summary: 'Get trained models list', + description: + 'Retrieves a complete list of trained models with stats, pipelines, and indices.', + }) + .addVersion( + { + version: '1', + validate: false, + }, + routeGuard.fullLicenseAPIGuard(async ({ client, mlClient, request, response }) => { + try { + const modelsClient = modelsProvider(client, mlClient, cloud, getEnabledFeatures()); + const models = await modelsClient.getTrainedModelList(); + return response.ok({ + body: models, + }); + } catch (e) { + return response.customError(wrapError(e)); + } + }) + ); + router.versioned .get({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/{modelId?}`, @@ -128,14 +112,7 @@ export function trainedModelsRoutes( routeGuard.fullLicenseAPIGuard(async ({ client, mlClient, request, response }) => { try { const { modelId } = request.params; - const { - with_pipelines: withPipelines, - with_indices: withIndicesRaw, - ...getTrainedModelsRequestParams - } = request.query; - - const withIndices = - request.query.with_indices === 'true' || request.query.with_indices === true; + const { ...getTrainedModelsRequestParams } = request.query; const resp = await mlClient.getTrainedModels({ ...getTrainedModelsRequestParams, @@ -146,126 +123,8 @@ export function trainedModelsRoutes( // @ts-ignore const result = resp.trained_model_configs as TrainedModelConfigResponse[]; - const populateInferenceServices = populateInferenceServicesProvider(client); - await populateInferenceServices(result, false); - - try { - if (withPipelines) { - // Also need to retrieve the list of deployment IDs from stats - const stats = await mlClient.getTrainedModelsStats({ - ...(modelId ? { model_id: modelId } : {}), - size: 10000, - }); - - const modelDeploymentsMap = stats.trained_model_stats.reduce((acc, curr) => { - if (!curr.deployment_stats) return acc; - // @ts-ignore elasticsearch-js client is missing deployment_id - const deploymentId = curr.deployment_stats.deployment_id; - if (acc[curr.model_id]) { - acc[curr.model_id].push(deploymentId); - } else { - acc[curr.model_id] = [deploymentId]; - } - return acc; - }, {} as Record); - - const modelIdsAndAliases: string[] = Array.from( - new Set([ - ...result - .map(({ model_id: id, metadata }) => { - return [id, ...(metadata?.model_aliases ?? [])]; - }) - .flat(), - ...Object.values(modelDeploymentsMap).flat(), - ]) - ); - const modelsClient = modelsProvider(client, mlClient, cloud); - - const modelsPipelinesAndIndices = await Promise.all( - modelIdsAndAliases.map(async (modelIdOrAlias) => { - return { - modelIdOrAlias, - result: await modelsClient.getModelsPipelinesAndIndicesMap(modelIdOrAlias, { - withIndices, - }), - }; - }) - ); - - for (const model of result) { - const modelAliases = model.metadata?.model_aliases ?? []; - const modelMap = modelsPipelinesAndIndices.find( - (d) => d.modelIdOrAlias === model.model_id - )?.result; - - const allRelatedModels = modelsPipelinesAndIndices - .filter( - (m) => - [ - model.model_id, - ...modelAliases, - ...(modelDeploymentsMap[model.model_id] ?? []), - ].findIndex((alias) => alias === m.modelIdOrAlias) > -1 - ) - .map((r) => r?.result) - .filter(isDefined); - const ingestPipelinesFromModelAliases = allRelatedModels - .map((r) => r?.ingestPipelines) - .filter(isDefined) as Array>>; - - model.pipelines = ingestPipelinesFromModelAliases.reduce< - Record - >((allPipelines, modelsToPipelines) => { - for (const [, pipelinesObj] of modelsToPipelines?.entries()) { - Object.entries(pipelinesObj).forEach(([pipelineId, pipelineInfo]) => { - allPipelines[pipelineId] = pipelineInfo; - }); - } - return allPipelines; - }, {}); - - if (modelMap && withIndices) { - model.indices = modelMap.indices; - } - } - } - } catch (e) { - // the user might not have required permissions to fetch pipelines - // log the error to the debug log as this might be a common situation and - // we don't need to fill kibana's log with these messages. - mlLog.debug(e); - } - const filteredModels = filterForEnabledFeatureModels(result, getEnabledFeatures()); - try { - const jobIds = filteredModels - .map((model) => { - const id = model.metadata?.analytics_config?.id; - if (id) { - return `${id}*`; - } - }) - .filter((id) => id !== undefined); - - if (jobIds.length) { - const { data_frame_analytics: jobs } = await mlClient.getDataFrameAnalytics({ - id: jobIds.join(','), - allow_no_match: true, - }); - - filteredModels.forEach((model) => { - const dfaId = model?.metadata?.analytics_config?.id; - if (dfaId !== undefined) { - // if this is a dfa model, set origin_job_exists - model.origin_job_exists = jobs.find((job) => job.id === dfaId) !== undefined; - } - }); - } - } catch (e) { - // Swallow error to prevent blocking trained models result - } - return response.ok({ body: filteredModels, }); @@ -367,9 +226,12 @@ export function trainedModelsRoutes( routeGuard.fullLicenseAPIGuard(async ({ client, request, mlClient, response }) => { try { const { modelId } = request.params; - const result = await modelsProvider(client, mlClient, cloud).getModelsPipelines( - modelId.split(',') - ); + const result = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).getModelsPipelines(modelId.split(',')); return response.ok({ body: [...result].map(([id, pipelines]) => ({ model_id: id, pipelines })), }); @@ -396,9 +258,14 @@ export function trainedModelsRoutes( version: '1', validate: false, }, - routeGuard.fullLicenseAPIGuard(async ({ client, request, mlClient, response }) => { + routeGuard.fullLicenseAPIGuard(async ({ client, mlClient, response }) => { try { - const body = await modelsProvider(client, mlClient, cloud).getPipelines(); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).getPipelines(); return response.ok({ body, }); @@ -432,10 +299,12 @@ export function trainedModelsRoutes( routeGuard.fullLicenseAPIGuard(async ({ client, request, mlClient, response }) => { try { const { pipeline, pipelineName } = request.body; - const body = await modelsProvider(client, mlClient, cloud).createInferencePipeline( - pipeline!, - pipelineName - ); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).createInferencePipeline(pipeline!, pipelineName); return response.ok({ body, }); @@ -517,7 +386,12 @@ export function trainedModelsRoutes( if (withPipelines) { // first we need to delete pipelines, otherwise ml api return an error - await modelsProvider(client, mlClient, cloud).deleteModelPipelines(modelId.split(',')); + await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).deleteModelPipelines(modelId.split(',')); } const body = await mlClient.deleteTrainedModel({ @@ -773,7 +647,12 @@ export function trainedModelsRoutes( }, routeGuard.fullLicenseAPIGuard(async ({ response, mlClient, client }) => { try { - const body = await modelsProvider(client, mlClient, cloud).getModelDownloads(); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).getModelDownloads(); return response.ok({ body, @@ -809,7 +688,7 @@ export function trainedModelsRoutes( try { const { version } = request.query; - const body = await modelsProvider(client, mlClient, cloud).getELSER( + const body = await modelsProvider(client, mlClient, cloud, getEnabledFeatures()).getELSER( version ? { version: Number(version) as ElserVersion } : undefined ); @@ -847,10 +726,12 @@ export function trainedModelsRoutes( async ({ client, mlClient, request, response, mlSavedObjectService }) => { try { const { modelId } = request.params; - const body = await modelsProvider(client, mlClient, cloud).installElasticModel( - modelId, - mlSavedObjectService - ); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).installElasticModel(modelId, mlSavedObjectService); return response.ok({ body, @@ -882,7 +763,12 @@ export function trainedModelsRoutes( routeGuard.fullLicenseAPIGuard( async ({ client, mlClient, request, response, mlSavedObjectService }) => { try { - const body = await modelsProvider(client, mlClient, cloud).getModelsDownloadStatus(); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).getModelsDownloadStatus(); return response.ok({ body, @@ -920,10 +806,14 @@ export function trainedModelsRoutes( routeGuard.fullLicenseAPIGuard( async ({ client, mlClient, request, response, mlSavedObjectService }) => { try { - const body = await modelsProvider(client, mlClient, cloud).getCuratedModelConfig( - request.params.modelName as ElasticCuratedModelName, - { version: request.query.version as ElserVersion } - ); + const body = await modelsProvider( + client, + mlClient, + cloud, + getEnabledFeatures() + ).getCuratedModelConfig(request.params.modelName as ElasticCuratedModelName, { + version: request.query.version as ElserVersion, + }); return response.ok({ body, diff --git a/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts b/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts index 36d639066f97a..04f12d82688e1 100644 --- a/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts +++ b/x-pack/plugins/ml/server/shared_services/providers/trained_models.ts @@ -12,6 +12,7 @@ import type { GetModelDownloadConfigOptions, ModelDefinitionResponse, } from '@kbn/ml-trained-models-utils'; +import type { MlFeatures } from '../../../common/constants/app'; import type { MlInferTrainedModelRequest, MlStopTrainedModelDeploymentRequest, @@ -59,7 +60,8 @@ export interface TrainedModelsProvider { export function getTrainedModelsProvider( getGuards: GetGuards, - cloud: CloudSetup + cloud: CloudSetup, + enabledFeatures: MlFeatures ): TrainedModelsProvider { return { trainedModelsProvider(request: KibanaRequest, savedObjectsClient: SavedObjectsClientContract) { @@ -134,7 +136,9 @@ export function getTrainedModelsProvider( .isFullLicense() .hasMlCapabilities(['canGetTrainedModels']) .ok(async ({ scopedClient, mlClient }) => { - return modelsProvider(scopedClient, mlClient, cloud).getELSER(params); + return modelsProvider(scopedClient, mlClient, cloud, enabledFeatures).getELSER( + params + ); }); }, async getCuratedModelConfig(...params: GetCuratedModelConfigParams) { @@ -142,7 +146,12 @@ export function getTrainedModelsProvider( .isFullLicense() .hasMlCapabilities(['canGetTrainedModels']) .ok(async ({ scopedClient, mlClient }) => { - return modelsProvider(scopedClient, mlClient, cloud).getCuratedModelConfig(...params); + return modelsProvider( + scopedClient, + mlClient, + cloud, + enabledFeatures + ).getCuratedModelConfig(...params); }); }, async installElasticModel(modelId: string) { @@ -150,10 +159,12 @@ export function getTrainedModelsProvider( .isFullLicense() .hasMlCapabilities(['canGetTrainedModels']) .ok(async ({ scopedClient, mlClient, mlSavedObjectService }) => { - return modelsProvider(scopedClient, mlClient, cloud).installElasticModel( - modelId, - mlSavedObjectService - ); + return modelsProvider( + scopedClient, + mlClient, + cloud, + enabledFeatures + ).installElasticModel(modelId, mlSavedObjectService); }); }, }; diff --git a/x-pack/plugins/ml/server/shared_services/shared_services.ts b/x-pack/plugins/ml/server/shared_services/shared_services.ts index d4af7166435d4..caaf3abb78815 100644 --- a/x-pack/plugins/ml/server/shared_services/shared_services.ts +++ b/x-pack/plugins/ml/server/shared_services/shared_services.ts @@ -16,7 +16,7 @@ import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-ser import type { IClusterClient, IScopedClusterClient } from '@kbn/core-elasticsearch-server'; import type { UiSettingsServiceStart } from '@kbn/core-ui-settings-server'; import type { CoreAuditService } from '@kbn/core-security-server'; -import type { CompatibleModule } from '../../common/constants/app'; +import type { CompatibleModule, MlFeatures } from '../../common/constants/app'; import type { MlLicense } from '../../common/license'; import { licenseChecks } from './license_checks'; @@ -110,7 +110,8 @@ export function createSharedServices( getDataViews: () => DataViewsPluginStart, getAuditService: () => CoreAuditService | null, isMlReady: () => Promise, - compatibleModuleType: CompatibleModule | null + compatibleModuleType: CompatibleModule | null, + enabledFeatures: MlFeatures ): { sharedServicesProviders: SharedServices; internalServicesProviders: MlServicesProviders; @@ -188,7 +189,7 @@ export function createSharedServices( ...getResultsServiceProvider(getGuards), ...getMlSystemProvider(getGuards, mlLicense, getSpaces, cloud, resolveMlCapabilities), ...getAlertingServiceProvider(getGuards), - ...getTrainedModelsProvider(getGuards, cloud), + ...getTrainedModelsProvider(getGuards, cloud, enabledFeatures), }, /** * Services providers for ML internal usage diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index c4c4b6514d865..56a49131ffc45 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -31526,7 +31526,6 @@ "xpack.ml.trainedModels.modelsList.expandRow": "Développer", "xpack.ml.trainedModels.modelsList.fetchDeletionErrorMessage": "La suppression {modelsCount, plural, one {du modèle} other {des modèles}} a échoué", "xpack.ml.trainedModels.modelsList.fetchFailedErrorMessage": "Erreur lors du chargement des modèles entraînés", - "xpack.ml.trainedModels.modelsList.fetchModelStatsErrorMessage": "Erreur lors du chargement des statistiques des modèles entraînés", "xpack.ml.trainedModels.modelsList.forceStopDialog.cancelText": "Annuler", "xpack.ml.trainedModels.modelsList.forceStopDialog.confirmText": "Arrêt", "xpack.ml.trainedModels.modelsList.forceStopDialog.hasInferenceServicesWarning": "Ce modèle est utilisé par l'API _inference", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 9437c83a30c31..0daefc15b9396 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -31387,7 +31387,6 @@ "xpack.ml.trainedModels.modelsList.expandRow": "拡張", "xpack.ml.trainedModels.modelsList.fetchDeletionErrorMessage": "{modelsCount, plural, other {モデル}}を削除できませんでした", "xpack.ml.trainedModels.modelsList.fetchFailedErrorMessage": "学習済みモデルの読み込みエラー", - "xpack.ml.trainedModels.modelsList.fetchModelStatsErrorMessage": "学習済みモデル統計情報の読み込みエラー", "xpack.ml.trainedModels.modelsList.forceStopDialog.cancelText": "キャンセル", "xpack.ml.trainedModels.modelsList.forceStopDialog.confirmText": "終了", "xpack.ml.trainedModels.modelsList.forceStopDialog.hasInferenceServicesWarning": "モデルは_inference APIによって使用されます。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index cf6fb36f8f20b..724923fbb204a 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -30907,7 +30907,6 @@ "xpack.ml.trainedModels.modelsList.expandRow": "展开", "xpack.ml.trainedModels.modelsList.fetchDeletionErrorMessage": "{modelsCount, plural, other {# 个模型}}删除失败", "xpack.ml.trainedModels.modelsList.fetchFailedErrorMessage": "加载已训练模型时出错", - "xpack.ml.trainedModels.modelsList.fetchModelStatsErrorMessage": "加载已训练模型统计信息时出错", "xpack.ml.trainedModels.modelsList.forceStopDialog.cancelText": "取消", "xpack.ml.trainedModels.modelsList.forceStopDialog.confirmText": "停止点", "xpack.ml.trainedModels.modelsList.forceStopDialog.hasInferenceServicesWarning": "此模型由 _inference API 使用", diff --git a/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts b/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts index a3953a87b82b2..654f55c7e1254 100644 --- a/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts +++ b/x-pack/test/api_integration/apis/ml/trained_models/get_models.ts @@ -16,61 +16,27 @@ export default ({ getService }: FtrProviderContext) => { const esDeleteAllIndices = getService('esDeleteAllIndices'); describe('GET trained_models', () => { - let testModelIds: string[] = []; - before(async () => { await ml.api.initSavedObjects(); await ml.testResources.setKibanaTimeZoneToUTC(); - testModelIds = await ml.api.createTestTrainedModels('regression', 5, true); - await ml.api.createModelAlias('dfa_regression_model_n_0', 'dfa_regression_model_alias'); - await ml.api.createIngestPipeline('dfa_regression_model_alias'); - - // Creating an indices that are tied to modelId: dfa_regression_model_n_1 - await ml.api.createIndex(`user-index_dfa_regression_model_n_1`, undefined, { - index: { default_pipeline: `pipeline_dfa_regression_model_n_1` }, - }); + await ml.api.createTestTrainedModels('regression', 5, true); }); after(async () => { await esDeleteAllIndices('user-index_dfa*'); - - // delete created ingest pipelines - await Promise.all( - ['dfa_regression_model_alias', ...testModelIds].map((modelId) => - ml.api.deleteIngestPipeline(modelId) - ) - ); await ml.testResources.cleanMLSavedObjects(); await ml.api.cleanMlIndices(); }); - it('returns all trained models with associated pipelines including aliases', async () => { + it('returns all trained models', async () => { const { body, status } = await supertest - .get(`/internal/ml/trained_models?with_pipelines=true`) + .get(`/internal/ml/trained_models`) .auth(USER.ML_POWERUSER, ml.securityCommon.getPasswordForUser(USER.ML_POWERUSER)) .set(getCommonRequestHeader('1')); ml.api.assertResponseStatusCode(200, status, body); // Created models + system model expect(body.length).to.eql(6); - - const sampleModel = body.find((v: any) => v.model_id === 'dfa_regression_model_n_0'); - - expect(Object.keys(sampleModel.pipelines).length).to.eql(2); - }); - - it('returns models without pipeline in case user does not have required permission', async () => { - const { body, status } = await supertest - .get(`/internal/ml/trained_models?with_pipelines=true&with_indices=true`) - .auth(USER.ML_VIEWER, ml.securityCommon.getPasswordForUser(USER.ML_VIEWER)) - .set(getCommonRequestHeader('1')); - ml.api.assertResponseStatusCode(200, status, body); - - // Created models + system model - expect(body.length).to.eql(6); - const sampleModel = body.find((v: any) => v.model_id === 'dfa_regression_model_n_0'); - - expect(sampleModel.pipelines).to.eql(undefined); }); it('returns trained model by id', async () => { @@ -84,58 +50,6 @@ export default ({ getService }: FtrProviderContext) => { const sampleModel = body[0]; expect(sampleModel.model_id).to.eql('dfa_regression_model_n_1'); - expect(sampleModel.pipelines).to.eql(undefined); - expect(sampleModel.indices).to.eql(undefined); - }); - - it('returns trained model by id with_pipelines=true,with_indices=false', async () => { - const { body, status } = await supertest - .get( - `/internal/ml/trained_models/dfa_regression_model_n_1?with_pipelines=true&with_indices=false` - ) - .auth(USER.ML_POWERUSER, ml.securityCommon.getPasswordForUser(USER.ML_POWERUSER)) - .set(getCommonRequestHeader('1')); - ml.api.assertResponseStatusCode(200, status, body); - - expect(body.length).to.eql(1); - const sampleModel = body[0]; - - expect(sampleModel.model_id).to.eql('dfa_regression_model_n_1'); - expect(Object.keys(sampleModel.pipelines).length).to.eql( - 1, - `Expected number of pipelines for dfa_regression_model_n_1 to be ${1} (got ${ - Object.keys(sampleModel.pipelines).length - })` - ); - expect(sampleModel.indices).to.eql( - undefined, - `Expected indices for dfa_regression_model_n_1 to be undefined (got ${sampleModel.indices})` - ); - }); - - it('returns trained model by id with_pipelines=true,with_indices=true', async () => { - const { body, status } = await supertest - .get( - `/internal/ml/trained_models/dfa_regression_model_n_1?with_pipelines=true&with_indices=true` - ) - .auth(USER.ML_POWERUSER, ml.securityCommon.getPasswordForUser(USER.ML_POWERUSER)) - .set(getCommonRequestHeader('1')); - ml.api.assertResponseStatusCode(200, status, body); - - const sampleModel = body[0]; - expect(sampleModel.model_id).to.eql('dfa_regression_model_n_1'); - expect(Object.keys(sampleModel.pipelines).length).to.eql( - 1, - `Expected number of pipelines for dfa_regression_model_n_1 to be ${1} (got ${ - Object.keys(sampleModel.pipelines).length - })` - ); - expect(sampleModel.indices.length).to.eql( - 1, - `Expected number of indices for dfa_regression_model_n_1 to be ${1} (got ${ - sampleModel.indices.length - })` - ); }); it('returns 404 if requested trained model does not exist', async () => { diff --git a/x-pack/test/api_integration/apis/ml/trained_models/index.ts b/x-pack/test/api_integration/apis/ml/trained_models/index.ts index c9bf98545e2b4..319899ec9a693 100644 --- a/x-pack/test/api_integration/apis/ml/trained_models/index.ts +++ b/x-pack/test/api_integration/apis/ml/trained_models/index.ts @@ -9,6 +9,7 @@ import { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ loadTestFile }: FtrProviderContext) { describe('trained models', function () { + loadTestFile(require.resolve('./trained_models_list')); loadTestFile(require.resolve('./get_models')); loadTestFile(require.resolve('./get_model_stats')); loadTestFile(require.resolve('./get_model_pipelines')); diff --git a/x-pack/test/api_integration/apis/ml/trained_models/trained_models_list.ts b/x-pack/test/api_integration/apis/ml/trained_models/trained_models_list.ts new file mode 100644 index 0000000000000..1feac44b13ca8 --- /dev/null +++ b/x-pack/test/api_integration/apis/ml/trained_models/trained_models_list.ts @@ -0,0 +1,96 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { USER } from '../../../../functional/services/ml/security_common'; +import { getCommonRequestHeader } from '../../../../functional/services/ml/common_api'; + +export default ({ getService }: FtrProviderContext) => { + const supertest = getService('supertestWithoutAuth'); + const ml = getService('ml'); + const esDeleteAllIndices = getService('esDeleteAllIndices'); + + describe('GET trained_models_list', () => { + let testModelIds: string[] = []; + + before(async () => { + await ml.api.initSavedObjects(); + await ml.testResources.setKibanaTimeZoneToUTC(); + testModelIds = await ml.api.createTestTrainedModels('regression', 5, true); + await ml.api.createModelAlias('dfa_regression_model_n_0', 'dfa_regression_model_alias'); + await ml.api.createIngestPipeline('dfa_regression_model_alias'); + + // Creating an index that is tied to modelId: dfa_regression_model_n_1 + await ml.api.createIndex(`user-index_dfa_regression_model_n_1`, undefined, { + index: { default_pipeline: `pipeline_dfa_regression_model_n_1` }, + }); + }); + + after(async () => { + await esDeleteAllIndices('user-index_dfa*'); + + // delete created ingest pipelines + await Promise.all( + ['dfa_regression_model_alias', ...testModelIds].map((modelId) => + ml.api.deleteIngestPipeline(modelId) + ) + ); + await ml.testResources.cleanMLSavedObjects(); + await ml.api.cleanMlIndices(); + }); + + it('returns a formatted list of trained model with stats, associated pipelines and indices', async () => { + const { body, status } = await supertest + .get(`/internal/ml/trained_models_list`) + .auth(USER.ML_POWERUSER, ml.securityCommon.getPasswordForUser(USER.ML_POWERUSER)) + .set(getCommonRequestHeader('1')); + ml.api.assertResponseStatusCode(200, status, body); + + // Created models + system model + model downloads + expect(body.length).to.eql(10); + + const dfaRegressionN0 = body.find((v: any) => v.model_id === 'dfa_regression_model_n_0'); + + expect(Object.keys(dfaRegressionN0.pipelines).length).to.eql(2); + + const dfaRegressionN1 = body.find((v: any) => v.model_id === 'dfa_regression_model_n_1'); + expect(Object.keys(dfaRegressionN1.pipelines).length).to.eql( + 1, + `Expected number of pipelines for dfa_regression_model_n_1 to be ${1} (got ${ + Object.keys(dfaRegressionN1.pipelines).length + })` + ); + expect(dfaRegressionN1.indices.length).to.eql( + 1, + `Expected number of indices for dfa_regression_model_n_1 to be ${1} (got ${ + dfaRegressionN1.indices.length + })` + ); + }); + + it('returns models without pipeline in case user does not have required permission', async () => { + const { body, status } = await supertest + .get(`/internal/ml/trained_models_list`) + .auth(USER.ML_VIEWER, ml.securityCommon.getPasswordForUser(USER.ML_VIEWER)) + .set(getCommonRequestHeader('1')); + ml.api.assertResponseStatusCode(200, status, body); + + expect(body.length).to.eql(10); + const sampleModel = body.find((v: any) => v.model_id === 'dfa_regression_model_n_0'); + expect(sampleModel.pipelines).to.eql(undefined); + }); + + it('returns an error for unauthorized user', async () => { + const { body, status } = await supertest + .get(`/internal/ml/trained_models_list`) + .auth(USER.ML_UNAUTHORIZED, ml.securityCommon.getPasswordForUser(USER.ML_UNAUTHORIZED)) + .set(getCommonRequestHeader('1')); + ml.api.assertResponseStatusCode(403, status, body); + }); + }); +}; diff --git a/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts b/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts index 7977f17bf5f65..c0d4af068832e 100644 --- a/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts +++ b/x-pack/test/functional/apps/ml/short_tests/model_management/model_list.ts @@ -17,6 +17,8 @@ export default function ({ getService }: FtrProviderContext) { id: model.name, })); + const modelAllSpaces = SUPPORTED_TRAINED_MODELS.TINY_ELSER; + describe('trained models', function () { // 'Created at' will be different on each run, // so we will just assert that the value is in the expected timestamp format. @@ -91,6 +93,10 @@ export default function ({ getService }: FtrProviderContext) { await ml.api.importTrainedModel(model.id, model.name); } + // Assign model to all spaces + await ml.api.updateTrainedModelSpaces(modelAllSpaces.name, ['*'], ['default']); + await ml.api.assertTrainedModelSpaces(modelAllSpaces.name, ['*']); + await ml.api.createTestTrainedModels('classification', 15, true); await ml.api.createTestTrainedModels('regression', 15); @@ -173,9 +179,10 @@ export default function ({ getService }: FtrProviderContext) { await ml.securityUI.logout(); }); - it('should not be able to delete a model assigned to all spaces, and show a warning copy explaining the situation', async () => { - await ml.testExecution.logTestStep('should select the model named elser_model_2'); - await ml.trainedModels.selectModel('.elser_model_2'); + it.skip('should not be able to delete a model assigned to all spaces, and show a warning copy explaining the situation', async () => { + await ml.testExecution.logTestStep('should select a model'); + await ml.trainedModelsTable.filterWithSearchString(modelAllSpaces.name, 1); + await ml.trainedModels.selectModel(modelAllSpaces.name); await ml.testExecution.logTestStep('should attempt to delete the model'); await ml.trainedModels.clickBulkDelete(); @@ -493,6 +500,11 @@ export default function ({ getService }: FtrProviderContext) { await ml.trainedModelsTable.assertStatsTabContent(); await ml.trainedModelsTable.assertPipelinesTabContent(false); }); + } + + describe('supports actions for an imported model', function () { + // It's enough to test the actions for one model + const model = trainedModels[trainedModels.length - 1]; it(`starts deployment of the imported model ${model.id}`, async () => { await ml.trainedModelsTable.startDeploymentWithParams(model.id, { @@ -513,7 +525,7 @@ export default function ({ getService }: FtrProviderContext) { it(`deletes the imported model ${model.id}`, async () => { await ml.trainedModelsTable.deleteModel(model.id); }); - } + }); }); }); From 4608b37e97745ab0209bc42bdc6bf4d62fd4451c Mon Sep 17 00:00:00 2001 From: Aleksandr Maus Date: Wed, 4 Dec 2024 14:10:34 -0500 Subject: [PATCH 046/141] config/serverless.{security,oblt}.yml - exclude deprecated integrations (#194644) This adds exclusions for deprecated "rsa2elk" integration packages to Serverless projects. The following packages should be excluded from Serverless. - bluecoat - cylance - f5 - fortinet_forticlient - juniper_junos - juniper_netscreen - netscout - radware - tomcat --------- Co-authored-by: Andrew Kroh --- config/serverless.oblt.yml | 13 +++++++++++-- config/serverless.security.yml | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/config/serverless.oblt.yml b/config/serverless.oblt.yml index 55e7fec7a3d39..4f2e5a0883b52 100644 --- a/config/serverless.oblt.yml +++ b/config/serverless.oblt.yml @@ -157,11 +157,20 @@ xpack.fleet.internal.registry.excludePackages: [ 'cloud_defend', 'security_detection_engine', - # Removed in 8.11 integrations + # Deprecated security integrations + 'bluecoat', 'cisco', + 'cyberark', + 'cylance', + 'f5', + 'fortinet_forticlient', + 'juniper_junos', + 'juniper_netscreen', 'microsoft', + 'netscout', + 'radware', 'symantec', - 'cyberark', + 'tomcat', # ML integrations 'dga', diff --git a/config/serverless.security.yml b/config/serverless.security.yml index d7c1a13822ccf..d92075fbb3fdc 100644 --- a/config/serverless.security.yml +++ b/config/serverless.security.yml @@ -84,11 +84,20 @@ xpack.fleet.internal.registry.excludePackages: [ 'synthetics', 'synthetics_dashboards', - # Removed in 8.11 integrations + # Deprecated security integrations + 'bluecoat', 'cisco', + 'cyberark', + 'cylance', + 'f5', + 'fortinet_forticlient', + 'juniper_junos', + 'juniper_netscreen', 'microsoft', + 'netscout', + 'radware', 'symantec', - 'cyberark', + 'tomcat', # ML integrations 'dga', From 3dcdeb150776ccdcbb3b3a9280413823be6a9e77 Mon Sep 17 00:00:00 2001 From: "Devin W. Hurley" Date: Wed, 4 Dec 2024 14:21:00 -0500 Subject: [PATCH 047/141] [Security Solutoin] [Detections] skip flaky eql sequence test (#202977) ## Summary skips flakey test: https://github.com/elastic/kibana/issues/202945 --- .../trial_license_complete_tier/eql_alert_suppression.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts index d933b1b7274d5..f8331a2d6bf31 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts @@ -2982,7 +2982,8 @@ export default ({ getService }: FtrProviderContext) => { expect(suppressionEnd).toBeGreaterThan(new Date(secondTimestamp).getDate()); }); - it('does not suppress alerts outside of duration', async () => { + // Skipped here: https://github.com/elastic/kibana/issues/202945 + it.skip('does not suppress alerts outside of duration', async () => { const id = uuidv4(); // this timestamp is 1 minute in the past const firstTimestamp = new Date(Date.now() - 5000).toISOString(); @@ -3170,7 +3171,8 @@ export default ({ getService }: FtrProviderContext) => { }); }); - it('does not suppress alerts outside of duration when query with 3 sequences', async () => { + // Skipped here: https://github.com/elastic/kibana/issues/202945 + it.skip('does not suppress alerts outside of duration when query with 3 sequences', async () => { const id = uuidv4(); const dateNow = Date.now(); const timestampSequenceEvent1 = new Date(dateNow - 5000).toISOString(); From 055780b9999d6541955a05c781500e5223a30147 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Wed, 4 Dec 2024 20:33:18 +0100 Subject: [PATCH 048/141] Logs settings: Remove sample data from default (#202981) Closes https://github.com/elastic/kibana/issues/195867 --- .../observability_solution/logs_data_access/common/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/logs_data_access/common/constants.ts b/x-pack/plugins/observability_solution/logs_data_access/common/constants.ts index ffe5a83f245e8..1c8a4e9deb4ba 100644 --- a/x-pack/plugins/observability_solution/logs_data_access/common/constants.ts +++ b/x-pack/plugins/observability_solution/logs_data_access/common/constants.ts @@ -5,4 +5,4 @@ * 2.0. */ -export const DEFAULT_LOG_SOURCES = ['logs-*-*', 'logs-*', 'filebeat-*', 'kibana_sample_data_logs*']; +export const DEFAULT_LOG_SOURCES = ['logs-*-*', 'logs-*', 'filebeat-*']; From 632b79f61dd0dec3fe19b5f4296b86380509a0a1 Mon Sep 17 00:00:00 2001 From: Viduni Wickramarachchi Date: Wed, 4 Dec 2024 15:21:25 -0500 Subject: [PATCH 049/141] [Obs AI Assistant] Manual migration for routes with access tag (#202817) ## Summary ### Problem `tags: [access:ai_assistant]` is deprecated. ### Solution All the routes that use this tag needs to be migrated to the `authz`: `requiredPrivileges` property. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../server/routes/chat/route.ts | 24 ++-- .../server/routes/connectors/route.ts | 6 +- .../server/routes/conversations/route.ts | 36 +++-- .../server/routes/functions/route.ts | 18 ++- .../server/routes/knowledge_base/route.ts | 60 ++++++--- .../server/routes/types.ts | 1 - .../common/config.ts | 13 +- .../common/users/users.ts | 14 +- .../tests/chat/chat.spec.ts | 24 ++++ .../tests/complete/complete.spec.ts | 25 +++- .../tests/connectors/connectors.spec.ts | 22 +++- .../tests/conversations/conversations.spec.ts | 124 ++++++++++++++++++ .../knowledge_base/knowledge_base.spec.ts | 57 ++++++++ .../knowledge_base_setup.spec.ts | 25 +++- .../knowledge_base_status.spec.ts | 22 +++- .../knowledge_base_user_instructions.spec.ts | 38 ++++++ 16 files changed, 449 insertions(+), 60 deletions(-) diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts index e80e6fa156b06..5ef72dc8e7b56 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/chat/route.ts @@ -126,8 +126,10 @@ async function initializeChatRequest({ const chatRoute = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /internal/observability_ai_assistant/chat', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, params: t.type({ body: t.intersection([ @@ -174,8 +176,10 @@ const chatRoute = createObservabilityAIAssistantServerRoute({ const chatRecallRoute = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /internal/observability_ai_assistant/chat/recall', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, params: t.type({ body: t.type({ @@ -282,8 +286,10 @@ async function chatComplete( const chatCompleteRoute = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /internal/observability_ai_assistant/chat/complete', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, params: chatCompleteInternalRt, handler: async (resources): Promise => { @@ -293,8 +299,10 @@ const chatCompleteRoute = createObservabilityAIAssistantServerRoute({ const publicChatCompleteRoute = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /api/observability_ai_assistant/chat/complete 2023-10-31', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, params: chatCompletePublicRt, handler: async (resources): Promise => { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts index 24d63d3f7fa06..80bc877e6f5f9 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/connectors/route.ts @@ -10,8 +10,10 @@ import { createObservabilityAIAssistantServerRoute } from '../create_observabili const listConnectorsRoute = createObservabilityAIAssistantServerRoute({ endpoint: 'GET /internal/observability_ai_assistant/connectors', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { request, plugins } = resources; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/conversations/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/conversations/route.ts index 7e59be004cac9..e320376bc7357 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/conversations/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/conversations/route.ts @@ -17,8 +17,10 @@ const getConversationRoute = createObservabilityAIAssistantServerRoute({ conversationId: t.string, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { service, request, params } = resources; @@ -40,8 +42,10 @@ const findConversationsRoute = createObservabilityAIAssistantServerRoute({ query: t.string, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise<{ conversations: Conversation[] }> => { const { service, request, params } = resources; @@ -63,8 +67,10 @@ const createConversationRoute = createObservabilityAIAssistantServerRoute({ conversation: conversationCreateRt, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { service, request, params } = resources; @@ -89,8 +95,10 @@ const updateConversationRoute = createObservabilityAIAssistantServerRoute({ conversation: conversationUpdateRt, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { service, request, params } = resources; @@ -115,8 +123,10 @@ const updateConversationTitle = createObservabilityAIAssistantServerRoute({ title: t.string, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { service, request, params } = resources; @@ -143,8 +153,10 @@ const deleteConversationRoute = createObservabilityAIAssistantServerRoute({ conversationId: t.string, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const { service, request, params } = resources; diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts index 1571487765c09..c5f571769dfb6 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/functions/route.ts @@ -22,8 +22,10 @@ const getFunctionsRoute = createObservabilityAIAssistantServerRoute({ scopes: t.union([t.array(assistantScopeType), assistantScopeType]), }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async ( resources @@ -97,8 +99,10 @@ const functionRecallRoute = createObservabilityAIAssistantServerRoute({ }), ]), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async ( resources @@ -132,8 +136,10 @@ const functionSummariseRoute = createObservabilityAIAssistantServerRoute({ labels: t.record(t.string, t.string), }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/knowledge_base/route.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/knowledge_base/route.ts index 37e9248a0c624..4ff94393bc525 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/knowledge_base/route.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/knowledge_base/route.ts @@ -20,8 +20,10 @@ import { Instruction, KnowledgeBaseEntry, KnowledgeBaseEntryRole } from '../../. const getKnowledgeBaseStatus = createObservabilityAIAssistantServerRoute({ endpoint: 'GET /internal/observability_ai_assistant/kb/status', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async ({ service, @@ -54,11 +56,15 @@ const setupKnowledgeBase = createObservabilityAIAssistantServerRoute({ }), }), options: { - tags: ['access:ai_assistant'], timeout: { idleSocket: moment.duration(20, 'minutes').asMilliseconds(), }, }, + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, + }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); @@ -74,8 +80,10 @@ const setupKnowledgeBase = createObservabilityAIAssistantServerRoute({ const resetKnowledgeBase = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /internal/observability_ai_assistant/kb/reset', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise<{ result: string }> => { const client = await resources.service.getClient({ request: resources.request }); @@ -92,8 +100,10 @@ const resetKnowledgeBase = createObservabilityAIAssistantServerRoute({ const semanticTextMigrationKnowledgeBase = createObservabilityAIAssistantServerRoute({ endpoint: 'POST /internal/observability_ai_assistant/kb/semantic_text_migration', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); @@ -108,8 +118,10 @@ const semanticTextMigrationKnowledgeBase = createObservabilityAIAssistantServerR const getKnowledgeBaseUserInstructions = createObservabilityAIAssistantServerRoute({ endpoint: 'GET /internal/observability_ai_assistant/kb/user_instructions', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async ( resources @@ -137,8 +149,10 @@ const saveKnowledgeBaseUserInstruction = createObservabilityAIAssistantServerRou public: toBooleanRt, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); @@ -156,8 +170,10 @@ const saveKnowledgeBaseUserInstruction = createObservabilityAIAssistantServerRou const getKnowledgeBaseEntries = createObservabilityAIAssistantServerRoute({ endpoint: 'GET /internal/observability_ai_assistant/kb/entries', - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, params: t.type({ query: t.type({ @@ -207,8 +223,10 @@ const saveKnowledgeBaseEntry = createObservabilityAIAssistantServerRoute({ params: t.type({ body: knowledgeBaseEntryRt, }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); @@ -238,8 +256,10 @@ const deleteKnowledgeBaseEntry = createObservabilityAIAssistantServerRoute({ entryId: t.string, }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); @@ -259,8 +279,10 @@ const importKnowledgeBaseEntries = createObservabilityAIAssistantServerRoute({ entries: t.array(knowledgeBaseEntryRt), }), }), - options: { - tags: ['access:ai_assistant'], + security: { + authz: { + requiredPrivileges: ['ai_assistant'], + }, }, handler: async (resources): Promise => { const client = await resources.service.getClient({ request: resources.request }); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts index 645da146dfb89..38a8f0632920b 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/routes/types.ts @@ -85,5 +85,4 @@ export interface ObservabilityAIAssistantRouteCreateOptions { payload?: number; idleSocket?: number; }; - tags: Array<'access:ai_assistant'>; } diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/config.ts b/x-pack/test/observability_ai_assistant_api_integration/common/config.ts index 427258a6e2910..6505ad3e94d64 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/common/config.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/common/config.ts @@ -11,7 +11,7 @@ import { ObservabilityAIAssistantFtrConfigName } from '../configs'; import { getApmSynthtraceEsClient } from './create_synthtrace_client'; import { InheritedFtrProviderContext, InheritedServices } from './ftr_provider_context'; import { getScopedApiClient } from './observability_ai_assistant_api_client'; -import { editor, secondaryEditor, viewer } from './users/users'; +import { editor, secondaryEditor, unauthorizedUser, viewer } from './users/users'; export interface ObservabilityAIAssistantFtrConfig { name: ObservabilityAIAssistantFtrConfigName; @@ -33,6 +33,16 @@ export type ObservabilityAIAssistantAPIClient = Awaited< export type ObservabilityAIAssistantServices = Awaited>['services']; +export class ForbiddenApiError extends Error { + status: number; + + constructor(message: string = 'Forbidden') { + super(message); + this.name = 'ForbiddenApiError'; + this.status = 403; + } +} + export function createObservabilityAIAssistantAPIConfig({ config, license, @@ -67,6 +77,7 @@ export function createObservabilityAIAssistantAPIConfig({ viewer: getScopedApiClientForUsername(viewer.username), editor: getScopedApiClientForUsername(editor.username), secondaryEditor: getScopedApiClientForUsername(secondaryEditor.username), + unauthorizedUser: getScopedApiClientForUsername(unauthorizedUser.username), }; }, }, diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts b/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts index 898954a9bfb97..2dc5a433517f3 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts @@ -6,10 +6,14 @@ */ import { kbnTestConfig } from '@kbn/test'; + const password = kbnTestConfig.getUrlParts().password!; +export const UNAUTHORIZED_USERNAME = 'unauthorized_user'; +export const UNAUTHORIZED_USER_PASSWORD = 'unauthorized_password'; + export interface User { - username: 'elastic' | 'editor' | 'viewer' | 'secondary_editor'; + username: 'elastic' | 'editor' | 'viewer' | 'secondary_editor' | 'unauthorized_user'; password: string; roles: string[]; } @@ -32,4 +36,10 @@ export const viewer: User = { roles: ['viewer'], }; -export const allUsers = [editor, secondaryEditor, viewer]; +export const unauthorizedUser: User = { + username: UNAUTHORIZED_USERNAME, + password: UNAUTHORIZED_USER_PASSWORD, + roles: [], +}; + +export const allUsers = [editor, secondaryEditor, viewer, unauthorizedUser]; diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/chat/chat.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/chat/chat.spec.ts index d514d6ddb7025..cedd4c286dc1a 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/chat/chat.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/chat/chat.spec.ts @@ -11,10 +11,12 @@ import { PassThrough } from 'stream'; import { createLlmProxy, LlmProxy } from '../../common/create_llm_proxy'; import { FtrProviderContext } from '../../common/ftr_provider_context'; import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const supertest = getService('supertest'); const log = getService('log'); + const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); const CHAT_API_URL = `/internal/observability_ai_assistant/chat`; @@ -183,5 +185,27 @@ export default function ApiTest({ getService }: FtrProviderContext) { `Token limit reached. Token limit is 8192, but the current conversation has 11036 tokens.` ); }); + + describe('security roles and access privileges', () => { + it('should deny access for users without the ai_assistant privilege', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: `POST ${CHAT_API_URL}`, + params: { + body: { + name: 'my_api_call', + messages, + connectorId, + functions: [], + scopes: ['all'], + }, + }, + }); + throw new ForbiddenApiError('Expected unauthorizedUser() to throw a 403 Forbidden error'); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts index 2eb7c6f986cfd..86e357e2e7760 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/complete/complete.spec.ts @@ -32,6 +32,7 @@ import { getConversationUpdatedEvent, } from '../conversations/helpers'; import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const supertest = getService('supertest'); @@ -39,7 +40,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); - const COMPLETE_API_URL = `/internal/observability_ai_assistant/chat/complete`; + const COMPLETE_API_URL = '/internal/observability_ai_assistant/chat/complete'; const messages: Message[] = [ { @@ -486,5 +487,27 @@ export default function ApiTest({ getService }: FtrProviderContext) { // todo it.skip('executes a function', async () => {}); + + describe('security roles and access privileges', () => { + it('should deny access for users without the ai_assistant privilege', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'POST /internal/observability_ai_assistant/chat/complete', + params: { + body: { + messages, + connectorId, + persist: false, + screenContexts: [], + scopes: ['all'], + }, + }, + }); + throw new ForbiddenApiError('Expected unauthorizedUser() to throw a 403 Forbidden error'); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts index 41700b21555fa..42e1f8751719e 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/connectors/connectors.spec.ts @@ -9,12 +9,15 @@ import expect from '@kbn/expect'; import type { Agent as SuperTestAgent } from 'supertest'; import { FtrProviderContext } from '../../common/ftr_provider_context'; import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); const supertest = getService('supertest'); const log = getService('log'); + const CONNECTOR_API_URL = '/internal/observability_ai_assistant/connectors'; + describe('List connectors', () => { before(async () => { await deleteAllActionConnectors(supertest); @@ -27,14 +30,14 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('Returns a 2xx for enterprise license', async () => { await observabilityAIAssistantAPIClient .editor({ - endpoint: 'GET /internal/observability_ai_assistant/connectors', + endpoint: `GET ${CONNECTOR_API_URL}`, }) .expect(200); }); it('returns an empty list of connectors', async () => { const res = await observabilityAIAssistantAPIClient.editor({ - endpoint: 'GET /internal/observability_ai_assistant/connectors', + endpoint: `GET ${CONNECTOR_API_URL}`, }); expect(res.body.length).to.be(0); @@ -44,13 +47,26 @@ export default function ApiTest({ getService }: FtrProviderContext) { const connectorId = await createProxyActionConnector({ supertest, log, port: 1234 }); const res = await observabilityAIAssistantAPIClient.editor({ - endpoint: 'GET /internal/observability_ai_assistant/connectors', + endpoint: `GET ${CONNECTOR_API_URL}`, }); expect(res.body.length).to.be(1); await deleteActionConnector({ supertest, connectorId, log }); }); + + describe('security roles and access privileges', () => { + it('should deny access for users without the ai_assistant privilege', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: `GET ${CONNECTOR_API_URL}`, + }); + throw new ForbiddenApiError('Expected unauthorizedUser() to throw a 403 Forbidden error'); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts index 71eb37d357696..bb85e99b99500 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/conversations/conversations.spec.ts @@ -14,6 +14,7 @@ import { } from '@kbn/observability-ai-assistant-plugin/common/types'; import type { FtrProviderContext } from '../../common/ftr_provider_context'; import type { SupertestReturnType } from '../../common/observability_ai_assistant_api_client'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); @@ -250,5 +251,128 @@ export default function ApiTest({ getService }: FtrProviderContext) { }); }); }); + + describe('security roles and access privileges', () => { + describe('should deny access for users without the ai_assistant privilege', () => { + let createResponse: Awaited< + SupertestReturnType<'POST /internal/observability_ai_assistant/conversation'> + >; + before(async () => { + createResponse = await observabilityAIAssistantAPIClient + .editor({ + endpoint: 'POST /internal/observability_ai_assistant/conversation', + params: { + body: { + conversation: conversationCreate, + }, + }, + }) + .expect(200); + }); + + after(async () => { + await observabilityAIAssistantAPIClient + .editor({ + endpoint: 'DELETE /internal/observability_ai_assistant/conversation/{conversationId}', + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + }, + }) + .expect(200); + }); + + it('POST /internal/observability_ai_assistant/conversation', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'POST /internal/observability_ai_assistant/conversation', + params: { + body: { + conversation: conversationCreate, + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('POST /internal/observability_ai_assistant/conversations', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'POST /internal/observability_ai_assistant/conversations', + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('PUT /internal/observability_ai_assistant/conversation/{conversationId}', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'PUT /internal/observability_ai_assistant/conversation/{conversationId}', + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + body: { + conversation: merge(omit(conversationUpdate, 'conversation.id'), { + conversation: { id: createResponse.body.conversation.id }, + }), + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('GET /internal/observability_ai_assistant/conversation/{conversationId}', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'GET /internal/observability_ai_assistant/conversation/{conversationId}', + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('DELETE /internal/observability_ai_assistant/conversation/{conversationId}', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'DELETE /internal/observability_ai_assistant/conversation/{conversationId}', + params: { + path: { + conversationId: createResponse.body.conversation.id, + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base.spec.ts index 8d8c2e2417686..9d80db3baeae6 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base.spec.ts @@ -15,6 +15,7 @@ import { deleteInferenceEndpoint, deleteKnowledgeBaseModel, } from './helpers'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const ml = getService('ml'); @@ -210,6 +211,62 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(entries[0].title).to.eql('My title b'); }); }); + + describe('security roles and access privileges', () => { + describe('should deny access for users without the ai_assistant privilege', () => { + it('POST /internal/observability_ai_assistant/kb/entries/save', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'POST /internal/observability_ai_assistant/kb/entries/save', + params: { + body: { + id: 'my-doc-id-1', + title: 'My title', + text: 'My content', + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('GET /internal/observability_ai_assistant/kb/entries', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/entries', + params: { + query: { query: '', sortBy: 'title', sortDirection: 'asc' }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('DELETE /internal/observability_ai_assistant/kb/entries/{entryId}', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'DELETE /internal/observability_ai_assistant/kb/entries/{entryId}', + params: { + path: { entryId: 'my-doc-id-1' }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_setup.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_setup.spec.ts index 7903f4b53966a..0d7625bb63ed3 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_setup.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_setup.spec.ts @@ -13,18 +13,21 @@ import { TINY_ELSER, deleteInferenceEndpoint, } from './helpers'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const ml = getService('ml'); const es = getService('es'); const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + const KNOWLEDGE_BASE_SETUP_API_URL = '/internal/observability_ai_assistant/kb/setup'; + describe('/internal/observability_ai_assistant/kb/setup', () => { it('returns model info when successful', async () => { await createKnowledgeBaseModel(ml); const res = await observabilityAIAssistantAPIClient .admin({ - endpoint: 'POST /internal/observability_ai_assistant/kb/setup', + endpoint: `POST ${KNOWLEDGE_BASE_SETUP_API_URL}`, params: { query: { model_id: TINY_ELSER.id, @@ -43,7 +46,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('returns error message if model is not deployed', async () => { const res = await observabilityAIAssistantAPIClient .admin({ - endpoint: 'POST /internal/observability_ai_assistant/kb/setup', + endpoint: `POST ${KNOWLEDGE_BASE_SETUP_API_URL}`, params: { query: { model_id: TINY_ELSER.id, @@ -60,5 +63,23 @@ export default function ApiTest({ getService }: FtrProviderContext) { // @ts-expect-error expect(res.body.statusCode).to.be(500); }); + + describe('security roles and access privileges', () => { + it('should deny access for users without the ai_assistant privilege', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: `POST ${KNOWLEDGE_BASE_SETUP_API_URL}`, + params: { + query: { + model_id: TINY_ELSER.id, + }, + }, + }); + throw new ForbiddenApiError('Expected unauthorizedUser() to throw a 403 Forbidden error'); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_status.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_status.spec.ts index 8c10a6128d302..3f66931ca0719 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_status.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_status.spec.ts @@ -13,12 +13,15 @@ import { TINY_ELSER, deleteInferenceEndpoint, } from './helpers'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const ml = getService('ml'); const es = getService('es'); const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); + const KNOWLEDGE_BASE_STATUS_API_URL = '/internal/observability_ai_assistant/kb/status'; + describe('/internal/observability_ai_assistant/kb/status', () => { beforeEach(async () => { await createKnowledgeBaseModel(ml); @@ -41,7 +44,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { it('returns correct status after knowledge base is setup', async () => { const res = await observabilityAIAssistantAPIClient - .editor({ endpoint: 'GET /internal/observability_ai_assistant/kb/status' }) + .editor({ endpoint: `GET ${KNOWLEDGE_BASE_STATUS_API_URL}` }) .expect(200); expect(res.body.ready).to.be(true); @@ -54,7 +57,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const res = await observabilityAIAssistantAPIClient .editor({ - endpoint: 'GET /internal/observability_ai_assistant/kb/status', + endpoint: `GET ${KNOWLEDGE_BASE_STATUS_API_URL}`, }) .expect(200); @@ -70,7 +73,7 @@ export default function ApiTest({ getService }: FtrProviderContext) { const res = await observabilityAIAssistantAPIClient .editor({ - endpoint: 'GET /internal/observability_ai_assistant/kb/status', + endpoint: `GET ${KNOWLEDGE_BASE_STATUS_API_URL}`, }) .expect(200); @@ -80,5 +83,18 @@ export default function ApiTest({ getService }: FtrProviderContext) { 'Inference endpoint not found [obs_ai_assistant_kb_inference]' ); }); + + describe('security roles and access privileges', () => { + it('should deny access for users without the ai_assistant privilege', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: `GET ${KNOWLEDGE_BASE_STATUS_API_URL}`, + }); + throw new ForbiddenApiError('Expected unauthorizedUser() to throw a 403 Forbidden error'); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); }); } diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts index cde2c9e4b4a83..d5022a052d781 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts +++ b/x-pack/test/observability_ai_assistant_api_integration/tests/knowledge_base/knowledge_base_user_instructions.spec.ts @@ -23,6 +23,7 @@ import { getConversationCreatedEvent } from '../conversations/helpers'; import { LlmProxy, createLlmProxy } from '../../common/create_llm_proxy'; import { createProxyActionConnector, deleteActionConnector } from '../../common/action_connectors'; import { User } from '../../common/users/users'; +import { ForbiddenApiError } from '../../common/config'; export default function ApiTest({ getService }: FtrProviderContext) { const observabilityAIAssistantAPIClient = getService('observabilityAIAssistantAPIClient'); @@ -362,5 +363,42 @@ export default function ApiTest({ getService }: FtrProviderContext) { expect(res2).to.be(''); }); }); + + describe('security roles and access privileges', () => { + describe('should deny access for users without the ai_assistant privilege', () => { + it('PUT /internal/observability_ai_assistant/kb/user_instructions', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'PUT /internal/observability_ai_assistant/kb/user_instructions', + params: { + body: { + id: 'test-instruction', + text: 'Test user instruction', + public: true, + }, + }, + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + + it('GET /internal/observability_ai_assistant/kb/user_instructions', async () => { + try { + await observabilityAIAssistantAPIClient.unauthorizedUser({ + endpoint: 'GET /internal/observability_ai_assistant/kb/user_instructions', + }); + throw new ForbiddenApiError( + 'Expected unauthorizedUser() to throw a 403 Forbidden error' + ); + } catch (e) { + expect(e.status).to.be(403); + } + }); + }); + }); }); } From 446599bff08bb56c86a9e11afb1d32cec6d68a61 Mon Sep 17 00:00:00 2001 From: Jeramy Soucy Date: Wed, 4 Dec 2024 15:28:12 -0500 Subject: [PATCH 050/141] =?UTF-8?q?Upgrade=20webpack=205.91.0=20=E2=86=92?= =?UTF-8?q?=205.96.1=20(#202534)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Upgrades references to webpack5 from v5.91.0 to v5.96.1 A v4 to v5 upgrade is being explored here: https://github.com/elastic/kibana/pull/191106 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- yarn.lock | 113 ++++++++++++++++++++++++------------------------------ 1 file changed, 51 insertions(+), 62 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1ab064efad6df..a422f50ff18b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11418,10 +11418,10 @@ "@types/cheerio" "*" "@types/react" "*" -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== +"@types/eslint-scope@^3.7.7": + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" "@types/estree" "*" @@ -11460,15 +11460,10 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/estree@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/estree@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@^1.0.0", "@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/expect@^1.20.4": version "1.20.4" @@ -13145,11 +13140,6 @@ acorn-globals@^7.0.0: acorn "^8.1.0" acorn-walk "^8.0.2" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - acorn-import-attributes@^1.9.5: version "1.9.5" resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" @@ -13203,10 +13193,10 @@ acorn@^7.0.0, acorn@^7.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.1.0, acorn@^8.11.0, acorn@^8.12.1, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2, acorn@^8.9.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.13.0.tgz#2a30d670818ad16ddd6a35d3842dacec9e5d7ca3" - integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== +acorn@^8.0.4, acorn@^8.1.0, acorn@^8.11.0, acorn@^8.12.1, acorn@^8.14.0, acorn@^8.4.1, acorn@^8.8.0, acorn@^8.8.2, acorn@^8.9.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== address@^1.0.1: version "1.1.2" @@ -14635,15 +14625,15 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.20.3, browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4.20.3, browserslist@^4.22.2, browserslist@^4.23.0, browserslist@^4.24.0: + version "4.24.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" + integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" + caniuse-lite "^1.0.30001669" + electron-to-chromium "^1.5.41" + node-releases "^2.0.18" + update-browserslist-db "^1.1.1" bser@^2.0.0: version "2.0.0" @@ -14957,10 +14947,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001587: - version "1.0.30001655" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" - integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001669: + version "1.0.30001685" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001685.tgz#2d10d36c540a9a5d47ad6ab9e1ed5f61fdeadd8c" + integrity sha512-e/kJN1EMyHQzgcMEEgoo+YTCO1NGCmIYHk5Qk8jT6AazWemS5QFKJ5ShCJlH3GZrNIdZofcNCEwZqbMjjKzmnA== canvg@^3.0.9: version "3.0.9" @@ -17685,10 +17675,10 @@ elasticsearch@^16.4.0: chalk "^1.0.0" lodash "^4.17.10" -electron-to-chromium@^1.4.668: - version "1.4.701" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.701.tgz#7335e5761331774b4dea54cd24a1b84861d45cdf" - integrity sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA== +electron-to-chromium@^1.5.41: + version "1.5.67" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz#66ebd2be4a77469ac2760ef5e9e460ba9a43a845" + integrity sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ== element-resize-detector@^1.2.2: version "1.2.3" @@ -17790,7 +17780,7 @@ enhanced-resolve@^4.5.0: memory-fs "^0.5.0" tapable "^1.0.0" -enhanced-resolve@^5.14.1, enhanced-resolve@^5.16.0, enhanced-resolve@^5.17.1, enhanced-resolve@^5.7.0: +enhanced-resolve@^5.14.1, enhanced-resolve@^5.17.1, enhanced-resolve@^5.7.0: version "5.17.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== @@ -18125,10 +18115,10 @@ esbuild@^0.19.11: "@esbuild/win32-ia32" "0.19.12" "@esbuild/win32-x64" "0.19.12" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" @@ -25119,10 +25109,10 @@ node-readfiles@^0.2.0: dependencies: es6-promise "^3.2.1" -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== node-source-walk@^6.0.0, node-source-walk@^6.0.1, node-source-walk@^6.0.2: version "6.0.2" @@ -32118,13 +32108,13 @@ untildify@^4.0.0: resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.2.0" + picocolors "^1.1.0" uri-js-replace@^1.0.1: version "1.0.1" @@ -33174,20 +33164,19 @@ webpack@4, webpack@^4.41.5: webpack-sources "^1.4.1" "webpack@>=4.43.0 <6.0.0", webpack@^5: - version "5.91.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" - integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== + version "5.96.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.96.1.tgz#3676d1626d8312b6b10d0c18cc049fba7ac01f0c" + integrity sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA== dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.5" + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.6" "@webassemblyjs/ast" "^1.12.1" "@webassemblyjs/wasm-edit" "^1.12.1" "@webassemblyjs/wasm-parser" "^1.12.1" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.21.10" + acorn "^8.14.0" + browserslist "^4.24.0" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.16.0" + enhanced-resolve "^5.17.1" es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" From 467cfa6a8d8dcc73f76857e2c330f4b0ae17d86c Mon Sep 17 00:00:00 2001 From: Steph Milovic Date: Wed, 4 Dec 2024 14:16:45 -0700 Subject: [PATCH 051/141] [Security Assistant] Product documentation tool (#199694) --- x-pack/plugins/elastic_assistant/kibana.jsonc | 4 +- .../server/__mocks__/request_context.ts | 2 + .../ai_assistant_service/helpers.test.ts | 79 ++++++++++++++++ .../server/ai_assistant_service/helpers.ts | 24 +++++ .../server/ai_assistant_service/index.test.ts | 6 ++ .../server/ai_assistant_service/index.ts | 22 ++++- .../server/lib/langchain/executors/types.ts | 4 +- .../graphs/default_assistant_graph/index.ts | 2 + .../elastic_assistant/server/plugin.ts | 3 + .../routes/chat/chat_complete_route.test.ts | 1 + .../server/routes/chat/chat_complete_route.ts | 3 + .../server/routes/evaluate/post_evaluate.ts | 3 + .../server/routes/helpers.ts | 4 + .../post_actions_connector_execute.test.ts | 1 + .../routes/post_actions_connector_execute.ts | 3 + .../server/routes/request_context_factory.ts | 2 +- .../plugins/elastic_assistant/server/types.ts | 6 ++ .../plugins/elastic_assistant/tsconfig.json | 4 +- .../server/assistant/tools/index.ts | 8 +- .../product_documentation_tool.test.ts | 93 +++++++++++++++++++ .../product_documentation_tool.ts | 79 ++++++++++++++++ .../plugins/security_solution/tsconfig.json | 3 +- 22 files changed, 346 insertions(+), 10 deletions(-) create mode 100644 x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.test.ts create mode 100644 x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.test.ts create mode 100644 x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.ts diff --git a/x-pack/plugins/elastic_assistant/kibana.jsonc b/x-pack/plugins/elastic_assistant/kibana.jsonc index 435ec0b916d01..2b06f1e0db65e 100644 --- a/x-pack/plugins/elastic_assistant/kibana.jsonc +++ b/x-pack/plugins/elastic_assistant/kibana.jsonc @@ -17,9 +17,11 @@ "ml", "taskManager", "licensing", + "llmTasks", "inference", + "productDocBase", "spaces", "security" ] } -} \ No newline at end of file +} diff --git a/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts b/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts index 77bd6b00105b6..3837c158ba199 100644 --- a/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts +++ b/x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts @@ -53,6 +53,7 @@ export const createMockClients = () => { getSpaceId: jest.fn(), getCurrentUser: jest.fn(), inference: jest.fn(), + llmTasks: jest.fn(), }, savedObjectsClient: core.savedObjects.client, @@ -145,6 +146,7 @@ const createElasticAssistantRequestContextMock = ( getServerBasePath: jest.fn(), getSpaceId: jest.fn().mockReturnValue('default'), inference: { getClient: jest.fn() }, + llmTasks: { retrieveDocumentationAvailable: jest.fn(), retrieveDocumentation: jest.fn() }, core: clients.core, telemetry: clients.elasticAssistant.telemetry, }; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.test.ts new file mode 100644 index 0000000000000..8cd020149c433 --- /dev/null +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.test.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ensureProductDocumentationInstalled } from './helpers'; +import { loggerMock } from '@kbn/logging-mocks'; + +const mockLogger = loggerMock.create(); +const mockProductDocManager = { + getStatus: jest.fn(), + install: jest.fn(), + uninstall: jest.fn(), + update: jest.fn(), +}; + +describe('helpers', () => { + describe('ensureProductDocumentationInstalled', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should install product documentation if not installed', async () => { + mockProductDocManager.getStatus.mockResolvedValue({ status: 'uninstalled' }); + mockProductDocManager.install.mockResolvedValue(null); + + await ensureProductDocumentationInstalled(mockProductDocManager, mockLogger); + + expect(mockProductDocManager.getStatus).toHaveBeenCalled(); + expect(mockLogger.debug).toHaveBeenCalledWith( + 'Installing product documentation for AIAssistantService' + ); + expect(mockProductDocManager.install).toHaveBeenCalled(); + expect(mockLogger.debug).toHaveBeenNthCalledWith( + 2, + 'Successfully installed product documentation for AIAssistantService' + ); + }); + + it('should not install product documentation if already installed', async () => { + mockProductDocManager.getStatus.mockResolvedValue({ status: 'installed' }); + + await ensureProductDocumentationInstalled(mockProductDocManager, mockLogger); + + expect(mockProductDocManager.getStatus).toHaveBeenCalled(); + expect(mockProductDocManager.install).not.toHaveBeenCalled(); + expect(mockLogger.debug).not.toHaveBeenCalledWith( + 'Installing product documentation for AIAssistantService' + ); + }); + it('should log a warning if install fails', async () => { + mockProductDocManager.getStatus.mockResolvedValue({ status: 'not_installed' }); + mockProductDocManager.install.mockRejectedValue(new Error('Install failed')); + + await ensureProductDocumentationInstalled(mockProductDocManager, mockLogger); + + expect(mockProductDocManager.getStatus).toHaveBeenCalled(); + expect(mockProductDocManager.install).toHaveBeenCalled(); + + expect(mockLogger.warn).toHaveBeenCalledWith( + 'Failed to install product documentation for AIAssistantService: Install failed' + ); + }); + + it('should log a warning if getStatus fails', async () => { + mockProductDocManager.getStatus.mockRejectedValue(new Error('Status check failed')); + + await ensureProductDocumentationInstalled(mockProductDocManager, mockLogger); + + expect(mockProductDocManager.getStatus).toHaveBeenCalled(); + expect(mockLogger.warn).toHaveBeenCalledWith( + 'Failed to get status of product documentation installation for AIAssistantService: Status check failed' + ); + expect(mockProductDocManager.install).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts index 2a4ad628eb757..9067e42ca88bb 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/helpers.ts @@ -11,6 +11,8 @@ import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-ser import type { MlPluginSetup } from '@kbn/ml-plugin/server'; import { DeleteByQueryRequest } from '@elastic/elasticsearch/lib/api/types'; import { i18n } from '@kbn/i18n'; +import { ProductDocBaseStartContract } from '@kbn/product-doc-base-plugin/server'; +import type { Logger } from '@kbn/logging'; import { getResourceName } from '.'; import { knowledgeBaseIngestPipeline } from '../ai_assistant_data_clients/knowledge_base/ingest_pipeline'; import { GetElser } from '../types'; @@ -141,3 +143,25 @@ const ESQL_QUERY_GENERATION_TITLE = i18n.translate( defaultMessage: 'ES|QL Query Generation', } ); + +export const ensureProductDocumentationInstalled = async ( + productDocManager: ProductDocBaseStartContract['management'], + logger: Logger +) => { + try { + const { status } = await productDocManager.getStatus(); + if (status !== 'installed') { + logger.debug(`Installing product documentation for AIAssistantService`); + try { + await productDocManager.install(); + logger.debug(`Successfully installed product documentation for AIAssistantService`); + } catch (e) { + logger.warn(`Failed to install product documentation for AIAssistantService: ${e.message}`); + } + } + } catch (e) { + logger.warn( + `Failed to get status of product documentation installation for AIAssistantService: ${e.message}` + ); + } +}; diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts index 4bfd4da6cfcbf..c60fe9a220482 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.test.ts @@ -122,6 +122,12 @@ describe('AI Assistant Service', () => { kibanaVersion: '8.8.0', ml, taskManager: taskManagerMock.createSetup(), + productDocManager: Promise.resolve({ + getStatus: jest.fn(), + install: jest.fn(), + update: jest.fn(), + uninstall: jest.fn(), + }), }; }); diff --git a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts index 233b5781ddf68..ff0f95340d466 100644 --- a/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts +++ b/x-pack/plugins/elastic_assistant/server/ai_assistant_service/index.ts @@ -12,6 +12,7 @@ import type { TaskManagerSetupContract } from '@kbn/task-manager-plugin/server'; import type { MlPluginSetup } from '@kbn/ml-plugin/server'; import { Subject } from 'rxjs'; import { LicensingApiRequestHandlerContext } from '@kbn/licensing-plugin/server'; +import { ProductDocBaseStartContract } from '@kbn/product-doc-base-plugin/server'; import { attackDiscoveryFieldMap } from '../lib/attack_discovery/persistence/field_maps_configuration/field_maps_configuration'; import { defendInsightsFieldMap } from '../ai_assistant_data_clients/defend_insights/field_maps_configuration'; import { getDefaultAnonymizationFields } from '../../common/anonymization'; @@ -35,7 +36,12 @@ import { } from '../ai_assistant_data_clients/knowledge_base'; import { AttackDiscoveryDataClient } from '../lib/attack_discovery/persistence'; import { DefendInsightsDataClient } from '../ai_assistant_data_clients/defend_insights'; -import { createGetElserId, createPipeline, pipelineExists } from './helpers'; +import { + createGetElserId, + createPipeline, + ensureProductDocumentationInstalled, + pipelineExists, +} from './helpers'; import { hasAIAssistantLicense } from '../routes/helpers'; const TOTAL_FIELDS_LIMIT = 2500; @@ -51,6 +57,7 @@ export interface AIAssistantServiceOpts { ml: MlPluginSetup; taskManager: TaskManagerSetupContract; pluginStop$: Subject; + productDocManager: Promise; } export interface CreateAIAssistantClientParams { @@ -87,6 +94,7 @@ export class AIAssistantService { private initPromise: Promise; private isKBSetupInProgress: boolean = false; private hasInitializedV2KnowledgeBase: boolean = false; + private productDocManager?: ProductDocBaseStartContract['management']; constructor(private readonly options: AIAssistantServiceOpts) { this.initialized = false; @@ -129,6 +137,13 @@ export class AIAssistantService { this.initPromise, this.installAndUpdateSpaceLevelResources.bind(this) ); + options.productDocManager + .then((productDocManager) => { + this.productDocManager = productDocManager; + }) + .catch((error) => { + this.options.logger.warn(`Failed to initialize productDocManager: ${error.message}`); + }); } public isInitialized() { @@ -183,6 +198,11 @@ export class AIAssistantService { this.options.logger.debug(`Initializing resources for AIAssistantService`); const esClient = await this.options.elasticsearchClientPromise; + if (this.productDocManager) { + // install product documentation without blocking other resources + void ensureProductDocumentationInstalled(this.productDocManager, this.options.logger); + } + await this.conversationsDataStream.install({ esClient, logger: this.options.logger, diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts index 7dea19755a686..abef39d8b2e25 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts @@ -17,6 +17,7 @@ import { PublicMethodsOf } from '@kbn/utility-types'; import type { InferenceServerStart } from '@kbn/inference-plugin/server'; import { AnalyticsServiceSetup } from '@kbn/core-analytics-server'; import { TelemetryParams } from '@kbn/langchain/server/tracers/telemetry/telemetry_tracer'; +import type { LlmTasksPluginStart } from '@kbn/llm-tasks-plugin/server'; import { ResponseBody } from '../types'; import type { AssistantTool } from '../../../types'; import { AIAssistantKnowledgeBaseDataClient } from '../../../ai_assistant_data_clients/knowledge_base'; @@ -45,10 +46,11 @@ export interface AgentExecutorParams { dataClients?: AssistantDataClients; esClient: ElasticsearchClient; langChainMessages: BaseMessage[]; + llmTasks?: LlmTasksPluginStart; llmType?: string; isOssModel?: boolean; - logger: Logger; inference: InferenceServerStart; + logger: Logger; onNewReplacements?: (newReplacements: Replacements) => void; replacements: Replacements; isStream?: T; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts index e9d2c1dd2618b..4ddd3eae11624 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts @@ -35,6 +35,7 @@ export const callAssistantGraph: AgentExecutor = async ({ esClient, inference, langChainMessages, + llmTasks, llmType, isOssModel, logger: parentLogger, @@ -106,6 +107,7 @@ export const callAssistantGraph: AgentExecutor = async ({ inference, isEnabledKnowledgeBase, kbDataClient: dataClients?.kbDataClient, + llmTasks, logger, onNewReplacements, replacements, diff --git a/x-pack/plugins/elastic_assistant/server/plugin.ts b/x-pack/plugins/elastic_assistant/server/plugin.ts index 110dbbc05f2a6..e93e3786b123c 100755 --- a/x-pack/plugins/elastic_assistant/server/plugin.ts +++ b/x-pack/plugins/elastic_assistant/server/plugin.ts @@ -63,6 +63,9 @@ export class ElasticAssistantPlugin elasticsearchClientPromise: core .getStartServices() .then(([{ elasticsearch }]) => elasticsearch.client.asInternalUser), + productDocManager: core + .getStartServices() + .then(([_, { productDocBase }]) => productDocBase.management), pluginStop$: this.pluginStop$, }); diff --git a/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.test.ts b/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.test.ts index 5d277abb00667..8cd2f0fd801d0 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.test.ts @@ -61,6 +61,7 @@ const mockContext = { getRegisteredFeatures: jest.fn(() => defaultAssistantFeatures), logger: loggingSystemMock.createLogger(), telemetry: { ...coreMock.createSetup().analytics, reportEvent }, + llmTasks: { retrieveDocumentationAvailable: jest.fn(), retrieveDocumentation: jest.fn() }, getCurrentUser: () => ({ username: 'user', email: 'email', diff --git a/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.ts b/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.ts index 35b4999a30249..cf1cff3d6201d 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.ts @@ -69,6 +69,8 @@ export const chatCompleteRoute = ( try { telemetry = ctx.elasticAssistant.telemetry; const inference = ctx.elasticAssistant.inference; + const productDocsAvailable = + (await ctx.elasticAssistant.llmTasks.retrieveDocumentationAvailable()) ?? false; // Perform license and authenticated user checks const checkResponse = performChecks({ @@ -217,6 +219,7 @@ export const chatCompleteRoute = ( response, telemetry, responseLanguage: request.body.responseLanguage, + ...(productDocsAvailable ? { llmTasks: ctx.elasticAssistant.llmTasks } : {}), }); } catch (err) { const error = transformError(err as Error); diff --git a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts index 4e4b7e5fcd251..3c61fe75f6d00 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts @@ -150,6 +150,8 @@ export const postEvaluateRoute = ( const esClient = ctx.core.elasticsearch.client.asCurrentUser; const inference = ctx.elasticAssistant.inference; + const productDocsAvailable = + (await ctx.elasticAssistant.llmTasks.retrieveDocumentationAvailable()) ?? false; // Data clients const anonymizationFieldsDataClient = @@ -280,6 +282,7 @@ export const postEvaluateRoute = ( connectorId: connector.id, size, telemetry: ctx.elasticAssistant.telemetry, + ...(productDocsAvailable ? { llmTasks: ctx.elasticAssistant.llmTasks } : {}), }; const tools: StructuredTool[] = assistantTools.flatMap( diff --git a/x-pack/plugins/elastic_assistant/server/routes/helpers.ts b/x-pack/plugins/elastic_assistant/server/routes/helpers.ts index 23ec7011be5b7..25d4ce1a2ec45 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/helpers.ts @@ -29,6 +29,7 @@ import { ActionsClient } from '@kbn/actions-plugin/server'; import { AssistantFeatureKey } from '@kbn/elastic-assistant-common/impl/capabilities'; import { getLangSmithTracer } from '@kbn/langchain/server/tracers/langsmith'; import type { InferenceServerStart } from '@kbn/inference-plugin/server'; +import type { LlmTasksPluginStart } from '@kbn/llm-tasks-plugin/server'; import { INVOKE_ASSISTANT_SUCCESS_EVENT } from '../lib/telemetry/event_based_telemetry'; import { AIAssistantKnowledgeBaseDataClient } from '../ai_assistant_data_clients/knowledge_base'; import { FindResponse } from '../ai_assistant_data_clients/find'; @@ -215,6 +216,7 @@ export interface LangChainExecuteParams { telemetry: AnalyticsServiceSetup; actionTypeId: string; connectorId: string; + llmTasks?: LlmTasksPluginStart; inference: InferenceServerStart; isOssModel?: boolean; conversationId?: string; @@ -246,6 +248,7 @@ export const langChainExecute = async ({ isOssModel, context, actionsClient, + llmTasks, inference, request, logger, @@ -301,6 +304,7 @@ export const langChainExecute = async ({ conversationId, connectorId, esClient, + llmTasks, inference, isStream, llmType: getLlmType(actionTypeId), diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts index a7abac27dac6f..9f4d0beb3caff 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.test.ts @@ -67,6 +67,7 @@ const mockContext = { actions: { getActionsClientWithRequest: jest.fn().mockResolvedValue(actionsClient), }, + llmTasks: { retrieveDocumentationAvailable: jest.fn(), retrieveDocumentation: jest.fn() }, getRegisteredTools: jest.fn(() => []), getRegisteredFeatures: jest.fn(() => defaultAssistantFeatures), logger: loggingSystemMock.createLogger(), diff --git a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts index 43264a6c1f54b..55c23629c5de1 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts @@ -97,6 +97,8 @@ export const postActionsConnectorExecuteRoute = ( // get the actions plugin start contract from the request context: const actions = ctx.elasticAssistant.actions; const inference = ctx.elasticAssistant.inference; + const productDocsAvailable = + (await ctx.elasticAssistant.llmTasks.retrieveDocumentationAvailable()) ?? false; const actionsClient = await actions.getActionsClientWithRequest(request); const connectors = await actionsClient.getBulk({ ids: [connectorId] }); const connector = connectors.length > 0 ? connectors[0] : undefined; @@ -150,6 +152,7 @@ export const postActionsConnectorExecuteRoute = ( response, telemetry, systemPrompt, + ...(productDocsAvailable ? { llmTasks: ctx.elasticAssistant.llmTasks } : {}), }); } catch (err) { logger.error(err); diff --git a/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts b/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts index ef921d7c91a28..30045b3da8ad9 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/request_context_factory.ts @@ -78,7 +78,7 @@ export class RequestContextFactory implements IRequestContextFactory { getRegisteredFeatures: (pluginName: string) => { return appContextService.getRegisteredFeatures(pluginName); }, - + llmTasks: startPlugins.llmTasks, inference: startPlugins.inference, telemetry: core.analytics, diff --git a/x-pack/plugins/elastic_assistant/server/types.ts b/x-pack/plugins/elastic_assistant/server/types.ts index 93f35d11eb877..6158acde679ff 100755 --- a/x-pack/plugins/elastic_assistant/server/types.ts +++ b/x-pack/plugins/elastic_assistant/server/types.ts @@ -20,6 +20,7 @@ import type { Logger, SecurityServiceStart, } from '@kbn/core/server'; +import type { LlmTasksPluginStart } from '@kbn/llm-tasks-plugin/server'; import { type MlPluginSetup } from '@kbn/ml-plugin/server'; import { DynamicStructuredTool, Tool } from '@langchain/core/tools'; import { SpacesPluginSetup, SpacesPluginStart } from '@kbn/spaces-plugin/server'; @@ -46,6 +47,7 @@ import { } from '@kbn/langchain/server'; import type { InferenceServerStart } from '@kbn/inference-plugin/server'; +import { ProductDocBaseStartContract } from '@kbn/product-doc-base-plugin/server'; import type { GetAIAssistantKnowledgeBaseDataClientParams } from './ai_assistant_data_clients/knowledge_base'; import { AttackDiscoveryDataClient } from './lib/attack_discovery/persistence'; import { AIAssistantConversationsDataClient } from './ai_assistant_data_clients/conversations'; @@ -111,10 +113,12 @@ export interface ElasticAssistantPluginSetupDependencies { } export interface ElasticAssistantPluginStartDependencies { actions: ActionsPluginStart; + llmTasks: LlmTasksPluginStart; inference: InferenceServerStart; spaces?: SpacesPluginStart; security: SecurityServiceStart; licensing: LicensingPluginStart; + productDocBase: ProductDocBaseStartContract; } export interface ElasticAssistantApiRequestHandlerContext { @@ -134,6 +138,7 @@ export interface ElasticAssistantApiRequestHandlerContext { getDefendInsightsDataClient: () => Promise; getAIAssistantPromptsDataClient: () => Promise; getAIAssistantAnonymizationFieldsDataClient: () => Promise; + llmTasks: LlmTasksPluginStart; inference: InferenceServerStart; telemetry: AnalyticsServiceSetup; } @@ -230,6 +235,7 @@ export interface AssistantToolParams { kbDataClient?: AIAssistantKnowledgeBaseDataClient; langChainTimeout?: number; llm?: ActionsClientLlm | AssistantToolLlm; + llmTasks?: LlmTasksPluginStart; isOssModel?: boolean; logger: Logger; onNewReplacements?: (newReplacements: Replacements) => void; diff --git a/x-pack/plugins/elastic_assistant/tsconfig.json b/x-pack/plugins/elastic_assistant/tsconfig.json index 52ed30dde67f8..5b9a7cb3466db 100644 --- a/x-pack/plugins/elastic_assistant/tsconfig.json +++ b/x-pack/plugins/elastic_assistant/tsconfig.json @@ -50,7 +50,9 @@ "@kbn/zod", "@kbn/inference-plugin", "@kbn/data-views-plugin", - "@kbn/core-analytics-server" + "@kbn/core-analytics-server", + "@kbn/llm-tasks-plugin", + "@kbn/product-doc-base-plugin" ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/security_solution/server/assistant/tools/index.ts b/x-pack/plugins/security_solution/server/assistant/tools/index.ts index f7824e688afe2..dc32e01335b30 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/index.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/index.ts @@ -5,8 +5,7 @@ * 2.0. */ -import type { AssistantTool } from '@kbn/elastic-assistant-plugin/server'; - +import { PRODUCT_DOCUMENTATION_TOOL } from './product_docs/product_documentation_tool'; import { NL_TO_ESQL_TOOL } from './esql/nl_to_esql_tool'; import { ALERT_COUNTS_TOOL } from './alert_counts/alert_counts_tool'; import { OPEN_AND_ACKNOWLEDGED_ALERTS_TOOL } from './open_and_acknowledged_alerts/open_and_acknowledged_alerts_tool'; @@ -15,12 +14,13 @@ import { KNOWLEDGE_BASE_RETRIEVAL_TOOL } from './knowledge_base/knowledge_base_r import { KNOWLEDGE_BASE_WRITE_TOOL } from './knowledge_base/knowledge_base_write_tool'; import { SECURITY_LABS_KNOWLEDGE_BASE_TOOL } from './security_labs/security_labs_tool'; -export const assistantTools: AssistantTool[] = [ +export const assistantTools = [ ALERT_COUNTS_TOOL, DEFEND_INSIGHTS_TOOL, - NL_TO_ESQL_TOOL, KNOWLEDGE_BASE_RETRIEVAL_TOOL, KNOWLEDGE_BASE_WRITE_TOOL, + NL_TO_ESQL_TOOL, OPEN_AND_ACKNOWLEDGED_ALERTS_TOOL, + PRODUCT_DOCUMENTATION_TOOL, SECURITY_LABS_KNOWLEDGE_BASE_TOOL, ]; diff --git a/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.test.ts b/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.test.ts new file mode 100644 index 0000000000000..d8d7e5995c92e --- /dev/null +++ b/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.test.ts @@ -0,0 +1,93 @@ +/* + * 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 { RetrievalQAChain } from 'langchain/chains'; +import type { DynamicStructuredTool, DynamicTool } from '@langchain/core/tools'; +import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import type { KibanaRequest } from '@kbn/core-http-server'; +import type { ExecuteConnectorRequestBody } from '@kbn/elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen'; +import { loggerMock } from '@kbn/logging-mocks'; +import { PRODUCT_DOCUMENTATION_TOOL } from './product_documentation_tool'; +import type { LlmTasksPluginStart } from '@kbn/llm-tasks-plugin/server'; + +describe('ProductDocumentationTool', () => { + const chain = {} as RetrievalQAChain; + const esClient = { + search: jest.fn().mockResolvedValue({}), + } as unknown as ElasticsearchClient; + const request = {} as unknown as KibanaRequest; + const logger = loggerMock.create(); + const retrieveDocumentation = jest.fn(); + const llmTasks = { + retrieveDocumentation, + retrieveDocumentationAvailable: jest.fn(), + } as LlmTasksPluginStart; + const connectorId = 'fake-connector'; + const defaultArgs = { + chain, + esClient, + logger, + request, + llmTasks, + connectorId, + isEnabledKnowledgeBase: true, + }; + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('isSupported', () => { + it('returns true if connectorId and llmTasks have values', () => { + expect(PRODUCT_DOCUMENTATION_TOOL.isSupported(defaultArgs)).toBe(true); + }); + }); + + describe('getTool', () => { + it('should return a tool as expected when all required values are present', () => { + const tool = PRODUCT_DOCUMENTATION_TOOL.getTool(defaultArgs) as DynamicTool; + expect(tool.name).toEqual('ProductDocumentationTool'); + expect(tool.tags).toEqual(['product-documentation']); + }); + + it('returns null if llmTasks plugin is not provided', () => { + const tool = PRODUCT_DOCUMENTATION_TOOL.getTool({ + ...defaultArgs, + llmTasks: undefined, + }); + + expect(tool).toBeNull(); + }); + + it('returns null if connectorId is not provided', () => { + const tool = PRODUCT_DOCUMENTATION_TOOL.getTool({ + ...defaultArgs, + connectorId: undefined, + }); + + expect(tool).toBeNull(); + }); + }); + describe('DynamicStructuredTool', () => { + beforeEach(() => { + retrieveDocumentation.mockResolvedValue({ documents: [] }); + }); + it('the tool invokes retrieveDocumentation', async () => { + const tool = PRODUCT_DOCUMENTATION_TOOL.getTool(defaultArgs) as DynamicStructuredTool; + + await tool.func({ query: 'What is Kibana Security?', product: 'kibana' }); + + expect(retrieveDocumentation).toHaveBeenCalledWith({ + searchTerm: 'What is Kibana Security?', + products: ['kibana'], + max: 3, + connectorId: 'fake-connector', + request, + functionCalling: 'native', + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.ts b/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.ts new file mode 100644 index 0000000000000..071a435e1311f --- /dev/null +++ b/x-pack/plugins/security_solution/server/assistant/tools/product_docs/product_documentation_tool.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { DynamicStructuredTool } from '@langchain/core/tools'; + +import { z } from '@kbn/zod'; +import type { AssistantTool, AssistantToolParams } from '@kbn/elastic-assistant-plugin/server'; +import { APP_UI_ID } from '../../../../common'; + +const toolDetails = { + description: + 'Use this tool to retrieve documentation about Elastic products. You can retrieve documentation about the Elastic stack, such as Kibana and Elasticsearch, or for Elastic solutions, such as Elastic Security, Elastic Observability or Elastic Enterprise Search.', + id: 'product-documentation-tool', + name: 'ProductDocumentationTool', +}; +export const PRODUCT_DOCUMENTATION_TOOL: AssistantTool = { + ...toolDetails, + sourceRegister: APP_UI_ID, + isSupported: (params: AssistantToolParams): params is AssistantToolParams => { + return params.llmTasks != null && params.connectorId != null; + }, + getTool(params: AssistantToolParams) { + if (!this.isSupported(params)) return null; + + const { connectorId, llmTasks, request } = params as AssistantToolParams; + + // This check is here in order to satisfy TypeScript + if (llmTasks == null || connectorId == null) return null; + + return new DynamicStructuredTool({ + name: toolDetails.name, + description: toolDetails.description, + schema: z.object({ + query: z.string().describe( + `The query to use to retrieve documentation + Examples: + - "How to enable TLS for Elasticsearch?" + - "What is Kibana Security?"` + ), + product: z + .enum(['kibana', 'elasticsearch', 'observability', 'security']) + .describe( + `If specified, will filter the products to retrieve documentation for + Possible options are: + - "kibana": Kibana product + - "elasticsearch": Elasticsearch product + - "observability": Elastic Observability solution + - "security": Elastic Security solution + If not specified, will search against all products + ` + ) + .optional(), + }), + func: async ({ query, product }) => { + const response = await llmTasks.retrieveDocumentation({ + searchTerm: query, + products: product ? [product] : undefined, + max: 3, + connectorId, + request, + // o11y specific parameter, hardcode to native as we do not utilize the other value (simulated) + functionCalling: 'native', + }); + + return { + content: { + documents: response.documents, + }, + }; + }, + tags: ['product-documentation'], + // TODO: Remove after ZodAny is fixed https://github.com/langchain-ai/langchainjs/blob/main/langchain-core/src/tools.ts + }) as unknown as DynamicStructuredTool; + }, +}; diff --git a/x-pack/plugins/security_solution/tsconfig.json b/x-pack/plugins/security_solution/tsconfig.json index 4ed7e1cbdd35f..4d11804796e2b 100644 --- a/x-pack/plugins/security_solution/tsconfig.json +++ b/x-pack/plugins/security_solution/tsconfig.json @@ -235,6 +235,7 @@ "@kbn/discover-shared-plugin", "@kbn/react-hooks", "@kbn/index-adapter", - "@kbn/core-http-server-utils" + "@kbn/core-http-server-utils", + "@kbn/llm-tasks-plugin" ] } From 941be486603ddd5e160ffda4b6c063d515090195 Mon Sep 17 00:00:00 2001 From: Samiul Monir <150824886+Samiul-TheSoccerFan@users.noreply.github.com> Date: Wed, 4 Dec 2024 16:49:31 -0500 Subject: [PATCH 052/141] Adding Tech Preview badge for Reranker (#202561) ## Summary Adding a `Tech Preview` badge for `reranker` model. ![reranker](https://github.com/user-attachments/assets/eb370f82-5127-4a9c-a00d-9a6d8adca34c) ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [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: Elastic Machine --- .../src/constants/trained_models.ts | 10 +--- .../render_endpoint/endpoint_info.test.tsx | 54 ++++++++++++++++++- .../render_endpoint/endpoint_info.tsx | 27 ++++++++-- .../render_endpoint/translations.ts | 7 +++ .../tabular_page.test.tsx | 45 +++++++++++++--- .../all_inference_endpoints/tabular_page.tsx | 4 +- .../public/utils/reranker_helper.test.ts | 54 +++++++++++++++++++ .../public/utils/reranker_helper.ts | 21 ++++++++ 8 files changed, 200 insertions(+), 22 deletions(-) create mode 100644 x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.test.ts create mode 100644 x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.ts diff --git a/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts b/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts index c2eb7d0ed8ef3..630fbe089cdc2 100644 --- a/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts +++ b/x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts @@ -5,6 +5,7 @@ * 2.0. */ +import type { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { i18n } from '@kbn/i18n'; export const ELSER_MODEL_ID = '.elser_model_2'; @@ -308,14 +309,7 @@ export type InferenceServiceSettings = }; }; -export type InferenceAPIConfigResponse = { - // Refers to a deployment id - inference_id: string; - task_type: 'sparse_embedding' | 'text_embedding'; - task_settings: { - model?: string; - }; -} & InferenceServiceSettings; +export type InferenceAPIConfigResponse = InferenceInferenceEndpointInfo & InferenceServiceSettings; export function isLocalModel( model: InferenceServiceSettings diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx index 1c91dcfd1aec3..4866c6fef802f 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx @@ -11,8 +11,60 @@ import { EndpointInfo } from './endpoint_info'; describe('RenderEndpoint component tests', () => { it('renders the component with inference id', () => { - render(); + const mockProvider = { + inference_id: 'cohere-2', + service: 'cohere', + service_settings: { + similarity: 'cosine', + dimensions: 384, + model_id: 'embed-english-light-v3.0', + rate_limit: { + requests_per_minute: 10000, + }, + embedding_type: 'byte', + }, + task_settings: {}, + } as any; + + render(); expect(screen.getByText('cohere-2')).toBeInTheDocument(); }); + + it('renders correctly without model_id in service_settings', () => { + const mockProvider = { + inference_id: 'azure-openai-1', + service: 'azureopenai', + service_settings: { + resource_name: 'resource-xyz', + deployment_id: 'deployment-123', + api_version: 'v1', + }, + } as any; + + render(); + + expect(screen.getByText('azure-openai-1')).toBeInTheDocument(); + }); + + it('renders with tech preview badge when endpoint is reranker type', () => { + const mockProvider = { + inference_id: 'elastic-rerank', + task_type: 'rerank', + service: 'elasticsearch', + service_settings: { + num_allocations: 1, + num_threads: 1, + model_id: '.rerank-v1', + }, + task_settings: { + return_documents: true, + }, + } as any; + + render(); + + expect(screen.getByText('elastic-rerank')).toBeInTheDocument(); + expect(screen.getByText('TECH PREVIEW')).toBeInTheDocument(); + }); }); diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx index 26b12328dafd4..7d5311815880f 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx @@ -7,19 +7,38 @@ import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; +import { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; import { isEndpointPreconfigured } from '../../../../utils/preconfigured_endpoint_helper'; import * as i18n from './translations'; +import { isProviderTechPreview } from '../../../../utils/reranker_helper'; export interface EndpointInfoProps { inferenceId: string; + provider: InferenceAPIConfigResponse; } -export const EndpointInfo: React.FC = ({ inferenceId }) => ( +export const EndpointInfo: React.FC = ({ inferenceId, provider }) => ( - - {inferenceId} - + + + + {inferenceId} + + + {isProviderTechPreview(provider) ? ( + + + + + + ) : null} + diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/translations.ts b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/translations.ts index 70b1576a9ddc0..7e3af28fdcbdc 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/translations.ts +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/translations.ts @@ -13,3 +13,10 @@ export const PRECONFIGURED_LABEL = i18n.translate( defaultMessage: 'PRECONFIGURED', } ); + +export const TECH_PREVIEW_LABEL = i18n.translate( + 'xpack.searchInferenceEndpoints.elasticsearch.endpointInfo.techPreview', + { + defaultMessage: 'TECH PREVIEW', + } +); diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx index 85718478f65fd..60fb799074f14 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.test.tsx @@ -67,6 +67,19 @@ const inferenceEndpoints = [ }, task_settings: {}, }, + { + inference_id: 'elastic-rerank', + task_type: 'rerank', + service: 'elasticsearch', + service_settings: { + num_allocations: 1, + num_threads: 1, + model_id: '.rerank-v1', + }, + task_settings: { + return_documents: true, + }, + }, ] as InferenceAPIConfigResponse[]; jest.mock('../../hooks/use_delete_endpoint', () => ({ @@ -82,9 +95,10 @@ describe('When the tabular page is loaded', () => { const rows = screen.getAllByRole('row'); expect(rows[1]).toHaveTextContent('.elser-2-elasticsearch'); expect(rows[2]).toHaveTextContent('.multilingual-e5-small-elasticsearch'); - expect(rows[3]).toHaveTextContent('local-model'); - expect(rows[4]).toHaveTextContent('my-elser-model-05'); - expect(rows[5]).toHaveTextContent('third-party-model'); + expect(rows[3]).toHaveTextContent('elastic-rerank'); + expect(rows[4]).toHaveTextContent('local-model'); + expect(rows[5]).toHaveTextContent('my-elser-model-05'); + expect(rows[6]).toHaveTextContent('third-party-model'); }); it('should display all service and model ids in the table', () => { @@ -98,13 +112,16 @@ describe('When the tabular page is loaded', () => { expect(rows[2]).toHaveTextContent('.multilingual-e5-small'); expect(rows[3]).toHaveTextContent('Elasticsearch'); - expect(rows[3]).toHaveTextContent('.own_model'); + expect(rows[3]).toHaveTextContent('.rerank-v1'); expect(rows[4]).toHaveTextContent('Elasticsearch'); - expect(rows[4]).toHaveTextContent('.elser_model_2'); + expect(rows[4]).toHaveTextContent('.own_model'); - expect(rows[5]).toHaveTextContent('OpenAI'); - expect(rows[5]).toHaveTextContent('.own_model'); + expect(rows[5]).toHaveTextContent('Elasticsearch'); + expect(rows[5]).toHaveTextContent('.elser_model_2'); + + expect(rows[6]).toHaveTextContent('OpenAI'); + expect(rows[6]).toHaveTextContent('.own_model'); }); it('should only disable delete action for preconfigured endpoints', () => { @@ -131,4 +148,18 @@ describe('When the tabular page is loaded', () => { expect(rows[4]).not.toHaveTextContent(preconfigured); expect(rows[5]).not.toHaveTextContent(preconfigured); }); + + it('should show tech preview badge only for reranker-v1 model', () => { + render(); + + const techPreview = 'TECH PREVIEW'; + + const rows = screen.getAllByRole('row'); + expect(rows[1]).not.toHaveTextContent(techPreview); + expect(rows[2]).not.toHaveTextContent(techPreview); + expect(rows[3]).toHaveTextContent(techPreview); + expect(rows[4]).not.toHaveTextContent(techPreview); + expect(rows[5]).not.toHaveTextContent(techPreview); + expect(rows[6]).not.toHaveTextContent(techPreview); + }); }); diff --git a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx index 0ea17fa6408a0..a999dca2ac0a5 100644 --- a/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx +++ b/x-pack/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx @@ -53,9 +53,9 @@ export const TabularPage: React.FC = ({ inferenceEndpoints }) field: 'endpoint', name: i18n.ENDPOINT, 'data-test-subj': 'endpointCell', - render: (endpoint: string) => { + render: (endpoint: string, additionalInfo: InferenceEndpointUI) => { if (endpoint) { - return ; + return ; } return null; diff --git a/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.test.ts b/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.test.ts new file mode 100644 index 0000000000000..3eb3fa46634db --- /dev/null +++ b/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.test.ts @@ -0,0 +1,54 @@ +/* + * 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 { isProviderTechPreview } from './reranker_helper'; + +describe('Reranker Tech preview badge', () => { + const mockProvider = { + inference_id: 'elastic-rerank', + task_type: 'rerank', + service: 'elasticsearch', + service_settings: { + num_allocations: 1, + num_threads: 1, + model_id: '.rerank-v1', + }, + task_settings: { + return_documents: true, + }, + } as any; + + it('return true for reranker', () => { + expect(isProviderTechPreview(mockProvider)).toEqual(true); + }); + + it('return false for other provider', () => { + const otherProviderServiceSettings = { + ...mockProvider.service_settings, + model_id: '.elser_model_2', + }; + const otherProvider = { + ...mockProvider, + task_type: 'sparse_embedding', + service_settings: otherProviderServiceSettings, + } as any; + expect(isProviderTechPreview(otherProvider)).toEqual(false); + }); + + it('return false for other provider without model_id', () => { + const mockThirdPartyProvider = { + inference_id: 'azure-openai-1', + service: 'azureopenai', + service_settings: { + resource_name: 'resource-xyz', + deployment_id: 'deployment-123', + api_version: 'v1', + }, + } as any; + expect(isProviderTechPreview(mockThirdPartyProvider)).toEqual(false); + }); +}); diff --git a/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.ts b/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.ts new file mode 100644 index 0000000000000..ac930971fa458 --- /dev/null +++ b/x-pack/plugins/search_inference_endpoints/public/utils/reranker_helper.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 { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; +export const isProviderTechPreview = (provider: InferenceAPIConfigResponse) => { + if (hasModelId(provider)) { + return provider.task_type === 'rerank' && provider.service_settings?.model_id?.startsWith('.'); + } + + return false; +}; + +function hasModelId( + service: InferenceAPIConfigResponse +): service is Extract { + return 'model_id' in service.service_settings; +} From e3cc5fccf5f469fddf9ec3049b69bdd831d66b9c Mon Sep 17 00:00:00 2001 From: Jeramy Soucy Date: Wed, 4 Dec 2024 17:13:35 -0500 Subject: [PATCH 053/141] =?UTF-8?q?Upgrade=20axios=201.7.4=20=E2=86=92=201?= =?UTF-8?q?.7.9=20(#202774)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Upgrades `axios` from v1.7.4 to v1.7.9. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- package.json | 2 +- .../kbn-test/src/kbn_client/kbn_client_requester_error.ts | 1 + yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 627970605a3b3..c35b4daccb349 100644 --- a/package.json +++ b/package.json @@ -1089,7 +1089,7 @@ "archiver": "^7.0.1", "async": "^3.2.3", "aws4": "^1.13.2", - "axios": "^1.7.4", + "axios": "^1.7.9", "base64-js": "^1.3.1", "bitmap-sdf": "^1.0.3", "blurhash": "^2.0.1", diff --git a/packages/kbn-test/src/kbn_client/kbn_client_requester_error.ts b/packages/kbn-test/src/kbn_client/kbn_client_requester_error.ts index 265f2a60b02f5..f44bf2bcc53ed 100644 --- a/packages/kbn-test/src/kbn_client/kbn_client_requester_error.ts +++ b/packages/kbn-test/src/kbn_client/kbn_client_requester_error.ts @@ -18,6 +18,7 @@ export class KbnClientRequesterError extends Error { } function clean(error: Error): AxiosError { const _ = AxiosError.from(error); + delete _.cause; delete _.config; delete _.request; delete _.response; diff --git a/yarn.lock b/yarn.lock index a422f50ff18b4..b936d99ebe74a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13936,10 +13936,10 @@ axe-core@^4.2.0, axe-core@^4.6.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== -axios@^1.0.0, axios@^1.3.4, axios@^1.6.0, axios@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.4.tgz#4c8ded1b43683c8dd362973c393f3ede24052aa2" - integrity sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw== +axios@^1.0.0, axios@^1.3.4, axios@^1.6.0, axios@^1.7.4, axios@^1.7.9: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" From 65a9c920710cd36fc5a14c319132ac80224c3745 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 5 Dec 2024 09:29:15 +1100 Subject: [PATCH 054/141] Unauthorized route migration for routes owned by kibana-visualizations,kibana-data-discovery (#198331) ### Authz API migration for unauthorized routes This PR migrates unauthorized routes owned by your team to a new security configuration. Please refer to the documentation for more information: [Authorization API](https://docs.elastic.dev/kibana-dev-docs/key-concepts/security-api-authorization) --- EDIT --- This PR also adds two privileges related to saved query APIs: `savedQuery:read` and `savedQuery:manage`. These are given by default to the same roles that already have access to the `query`-type saved objects. ### **Before migration:** ```ts router.get({ path: '/api/path', ... }, handler); ``` ### **After migration:** ```ts router.get({ path: '/api/path', security: { authz: { enabled: false, reason: 'This route is opted out from authorization because ...', }, }, ... }, handler); ``` ### What to do next? 1. Review the changes in this PR. 2. Elaborate on the reasoning to opt-out of authorization. 3. Routes without a compelling reason to opt-out of authorization should plan to introduce them as soon as possible. 2. You might need to update your tests to reflect the new security configuration: - If you have snapshot tests that include the route definition. ## Any questions? If you have any questions or need help with API authorization, please reach out to the `@elastic/kibana-security` team. --------- Co-authored-by: Lukas Olson Co-authored-by: Matthias Wilhelm Co-authored-by: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Co-authored-by: Davis McPhee --- .../data/server/kql_telemetry/route.ts | 6 ++ src/plugins/data/server/query/routes.ts | 35 ++++++++++++ src/plugins/data/server/scripts/route.ts | 6 ++ .../data/server/search/routes/session.ts | 45 +++++++++++---- .../__snapshots__/oss_features.test.ts.snap | 56 +++++++++++++++++-- .../plugins/features/server/oss_features.ts | 27 +++++++-- x-pack/plugins/maps/server/plugin.ts | 2 + .../platform_security/authorization.ts | 12 ++++ .../search/platform_security/authorization.ts | 12 ++++ .../platform_security/authorization.ts | 6 ++ 10 files changed, 183 insertions(+), 24 deletions(-) diff --git a/src/plugins/data/server/kql_telemetry/route.ts b/src/plugins/data/server/kql_telemetry/route.ts index 4d6d3b5871bb0..ef9aaa16ec027 100644 --- a/src/plugins/data/server/kql_telemetry/route.ts +++ b/src/plugins/data/server/kql_telemetry/route.ts @@ -24,6 +24,12 @@ export function registerKqlTelemetryRoute( .addVersion( { version: KQL_TELEMETRY_ROUTE_LATEST_VERSION, + security: { + authz: { + enabled: false, + reason: 'This route is opted out from authorization', + }, + }, validate: { request: { body: schema.object({ diff --git a/src/plugins/data/server/query/routes.ts b/src/plugins/data/server/query/routes.ts index 950363d498a1c..cb1f79af1144d 100644 --- a/src/plugins/data/server/query/routes.ts +++ b/src/plugins/data/server/query/routes.ts @@ -43,6 +43,11 @@ export function registerSavedQueryRoutes({ http }: CoreSetup): void { router.versioned.post({ path: `${SAVED_QUERY_BASE_URL}/_is_duplicate_title`, access }).addVersion( { version, + security: { + authz: { + requiredPrivileges: ['savedQuery:read'], + }, + }, validate: { request: { body: schema.object({ @@ -75,6 +80,11 @@ export function registerSavedQueryRoutes({ http }: CoreSetup): void { router.versioned.post({ path: `${SAVED_QUERY_BASE_URL}/_create`, access }).addVersion( { version, + security: { + authz: { + requiredPrivileges: ['savedQuery:manage'], + }, + }, validate: { request: { body: SAVED_QUERY_ATTRS_CONFIG, @@ -101,6 +111,11 @@ export function registerSavedQueryRoutes({ http }: CoreSetup): void { router.versioned.put({ path: `${SAVED_QUERY_BASE_URL}/{id}`, access }).addVersion( { version, + security: { + authz: { + requiredPrivileges: ['savedQuery:manage'], + }, + }, validate: { request: { params: SAVED_QUERY_ID_CONFIG, @@ -129,6 +144,11 @@ export function registerSavedQueryRoutes({ http }: CoreSetup): void { router.versioned.get({ path: `${SAVED_QUERY_BASE_URL}/{id}`, access }).addVersion( { version, + security: { + authz: { + requiredPrivileges: ['savedQuery:read'], + }, + }, validate: { request: { params: SAVED_QUERY_ID_CONFIG, @@ -156,6 +176,11 @@ export function registerSavedQueryRoutes({ http }: CoreSetup): void { router.versioned.get({ path: `${SAVED_QUERY_BASE_URL}/_count`, access }).addVersion( { version, + security: { + authz: { + requiredPrivileges: ['savedQuery:read'], + }, + }, validate: { request: {}, response: { @@ -180,6 +205,11 @@ export function registerSavedQueryRoutes({ http }: CoreSetup): void { router.versioned.post({ path: `${SAVED_QUERY_BASE_URL}/_find`, access }).addVersion( { version, + security: { + authz: { + requiredPrivileges: ['savedQuery:read'], + }, + }, validate: { request: { body: schema.object({ @@ -214,6 +244,11 @@ export function registerSavedQueryRoutes({ http }: CoreSetup): void { router.versioned.delete({ path: `${SAVED_QUERY_BASE_URL}/{id}`, access }).addVersion( { version, + security: { + authz: { + requiredPrivileges: ['savedQuery:manage'], + }, + }, validate: { request: { params: SAVED_QUERY_ID_CONFIG, diff --git a/src/plugins/data/server/scripts/route.ts b/src/plugins/data/server/scripts/route.ts index f4c802f551d51..2e4cd5364ce01 100644 --- a/src/plugins/data/server/scripts/route.ts +++ b/src/plugins/data/server/scripts/route.ts @@ -20,6 +20,12 @@ export function registerScriptsRoute(router: IRouter) { .addVersion( { version: SCRIPT_LANGUAGES_ROUTE_LATEST_VERSION, + security: { + authz: { + enabled: false, + reason: 'This route is opted out from authorization', + }, + }, validate: { response: { '200': { diff --git a/src/plugins/data/server/search/routes/session.ts b/src/plugins/data/server/search/routes/session.ts index 0ae8eebe8180c..b339631e162f9 100644 --- a/src/plugins/data/server/search/routes/session.ts +++ b/src/plugins/data/server/search/routes/session.ts @@ -24,11 +24,8 @@ import { searchSessionsUpdateSchema, } from './response_schema'; -const STORE_SEARCH_SESSIONS_ROLE_TAG = `access:store_search_session`; const access = 'internal'; -const options = { - tags: [STORE_SEARCH_SESSIONS_ROLE_TAG], -}; +const requiredPrivileges = ['store_search_session']; const pathPrefix = '/internal/session'; export const INITIAL_SEARCH_SESSION_REST_VERSION = '1'; const version = INITIAL_SEARCH_SESSION_REST_VERSION; @@ -37,9 +34,12 @@ const idAndAttrsOnly = (so?: SearchSessionRestResponse) => so && { id: so.id, attributes: so.attributes }; export function registerSessionRoutes(router: DataPluginRouter, logger: Logger): void { - router.versioned.post({ path: pathPrefix, access, options }).addVersion( + router.versioned.post({ path: pathPrefix, access }).addVersion( { version, + security: { + authz: { requiredPrivileges }, + }, validate: { request: { body: schema.object({ @@ -85,9 +85,12 @@ export function registerSessionRoutes(router: DataPluginRouter, logger: Logger): } ); - router.versioned.get({ path: `${pathPrefix}/{id}`, access, options }).addVersion( + router.versioned.get({ path: `${pathPrefix}/{id}`, access }).addVersion( { version, + security: { + authz: { requiredPrivileges }, + }, validate: { request: { params: schema.object({ @@ -117,9 +120,12 @@ export function registerSessionRoutes(router: DataPluginRouter, logger: Logger): } ); - router.versioned.get({ path: `${pathPrefix}/{id}/status`, access, options }).addVersion( + router.versioned.get({ path: `${pathPrefix}/{id}/status`, access }).addVersion( { version, + security: { + authz: { requiredPrivileges }, + }, validate: { request: { params: schema.object({ @@ -150,9 +156,12 @@ export function registerSessionRoutes(router: DataPluginRouter, logger: Logger): } ); - router.versioned.post({ path: `${pathPrefix}/_find`, access, options }).addVersion( + router.versioned.post({ path: `${pathPrefix}/_find`, access }).addVersion( { version, + security: { + authz: { requiredPrivileges }, + }, validate: { request: { body: schema.object({ @@ -200,9 +209,12 @@ export function registerSessionRoutes(router: DataPluginRouter, logger: Logger): } ); - router.versioned.delete({ path: `${pathPrefix}/{id}`, access, options }).addVersion( + router.versioned.delete({ path: `${pathPrefix}/{id}`, access }).addVersion( { version, + security: { + authz: { requiredPrivileges }, + }, validate: { request: { params: schema.object({ @@ -226,9 +238,12 @@ export function registerSessionRoutes(router: DataPluginRouter, logger: Logger): } ); - router.versioned.post({ path: `${pathPrefix}/{id}/cancel`, access, options }).addVersion( + router.versioned.post({ path: `${pathPrefix}/{id}/cancel`, access }).addVersion( { version, + security: { + authz: { requiredPrivileges }, + }, validate: { request: { params: schema.object({ @@ -252,9 +267,12 @@ export function registerSessionRoutes(router: DataPluginRouter, logger: Logger): } ); - router.versioned.put({ path: `${pathPrefix}/{id}`, access, options }).addVersion( + router.versioned.put({ path: `${pathPrefix}/{id}`, access }).addVersion( { version, + security: { + authz: { requiredPrivileges }, + }, validate: { request: { params: schema.object({ @@ -291,9 +309,12 @@ export function registerSessionRoutes(router: DataPluginRouter, logger: Logger): } ); - router.versioned.post({ path: `${pathPrefix}/{id}/_extend`, access, options }).addVersion( + router.versioned.post({ path: `${pathPrefix}/{id}/_extend`, access }).addVersion( { version, + security: { + authz: { requiredPrivileges }, + }, validate: { request: { params: schema.object({ diff --git a/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap b/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap index b5614562f18a4..140d20f8ebdb8 100644 --- a/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap +++ b/x-pack/plugins/features/server/__snapshots__/oss_features.test.ts.snap @@ -548,6 +548,8 @@ Array [ "api": Array [ "bulkGetUserProfiles", "dashboardUsageStats", + "savedQuery:manage", + "savedQuery:read", "store_search_session", ], "app": Array [ @@ -607,6 +609,7 @@ Array [ "api": Array [ "bulkGetUserProfiles", "dashboardUsageStats", + "savedQuery:read", ], "app": Array [ "dashboards", @@ -709,6 +712,8 @@ Array [ }, "api": Array [ "fileUpload:analyzeFile", + "savedQuery:manage", + "savedQuery:read", "store_search_session", ], "app": Array [ @@ -757,6 +762,9 @@ Array [ }, Object { "privilege": Object { + "api": Array [ + "savedQuery:read", + ], "app": Array [ "discover", "kibana", @@ -1004,6 +1012,10 @@ exports[`buildOSSFeatures with a basic license returns the savedQueryManagement Array [ Object { "privilege": Object { + "api": Array [ + "savedQuery:manage", + "savedQuery:read", + ], "app": Array [ "kibana", ], @@ -1022,10 +1034,14 @@ Array [ }, Object { "privilege": Object { - "disabled": true, + "api": Array [ + "savedQuery:read", + ], "savedObject": Object { "all": Array [], - "read": Array [], + "read": Array [ + "query", + ], }, "ui": Array [], }, @@ -1048,7 +1064,10 @@ Array [ "read": Array [], }, }, - "api": Array [], + "api": Array [ + "savedQuery:manage", + "savedQuery:read", + ], "app": Array [ "visualize", "lens", @@ -1094,6 +1113,9 @@ Array [ }, Object { "privilege": Object { + "api": Array [ + "savedQuery:read", + ], "app": Array [ "visualize", "lens", @@ -1190,6 +1212,8 @@ Array [ "api": Array [ "bulkGetUserProfiles", "dashboardUsageStats", + "savedQuery:manage", + "savedQuery:read", "store_search_session", ], "app": Array [ @@ -1249,6 +1273,7 @@ Array [ "api": Array [ "bulkGetUserProfiles", "dashboardUsageStats", + "savedQuery:read", ], "app": Array [ "dashboards", @@ -1351,6 +1376,8 @@ Array [ }, "api": Array [ "fileUpload:analyzeFile", + "savedQuery:manage", + "savedQuery:read", "store_search_session", ], "app": Array [ @@ -1399,6 +1426,9 @@ Array [ }, Object { "privilege": Object { + "api": Array [ + "savedQuery:read", + ], "app": Array [ "discover", "kibana", @@ -1646,6 +1676,10 @@ exports[`buildOSSFeatures with a enterprise license returns the savedQueryManage Array [ Object { "privilege": Object { + "api": Array [ + "savedQuery:manage", + "savedQuery:read", + ], "app": Array [ "kibana", ], @@ -1664,10 +1698,14 @@ Array [ }, Object { "privilege": Object { - "disabled": true, + "api": Array [ + "savedQuery:read", + ], "savedObject": Object { "all": Array [], - "read": Array [], + "read": Array [ + "query", + ], }, "ui": Array [], }, @@ -1690,7 +1728,10 @@ Array [ "read": Array [], }, }, - "api": Array [], + "api": Array [ + "savedQuery:manage", + "savedQuery:read", + ], "app": Array [ "visualize", "lens", @@ -1736,6 +1777,9 @@ Array [ }, Object { "privilege": Object { + "api": Array [ + "savedQuery:read", + ], "app": Array [ "visualize", "lens", diff --git a/x-pack/plugins/features/server/oss_features.ts b/x-pack/plugins/features/server/oss_features.ts index 0f243e7e6bda8..12978c35777e7 100644 --- a/x-pack/plugins/features/server/oss_features.ts +++ b/x-pack/plugins/features/server/oss_features.ts @@ -37,7 +37,7 @@ export const buildOSSFeatures = ({ privileges: { all: { app: ['discover', 'kibana'], - api: ['fileUpload:analyzeFile'], + api: ['fileUpload:analyzeFile', 'savedQuery:manage', 'savedQuery:read'], catalogue: ['discover'], savedObject: { all: ['search', 'query'], @@ -53,6 +53,7 @@ export const buildOSSFeatures = ({ read: ['index-pattern', 'search', 'query'], }, ui: ['show'], + api: ['savedQuery:read'], }, }, subFeatures: [ @@ -139,6 +140,7 @@ export const buildOSSFeatures = ({ read: ['index-pattern', 'search', 'tag'], }, ui: ['show', 'delete', 'save', 'saveQuery'], + api: ['savedQuery:manage', 'savedQuery:read'], }, read: { app: ['visualize', 'lens', 'kibana'], @@ -148,6 +150,7 @@ export const buildOSSFeatures = ({ read: ['index-pattern', 'search', 'visualization', 'query', 'lens', 'tag'], }, ui: ['show'], + api: ['savedQuery:read'], }, }, subFeatures: [ @@ -213,7 +216,12 @@ export const buildOSSFeatures = ({ ], }, ui: ['createNew', 'show', 'showWriteControls', 'saveQuery'], - api: ['bulkGetUserProfiles', 'dashboardUsageStats'], + api: [ + 'bulkGetUserProfiles', + 'dashboardUsageStats', + 'savedQuery:manage', + 'savedQuery:read', + ], }, read: { app: ['dashboards', 'kibana'], @@ -234,7 +242,7 @@ export const buildOSSFeatures = ({ ], }, ui: ['show'], - api: ['bulkGetUserProfiles', 'dashboardUsageStats'], + api: ['bulkGetUserProfiles', 'dashboardUsageStats', 'savedQuery:read'], }, }, subFeatures: [ @@ -545,7 +553,7 @@ export const buildOSSFeatures = ({ catalogue: [], privilegesTooltip: i18n.translate('xpack.features.savedQueryManagementTooltip', { defaultMessage: - 'If set to "All", saved queries can be managed across Kibana in all applications that support them. If set to "None", saved query privileges will be determined independently by each application.', + 'If set to "All", saved queries can be managed across Kibana in all applications that support them. Otherwise, saved query privileges will be determined independently by each application.', }), privileges: { all: { @@ -556,9 +564,16 @@ export const buildOSSFeatures = ({ read: [], }, ui: ['saveQuery'], + api: ['savedQuery:manage', 'savedQuery:read'], + }, + read: { + savedObject: { + all: [], + read: ['query'], + }, + ui: [], + api: ['savedQuery:read'], }, - // No read-only mode supported - read: { disabled: true, savedObject: { all: [], read: [] }, ui: [] }, }, }, ]; diff --git a/x-pack/plugins/maps/server/plugin.ts b/x-pack/plugins/maps/server/plugin.ts index 1b98310f798e4..9d82aa0cc931e 100644 --- a/x-pack/plugins/maps/server/plugin.ts +++ b/x-pack/plugins/maps/server/plugin.ts @@ -188,6 +188,7 @@ export class MapsPlugin implements Plugin { read: ['index-pattern', 'tag'], }, ui: ['save', 'show', 'saveQuery'], + api: ['savedQuery:manage', 'savedQuery:read'], }, read: { app: [APP_ID, 'kibana'], @@ -197,6 +198,7 @@ export class MapsPlugin implements Plugin { read: [MAP_SAVED_OBJECT_TYPE, 'index-pattern', 'query', 'tag'], }, ui: ['show'], + api: ['savedQuery:read'], }, }, }); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/platform_security/authorization.ts b/x-pack/test_serverless/api_integration/test_suites/observability/platform_security/authorization.ts index b6dbceedfe65e..91812dbecb027 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/platform_security/authorization.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/platform_security/authorization.ts @@ -4235,6 +4235,8 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "api:downloadCsv", @@ -4418,6 +4420,8 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:manage", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -4570,6 +4574,7 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -4669,6 +4674,7 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -4804,6 +4810,8 @@ export default function ({ getService }: FtrProviderContext) { "all": Array [ "login:", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "app:discover", @@ -6032,6 +6040,8 @@ export default function ({ getService }: FtrProviderContext) { "minimal_all": Array [ "login:", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", @@ -7227,6 +7237,7 @@ export default function ({ getService }: FtrProviderContext) { ], "minimal_read": Array [ "login:", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", @@ -7718,6 +7729,7 @@ export default function ({ getService }: FtrProviderContext) { ], "read": Array [ "login:", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", diff --git a/x-pack/test_serverless/api_integration/test_suites/search/platform_security/authorization.ts b/x-pack/test_serverless/api_integration/test_suites/search/platform_security/authorization.ts index a30b8aca571ea..ed9fdd30cbdae 100644 --- a/x-pack/test_serverless/api_integration/test_suites/search/platform_security/authorization.ts +++ b/x-pack/test_serverless/api_integration/test_suites/search/platform_security/authorization.ts @@ -42,6 +42,8 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "api:downloadCsv", @@ -225,6 +227,8 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:manage", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -377,6 +381,7 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -476,6 +481,7 @@ export default function ({ getService }: FtrProviderContext) { "login:", "api:bulkGetUserProfiles", "api:dashboardUsageStats", + "api:savedQuery:read", "app:dashboards", "app:kibana", "ui:catalogue/dashboard", @@ -611,6 +617,8 @@ export default function ({ getService }: FtrProviderContext) { "all": Array [ "login:", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "app:discover", @@ -711,6 +719,8 @@ export default function ({ getService }: FtrProviderContext) { "minimal_all": Array [ "login:", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", @@ -778,6 +788,7 @@ export default function ({ getService }: FtrProviderContext) { ], "minimal_read": Array [ "login:", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", @@ -822,6 +833,7 @@ export default function ({ getService }: FtrProviderContext) { ], "read": Array [ "login:", + "api:savedQuery:read", "app:discover", "app:kibana", "ui:catalogue/discover", diff --git a/x-pack/test_serverless/api_integration/test_suites/security/platform_security/authorization.ts b/x-pack/test_serverless/api_integration/test_suites/security/platform_security/authorization.ts index c3b37539946ff..1f9a7f74fd572 100644 --- a/x-pack/test_serverless/api_integration/test_suites/security/platform_security/authorization.ts +++ b/x-pack/test_serverless/api_integration/test_suites/security/platform_security/authorization.ts @@ -742,6 +742,8 @@ export default function ({ getService }: FtrProviderContext) { "alerting:siem.newTermsRule/siem/alert/getAlertSummary", "alerting:siem.newTermsRule/siem/alert/update", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "app:discover", @@ -1597,6 +1599,8 @@ export default function ({ getService }: FtrProviderContext) { "alerting:siem.newTermsRule/siem/alert/getAlertSummary", "alerting:siem.newTermsRule/siem/alert/update", "api:fileUpload:analyzeFile", + "api:savedQuery:manage", + "api:savedQuery:read", "api:store_search_session", "api:generateReport", "app:discover", @@ -2003,6 +2007,7 @@ export default function ({ getService }: FtrProviderContext) { "alerting:siem.newTermsRule/siem/alert/getAuthorizedAlertsIndices", "alerting:siem.newTermsRule/siem/alert/getAlertSummary", "alerting:siem.newTermsRule/siem/alert/update", + "api:savedQuery:read", "app:discover", "ui:catalogue/discover", "ui:navLinks/discover", @@ -2370,6 +2375,7 @@ export default function ({ getService }: FtrProviderContext) { "alerting:siem.newTermsRule/siem/alert/getAuthorizedAlertsIndices", "alerting:siem.newTermsRule/siem/alert/getAlertSummary", "alerting:siem.newTermsRule/siem/alert/update", + "api:savedQuery:read", "app:discover", "ui:catalogue/discover", "ui:navLinks/discover", From 69f3dc1c4cfaaefd1097c6ae513f3e797a4d4f62 Mon Sep 17 00:00:00 2001 From: Nick Peihl Date: Wed, 4 Dec 2024 17:33:10 -0500 Subject: [PATCH 055/141] [Dashboards][OAS] Generate API docs for Dashboards API (#199215) --- .../steps/checks/capture_oas_snapshot.sh | 2 +- oas_docs/bundle.json | 3241 +++++++++++++++++ oas_docs/bundle.serverless.json | 3241 +++++++++++++++++ oas_docs/output/kibana.serverless.yaml | 2316 ++++++++++++ oas_docs/output/kibana.yaml | 2311 ++++++++++++ .../dashboard/server/api/register_routes.ts | 63 +- .../content_management/v3/cm_services.ts | 43 +- .../server/content_management/v3/types.ts | 4 +- 8 files changed, 11195 insertions(+), 26 deletions(-) diff --git a/.buildkite/scripts/steps/checks/capture_oas_snapshot.sh b/.buildkite/scripts/steps/checks/capture_oas_snapshot.sh index e9f42d67008ea..66051c8fd5e29 100755 --- a/.buildkite/scripts/steps/checks/capture_oas_snapshot.sh +++ b/.buildkite/scripts/steps/checks/capture_oas_snapshot.sh @@ -8,7 +8,7 @@ source .buildkite/scripts/common/util.sh .buildkite/scripts/copy_es_snapshot_cache.sh echo --- Capture OAS snapshot -cmd="node scripts/capture_oas_snapshot --include-path /api/status --include-path /api/alerting/rule/ --include-path /api/alerting/rules --include-path /api/actions --include-path /api/security/role --include-path /api/spaces --include-path /api/fleet" +cmd="node scripts/capture_oas_snapshot --include-path /api/status --include-path /api/alerting/rule/ --include-path /api/alerting/rules --include-path /api/actions --include-path /api/security/role --include-path /api/spaces --include-path /api/fleet --include-path /api/dashboards" if is_pr && ! is_auto_commit_disabled; then cmd="$cmd --update" fi diff --git a/oas_docs/bundle.json b/oas_docs/bundle.json index 0244960e1f55f..210ecb6fa266f 100644 --- a/oas_docs/bundle.json +++ b/oas_docs/bundle.json @@ -5644,6 +5644,3244 @@ ] } }, + "/api/dashboards/dashboard": { + "get": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "get-dashboards-dashboard", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "The page number to return. Default is \"1\".", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "minimum": 1, + "type": "number" + } + }, + { + "description": "The number of dashboards to display on each page (max 1000). Default is \"20\".", + "in": "query", + "name": "perPage", + "required": false, + "schema": { + "maximum": 1000, + "minimum": 1, + "type": "number" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "items": { + "items": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "items", + "total" + ], + "type": "object" + } + } + } + } + }, + "summary": "Get a list of dashboards", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + } + }, + "/api/dashboards/dashboard/{id}": { + "delete": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "delete-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": {}, + "summary": "Delete a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "get": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "get-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "aliasPurpose": { + "enum": [ + "savedObjectConversion", + "savedObjectImport" + ], + "type": "string" + }, + "aliasTargetId": { + "type": "string" + }, + "outcome": { + "enum": [ + "exactMatch", + "aliasMatch", + "conflict" + ], + "type": "string" + } + }, + "required": [ + "outcome" + ], + "type": "object" + } + }, + "required": [ + "item", + "meta" + ], + "type": "object" + } + } + } + } + }, + "summary": "Get a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "post": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "post-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "description": "The unique identifier of the panel", + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "description": "The unique ID of the panel.", + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "spaces": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "attributes" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + } + }, + "required": [ + "item" + ], + "type": "object" + } + } + } + } + }, + "summary": "Create a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "put": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "put-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "description": "The unique identifier of the panel", + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "description": "The unique ID of the panel.", + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "attributes" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + } + }, + "required": [ + "item" + ], + "type": "object" + } + } + } + } + }, + "summary": "Update an existing dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + } + }, "/api/fleet/agent_download_sources": { "get": { "operationId": "get-fleet-agent-download-sources", @@ -39054,6 +42292,9 @@ { "name": "connectors" }, + { + "name": "Dashboards" + }, { "name": "Data streams" }, diff --git a/oas_docs/bundle.serverless.json b/oas_docs/bundle.serverless.json index acfe609ea0c2f..ff2a4b17661b9 100644 --- a/oas_docs/bundle.serverless.json +++ b/oas_docs/bundle.serverless.json @@ -5644,6 +5644,3244 @@ ] } }, + "/api/dashboards/dashboard": { + "get": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "get-dashboards-dashboard", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "The page number to return. Default is \"1\".", + "in": "query", + "name": "page", + "required": false, + "schema": { + "default": 1, + "minimum": 1, + "type": "number" + } + }, + { + "description": "The number of dashboards to display on each page (max 1000). Default is \"20\".", + "in": "query", + "name": "perPage", + "required": false, + "schema": { + "maximum": 1000, + "minimum": 1, + "type": "number" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "items": { + "items": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + } + }, + "required": [ + "title" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "items", + "total" + ], + "type": "object" + } + } + } + } + }, + "summary": "Get a list of dashboards", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + } + }, + "/api/dashboards/dashboard/{id}": { + "delete": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "delete-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": {}, + "summary": "Delete a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "get": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "get-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + }, + "meta": { + "additionalProperties": false, + "properties": { + "aliasPurpose": { + "enum": [ + "savedObjectConversion", + "savedObjectImport" + ], + "type": "string" + }, + "aliasTargetId": { + "type": "string" + }, + "outcome": { + "enum": [ + "exactMatch", + "aliasMatch", + "conflict" + ], + "type": "string" + } + }, + "required": [ + "outcome" + ], + "type": "object" + } + }, + "required": [ + "item", + "meta" + ], + "type": "object" + } + } + } + } + }, + "summary": "Get a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "post": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "post-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": false, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "description": "The unique identifier of the panel", + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "description": "The unique ID of the panel.", + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "spaces": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "attributes" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + } + }, + "required": [ + "item" + ], + "type": "object" + } + } + } + } + }, + "summary": "Create a dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + }, + "put": { + "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", + "operationId": "put-dashboards-dashboard-id", + "parameters": [ + { + "description": "The version of the API to use", + "in": "header", + "name": "elastic-api-version", + "schema": { + "default": "2023-10-31", + "enum": [ + "2023-10-31" + ], + "type": "string" + } + }, + { + "description": "A required header to protect against CSRF attacks", + "in": "header", + "name": "kbn-xsrf", + "required": true, + "schema": { + "example": "true", + "type": "string" + } + }, + { + "description": "A unique identifier for the dashboard.", + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "description": "The unique identifier of the panel", + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "description": "The unique ID of the panel.", + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "attributes" + ], + "type": "object" + } + } + } + }, + "responses": { + "200": { + "content": { + "application/json; Elastic-Api-Version=2023-10-31": { + "schema": { + "additionalProperties": false, + "properties": { + "item": { + "additionalProperties": true, + "properties": { + "attributes": { + "additionalProperties": false, + "properties": { + "controlGroupInput": { + "additionalProperties": false, + "properties": { + "autoApplySelections": { + "default": true, + "description": "Show apply selections button in controls.", + "type": "boolean" + }, + "chainingSystem": { + "default": "HIERARCHICAL", + "description": "The chaining strategy for multiple controls. For example, \"HIERARCHICAL\" or \"NONE\".", + "enum": [ + "NONE", + "HIERARCHICAL" + ], + "type": "string" + }, + "controls": { + "default": [], + "description": "An array of control panels and their state in the control group.", + "items": { + "additionalProperties": true, + "properties": { + "controlConfig": { + "additionalProperties": {}, + "type": "object" + }, + "grow": { + "default": false, + "description": "Expand width of the control panel to fit available space.", + "type": "boolean" + }, + "id": { + "description": "The unique ID of the control.", + "type": "string" + }, + "order": { + "description": "The order of the control panel in the control group.", + "type": "number" + }, + "type": { + "description": "The type of the control panel.", + "type": "string" + }, + "width": { + "default": "medium", + "description": "Minimum width of the control panel in the control group.", + "enum": [ + "small", + "medium", + "large" + ], + "type": "string" + } + }, + "required": [ + "type", + "order" + ], + "type": "object" + }, + "type": "array" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "ignoreParentSettings": { + "additionalProperties": false, + "properties": { + "ignoreFilters": { + "default": false, + "description": "Ignore global filters in controls.", + "type": "boolean" + }, + "ignoreQuery": { + "default": false, + "description": "Ignore the global query bar in controls.", + "type": "boolean" + }, + "ignoreTimerange": { + "default": false, + "description": "Ignore the global time range in controls.", + "type": "boolean" + }, + "ignoreValidations": { + "default": false, + "description": "Ignore validations in controls.", + "type": "boolean" + } + }, + "type": "object" + }, + "labelPosition": { + "default": "oneLine", + "description": "Position of the labels for controls. For example, \"oneLine\", \"twoLine\".", + "enum": [ + "oneLine", + "twoLine" + ], + "type": "string" + } + }, + "required": [ + "ignoreParentSettings" + ], + "type": "object" + }, + "description": { + "default": "", + "description": "A short description.", + "type": "string" + }, + "kibanaSavedObjectMeta": { + "additionalProperties": false, + "default": {}, + "description": "A container for various metadata", + "properties": { + "searchSource": { + "additionalProperties": true, + "properties": { + "filter": { + "items": { + "additionalProperties": false, + "description": "A filter for the search source.", + "properties": { + "$state": { + "additionalProperties": false, + "properties": { + "store": { + "description": "Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState').", + "enum": [ + "appState", + "globalState" + ], + "type": "string" + } + }, + "required": [ + "store" + ], + "type": "object" + }, + "meta": { + "additionalProperties": true, + "properties": { + "alias": { + "nullable": true, + "type": "string" + }, + "controlledBy": { + "type": "string" + }, + "disabled": { + "type": "boolean" + }, + "field": { + "type": "string" + }, + "group": { + "type": "string" + }, + "index": { + "type": "string" + }, + "isMultiIndex": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "negate": { + "type": "boolean" + }, + "params": {}, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "params" + ], + "type": "object" + }, + "query": { + "additionalProperties": {}, + "type": "object" + } + }, + "required": [ + "meta" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "additionalProperties": false, + "properties": { + "language": { + "description": "The query language such as KQL or Lucene.", + "type": "string" + }, + "query": { + "anyOf": [ + { + "description": "A text-based query such as Kibana Query Language (KQL) or Lucene query language.", + "type": "string" + }, + { + "additionalProperties": {}, + "type": "object" + } + ] + } + }, + "required": [ + "query", + "language" + ], + "type": "object" + }, + "sort": { + "items": { + "additionalProperties": { + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "format": { + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "numeric_type": { + "enum": [ + "double", + "long", + "date", + "date_nanos" + ], + "type": "string" + }, + "order": { + "enum": [ + "asc", + "desc" + ], + "type": "string" + } + }, + "required": [ + "order" + ], + "type": "object" + } + ] + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "options": { + "additionalProperties": false, + "properties": { + "hidePanelTitles": { + "default": false, + "description": "Hide the panel titles in the dashboard.", + "type": "boolean" + }, + "syncColors": { + "default": true, + "description": "Synchronize colors between related panels in the dashboard.", + "type": "boolean" + }, + "syncCursor": { + "default": true, + "description": "Synchronize cursor position between related panels in the dashboard.", + "type": "boolean" + }, + "syncTooltips": { + "default": true, + "description": "Synchronize tooltips between related panels in the dashboard.", + "type": "boolean" + }, + "useMargins": { + "default": true, + "description": "Show margins between panels in the dashboard layout.", + "type": "boolean" + } + }, + "type": "object" + }, + "panels": { + "default": [], + "items": { + "additionalProperties": false, + "properties": { + "gridData": { + "additionalProperties": false, + "properties": { + "h": { + "default": 15, + "description": "The height of the panel in grid units", + "minimum": 1, + "type": "number" + }, + "i": { + "type": "string" + }, + "w": { + "default": 24, + "description": "The width of the panel in grid units", + "maximum": 48, + "minimum": 1, + "type": "number" + }, + "x": { + "description": "The x coordinate of the panel in grid units", + "type": "number" + }, + "y": { + "description": "The y coordinate of the panel in grid units", + "type": "number" + } + }, + "required": [ + "x", + "y", + "i" + ], + "type": "object" + }, + "id": { + "description": "The saved object id for by reference panels", + "type": "string" + }, + "panelConfig": { + "additionalProperties": true, + "properties": { + "description": { + "description": "The description of the panel", + "type": "string" + }, + "enhancements": { + "additionalProperties": {}, + "type": "object" + }, + "hidePanelTitles": { + "description": "Set to true to hide the panel title in its container.", + "type": "boolean" + }, + "savedObjectId": { + "description": "The unique id of the library item to construct the embeddable.", + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "version": { + "description": "The version of the embeddable in the panel.", + "type": "string" + } + }, + "type": "object" + }, + "panelIndex": { + "type": "string" + }, + "panelRefName": { + "type": "string" + }, + "title": { + "description": "The title of the panel", + "type": "string" + }, + "type": { + "description": "The embeddable type", + "type": "string" + }, + "version": { + "deprecated": true, + "description": "The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type).", + "type": "string" + } + }, + "required": [ + "panelConfig", + "type", + "gridData", + "panelIndex" + ], + "type": "object" + }, + "type": "array" + }, + "refreshInterval": { + "additionalProperties": false, + "description": "A container for various refresh interval settings", + "properties": { + "display": { + "deprecated": true, + "description": "A human-readable string indicating the refresh frequency. No longer used.", + "type": "string" + }, + "pause": { + "description": "Whether the refresh interval is set to be paused while viewing the dashboard.", + "type": "boolean" + }, + "section": { + "deprecated": true, + "description": "No longer used.", + "type": "number" + }, + "value": { + "description": "A numeric value indicating refresh frequency in milliseconds.", + "type": "number" + } + }, + "required": [ + "pause", + "value" + ], + "type": "object" + }, + "timeFrom": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "timeRestore": { + "default": false, + "description": "Whether to restore time upon viewing this dashboard", + "type": "boolean" + }, + "timeTo": { + "description": "An ISO string indicating when to restore time from", + "type": "string" + }, + "title": { + "description": "A human-readable title for the dashboard", + "type": "string" + }, + "version": { + "deprecated": true, + "type": "number" + } + }, + "required": [ + "title", + "options" + ], + "type": "object" + }, + "createdAt": { + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "error": { + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + }, + "metadata": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "statusCode": { + "type": "number" + } + }, + "required": [ + "error", + "message", + "statusCode" + ], + "type": "object" + }, + "id": { + "type": "string" + }, + "managed": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "originId": { + "type": "string" + }, + "references": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type", + "id" + ], + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updatedAt": { + "type": "string" + }, + "updatedBy": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "type", + "attributes", + "references" + ], + "type": "object" + } + }, + "required": [ + "item" + ], + "type": "object" + } + } + } + } + }, + "summary": "Update an existing dashboard", + "tags": [ + "Dashboards" + ], + "x-state": "Technical Preview" + } + }, "/api/fleet/agent_download_sources": { "get": { "operationId": "get-fleet-agent-download-sources", @@ -38585,6 +41823,9 @@ { "name": "connectors" }, + { + "name": "Dashboards" + }, { "name": "Data streams" }, diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 142c0742614fb..72fc1b093903a 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -71,6 +71,7 @@ tags: description: Connector documentation url: https://www.elastic.co/docs/current/serverless/action-connectors x-displayName: Connectors + - name: Dashboards - name: Data streams - description: Data view APIs enable you to manage data views, formerly known as Kibana index patterns. name: data views @@ -5195,6 +5196,2321 @@ paths: tags: - Security Entity Analytics API x-beta: true + /api/dashboards/dashboard: + get: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: get-dashboards-dashboard + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: The page number to return. Default is "1". + in: query + name: page + required: false + schema: + default: 1 + minimum: 1 + type: number + - description: The number of dashboards to display on each page (max 1000). Default is "20". + in: query + name: perPage + required: false + schema: + maximum: 1000 + minimum: 1 + type: number + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + items: + items: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + description: + default: '' + description: A short description. + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + title: + description: A human-readable title for the dashboard + type: string + required: + - title + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + type: array + total: + type: number + required: + - items + - total + summary: Get a list of dashboards + tags: + - Dashboards + x-state: Technical Preview + x-beta: true + /api/dashboards/dashboard/{id}: + delete: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: delete-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + responses: {} + summary: Delete a dashboard + tags: + - Dashboards + x-state: Technical Preview + x-beta: true + get: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: get-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + meta: + additionalProperties: false + type: object + properties: + aliasPurpose: + enum: + - savedObjectConversion + - savedObjectImport + type: string + aliasTargetId: + type: string + outcome: + enum: + - exactMatch + - aliasMatch + - conflict + type: string + required: + - outcome + required: + - item + - meta + summary: Get a dashboard + tags: + - Dashboards + x-state: Technical Preview + x-beta: true + post: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: post-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: false + schema: + type: string + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + description: The unique identifier of the panel + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + description: The unique ID of the panel. + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + spaces: + items: + type: string + type: array + required: + - attributes + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + required: + - item + summary: Create a dashboard + tags: + - Dashboards + x-state: Technical Preview + x-beta: true + put: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: put-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + description: The unique identifier of the panel + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + description: The unique ID of the panel. + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + required: + - attributes + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + required: + - item + summary: Update an existing dashboard + tags: + - Dashboards + x-state: Technical Preview + x-beta: true /api/data_views: get: operationId: getAllDataViewsDefault diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 0abbcc4b4a102..3c56597469133 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -85,6 +85,7 @@ tags: description: Connector documentation url: https://www.elastic.co/guide/en/kibana/current/action-types.html x-displayName: Connectors + - name: Dashboards - name: Data streams - description: Data view APIs enable you to manage data views, formerly known as Kibana index patterns. name: data views @@ -7465,6 +7466,2316 @@ paths: summary: Get case tags tags: - cases + /api/dashboards/dashboard: + get: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: get-dashboards-dashboard + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: The page number to return. Default is "1". + in: query + name: page + required: false + schema: + default: 1 + minimum: 1 + type: number + - description: The number of dashboards to display on each page (max 1000). Default is "20". + in: query + name: perPage + required: false + schema: + maximum: 1000 + minimum: 1 + type: number + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + items: + items: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + description: + default: '' + description: A short description. + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + title: + description: A human-readable title for the dashboard + type: string + required: + - title + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + type: array + total: + type: number + required: + - items + - total + summary: Get a list of dashboards + tags: + - Dashboards + x-state: Technical Preview + /api/dashboards/dashboard/{id}: + delete: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: delete-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + responses: {} + summary: Delete a dashboard + tags: + - Dashboards + x-state: Technical Preview + get: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: get-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + meta: + additionalProperties: false + type: object + properties: + aliasPurpose: + enum: + - savedObjectConversion + - savedObjectImport + type: string + aliasTargetId: + type: string + outcome: + enum: + - exactMatch + - aliasMatch + - conflict + type: string + required: + - outcome + required: + - item + - meta + summary: Get a dashboard + tags: + - Dashboards + x-state: Technical Preview + post: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: post-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: false + schema: + type: string + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + description: The unique identifier of the panel + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + description: The unique ID of the panel. + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + spaces: + items: + type: string + type: array + required: + - attributes + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + required: + - item + summary: Create a dashboard + tags: + - Dashboards + x-state: Technical Preview + put: + description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. + operationId: put-dashboards-dashboard-id + parameters: + - description: The version of the API to use + in: header + name: elastic-api-version + schema: + default: '2023-10-31' + enum: + - '2023-10-31' + type: string + - description: A required header to protect against CSRF attacks + in: header + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - description: A unique identifier for the dashboard. + in: path + name: id + required: true + schema: + type: string + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + description: The unique identifier of the panel + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + description: The unique ID of the panel. + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + required: + - attributes + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + item: + additionalProperties: true + type: object + properties: + attributes: + additionalProperties: false + type: object + properties: + controlGroupInput: + additionalProperties: false + type: object + properties: + autoApplySelections: + default: true + description: Show apply selections button in controls. + type: boolean + chainingSystem: + default: HIERARCHICAL + description: The chaining strategy for multiple controls. For example, "HIERARCHICAL" or "NONE". + enum: + - NONE + - HIERARCHICAL + type: string + controls: + default: [] + description: An array of control panels and their state in the control group. + items: + additionalProperties: true + type: object + properties: + controlConfig: + additionalProperties: {} + type: object + grow: + default: false + description: Expand width of the control panel to fit available space. + type: boolean + id: + description: The unique ID of the control. + type: string + order: + description: The order of the control panel in the control group. + type: number + type: + description: The type of the control panel. + type: string + width: + default: medium + description: Minimum width of the control panel in the control group. + enum: + - small + - medium + - large + type: string + required: + - type + - order + type: array + enhancements: + additionalProperties: {} + type: object + ignoreParentSettings: + additionalProperties: false + type: object + properties: + ignoreFilters: + default: false + description: Ignore global filters in controls. + type: boolean + ignoreQuery: + default: false + description: Ignore the global query bar in controls. + type: boolean + ignoreTimerange: + default: false + description: Ignore the global time range in controls. + type: boolean + ignoreValidations: + default: false + description: Ignore validations in controls. + type: boolean + labelPosition: + default: oneLine + description: Position of the labels for controls. For example, "oneLine", "twoLine". + enum: + - oneLine + - twoLine + type: string + required: + - ignoreParentSettings + description: + default: '' + description: A short description. + type: string + kibanaSavedObjectMeta: + additionalProperties: false + default: {} + description: A container for various metadata + type: object + properties: + searchSource: + additionalProperties: true + type: object + properties: + filter: + items: + additionalProperties: false + description: A filter for the search source. + type: object + properties: + $state: + additionalProperties: false + type: object + properties: + store: + description: Denote whether a filter is specific to an application's context (e.g. 'appState') or whether it should be applied globally (e.g. 'globalState'). + enum: + - appState + - globalState + type: string + required: + - store + meta: + additionalProperties: true + type: object + properties: + alias: + nullable: true + type: string + controlledBy: + type: string + disabled: + type: boolean + field: + type: string + group: + type: string + index: + type: string + isMultiIndex: + type: boolean + key: + type: string + negate: + type: boolean + params: {} + type: + type: string + value: + type: string + required: + - params + query: + additionalProperties: {} + type: object + required: + - meta + type: array + query: + additionalProperties: false + type: object + properties: + language: + description: The query language such as KQL or Lucene. + type: string + query: + anyOf: + - description: A text-based query such as Kibana Query Language (KQL) or Lucene query language. + type: string + - additionalProperties: {} + type: object + required: + - query + - language + sort: + items: + additionalProperties: + anyOf: + - enum: + - asc + - desc + type: string + - additionalProperties: false + type: object + properties: + format: + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + - additionalProperties: false + type: object + properties: + numeric_type: + enum: + - double + - long + - date + - date_nanos + type: string + order: + enum: + - asc + - desc + type: string + required: + - order + type: object + type: array + type: + type: string + options: + additionalProperties: false + type: object + properties: + hidePanelTitles: + default: false + description: Hide the panel titles in the dashboard. + type: boolean + syncColors: + default: true + description: Synchronize colors between related panels in the dashboard. + type: boolean + syncCursor: + default: true + description: Synchronize cursor position between related panels in the dashboard. + type: boolean + syncTooltips: + default: true + description: Synchronize tooltips between related panels in the dashboard. + type: boolean + useMargins: + default: true + description: Show margins between panels in the dashboard layout. + type: boolean + panels: + default: [] + items: + additionalProperties: false + type: object + properties: + gridData: + additionalProperties: false + type: object + properties: + h: + default: 15 + description: The height of the panel in grid units + minimum: 1 + type: number + i: + type: string + w: + default: 24 + description: The width of the panel in grid units + maximum: 48 + minimum: 1 + type: number + x: + description: The x coordinate of the panel in grid units + type: number + 'y': + description: The y coordinate of the panel in grid units + type: number + required: + - x + - 'y' + - i + id: + description: The saved object id for by reference panels + type: string + panelConfig: + additionalProperties: true + type: object + properties: + description: + description: The description of the panel + type: string + enhancements: + additionalProperties: {} + type: object + hidePanelTitles: + description: Set to true to hide the panel title in its container. + type: boolean + savedObjectId: + description: The unique id of the library item to construct the embeddable. + type: string + title: + description: The title of the panel + type: string + version: + description: The version of the embeddable in the panel. + type: string + panelIndex: + type: string + panelRefName: + type: string + title: + description: The title of the panel + type: string + type: + description: The embeddable type + type: string + version: + deprecated: true + description: The version was used to store Kibana version information from versions 7.3.0 -> 8.11.0. As of version 8.11.0, the versioning information is now per-embeddable-type and is stored on the embeddable's input. (panelConfig in this type). + type: string + required: + - panelConfig + - type + - gridData + - panelIndex + type: array + refreshInterval: + additionalProperties: false + description: A container for various refresh interval settings + type: object + properties: + display: + deprecated: true + description: A human-readable string indicating the refresh frequency. No longer used. + type: string + pause: + description: Whether the refresh interval is set to be paused while viewing the dashboard. + type: boolean + section: + deprecated: true + description: No longer used. + type: number + value: + description: A numeric value indicating refresh frequency in milliseconds. + type: number + required: + - pause + - value + timeFrom: + description: An ISO string indicating when to restore time from + type: string + timeRestore: + default: false + description: Whether to restore time upon viewing this dashboard + type: boolean + timeTo: + description: An ISO string indicating when to restore time from + type: string + title: + description: A human-readable title for the dashboard + type: string + version: + deprecated: true + type: number + required: + - title + - options + createdAt: + type: string + createdBy: + type: string + error: + additionalProperties: false + type: object + properties: + error: + type: string + message: + type: string + metadata: + additionalProperties: true + type: object + properties: {} + statusCode: + type: number + required: + - error + - message + - statusCode + id: + type: string + managed: + type: boolean + namespaces: + items: + type: string + type: array + originId: + type: string + references: + items: + additionalProperties: false + type: object + properties: + id: + type: string + name: + type: string + type: + type: string + required: + - name + - type + - id + type: array + type: + type: string + updatedAt: + type: string + updatedBy: + type: string + version: + type: string + required: + - id + - type + - attributes + - references + required: + - item + summary: Update an existing dashboard + tags: + - Dashboards + x-state: Technical Preview /api/data_views: get: operationId: getAllDataViewsDefault diff --git a/src/plugins/dashboard/server/api/register_routes.ts b/src/plugins/dashboard/server/api/register_routes.ts index 692942e1bd1bb..6cdd8704cf46e 100644 --- a/src/plugins/dashboard/server/api/register_routes.ts +++ b/src/plugins/dashboard/server/api/register_routes.ts @@ -53,6 +53,9 @@ export function registerAPIRoutes({ description: TECHNICAL_PREVIEW_WARNING, options: { tags: ['oas-tag:Dashboards'], + availability: { + stability: 'experimental', + }, }, }); @@ -62,7 +65,11 @@ export function registerAPIRoutes({ validate: { request: { params: schema.object({ - id: schema.maybe(schema.string()), + id: schema.maybe( + schema.string({ + meta: { description: 'A unique identifier for the dashboard.' }, + }) + ), }), body: schema.object({ attributes: dashboardAttributesSchema, @@ -115,10 +122,13 @@ export function registerAPIRoutes({ const updateRoute = versionedRouter.put({ path: `${PUBLIC_API_PATH}/{id}`, access: 'public', - summary: `Update an existing dashboard.`, + summary: `Update an existing dashboard`, description: TECHNICAL_PREVIEW_WARNING, options: { tags: ['oas-tag:Dashboards'], + availability: { + stability: 'experimental', + }, }, }); @@ -128,7 +138,9 @@ export function registerAPIRoutes({ validate: { request: { params: schema.object({ - id: schema.string(), + id: schema.string({ + meta: { description: 'A unique identifier for the dashboard.' }, + }), }), body: schema.object({ attributes: dashboardAttributesSchema, @@ -172,10 +184,13 @@ export function registerAPIRoutes({ const listRoute = versionedRouter.get({ path: `${PUBLIC_API_PATH}`, access: 'public', - summary: `Get a list of dashboards.`, + summary: `Get a list of dashboards`, description: TECHNICAL_PREVIEW_WARNING, options: { tags: ['oas-tag:Dashboards'], + availability: { + stability: 'experimental', + }, }, }); @@ -185,8 +200,22 @@ export function registerAPIRoutes({ validate: { request: { query: schema.object({ - page: schema.number({ defaultValue: 1 }), - perPage: schema.maybe(schema.number()), + page: schema.number({ + meta: { description: 'The page number to return. Default is "1".' }, + min: 1, + defaultValue: 1, + }), + perPage: schema.maybe( + schema.number({ + meta: { + description: + 'The number of dashboards to display on each page (max 1000). Default is "20".', + }, + defaultValue: 20, + min: 1, + max: 1000, + }) + ), }), }, response: { @@ -229,10 +258,13 @@ export function registerAPIRoutes({ const getRoute = versionedRouter.get({ path: `${PUBLIC_API_PATH}/{id}`, access: 'public', - summary: `Get a dashboard.`, + summary: `Get a dashboard`, description: TECHNICAL_PREVIEW_WARNING, options: { tags: ['oas-tag:Dashboards'], + availability: { + stability: 'experimental', + }, }, }); @@ -242,7 +274,11 @@ export function registerAPIRoutes({ validate: { request: { params: schema.object({ - id: schema.string(), + id: schema.string({ + meta: { + description: 'A unique identifier for the dashboard.', + }, + }), }), }, response: { @@ -283,10 +319,13 @@ export function registerAPIRoutes({ const deleteRoute = versionedRouter.delete({ path: `${PUBLIC_API_PATH}/{id}`, access: 'public', - summary: `Delete a dashboard.`, + summary: `Delete a dashboard`, description: TECHNICAL_PREVIEW_WARNING, options: { tags: ['oas-tag:Dashboards'], + availability: { + stability: 'experimental', + }, }, }); @@ -296,7 +335,11 @@ export function registerAPIRoutes({ validate: { request: { params: schema.object({ - id: schema.string(), + id: schema.string({ + meta: { + description: 'A unique identifier for the dashboard.', + }, + }), }), }, }, diff --git a/src/plugins/dashboard/server/content_management/v3/cm_services.ts b/src/plugins/dashboard/server/content_management/v3/cm_services.ts index d2a53309704c6..78b13b43322e1 100644 --- a/src/plugins/dashboard/server/content_management/v3/cm_services.ts +++ b/src/plugins/dashboard/server/content_management/v3/cm_services.ts @@ -7,7 +7,6 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { v4 as uuidv4 } from 'uuid'; import { schema, Type } from '@kbn/config-schema'; import { createOptionsSchemas, updateOptionsSchema } from '@kbn/content-management-utils'; import type { ContentManagementServicesDefinition as ServicesDefinition } from '@kbn/object-versioning'; @@ -50,10 +49,11 @@ export const controlGroupInputSchema = schema.object({ { type: schema.string({ meta: { description: 'The type of the control panel.' } }), controlConfig: schema.maybe(schema.recordOf(schema.string(), schema.any())), - id: schema.string({ - defaultValue: uuidv4(), - meta: { description: 'The unique ID of the control.' }, - }), + id: schema.maybe( + schema.string({ + meta: { description: 'The unique ID of the control.' }, + }) + ), order: schema.number({ meta: { description: 'The order of the control panel in the control group.', @@ -243,10 +243,11 @@ export const gridDataSchema = schema.object({ min: 1, meta: { description: 'The height of the panel in grid units' }, }), - i: schema.string({ - meta: { description: 'The unique identifier of the panel' }, - defaultValue: uuidv4(), - }), + i: schema.maybe( + schema.string({ + meta: { description: 'The unique identifier of the panel' }, + }) + ), }); export const panelSchema = schema.object({ @@ -284,10 +285,11 @@ export const panelSchema = schema.object({ type: schema.string({ meta: { description: 'The embeddable type' } }), panelRefName: schema.maybe(schema.string()), gridData: gridDataSchema, - panelIndex: schema.string({ - meta: { description: 'The unique ID of the panel.' }, - defaultValue: schema.siblingRef('gridData.i'), - }), + panelIndex: schema.maybe( + schema.string({ + meta: { description: 'The unique ID of the panel.' }, + }) + ), title: schema.maybe(schema.string({ meta: { description: 'The title of the panel' } })), version: schema.maybe( schema.string({ @@ -409,6 +411,19 @@ export const referenceSchema = schema.object( { unknowns: 'forbid' } ); +const dashboardAttributesSchemaResponse = dashboardAttributesSchema.extends({ + panels: schema.arrayOf( + panelSchema.extends({ + // Responses always include the panel index and gridData.i + panelIndex: schema.string(), + gridData: gridDataSchema.extends({ + i: schema.string(), + }), + }), + { defaultValue: [] } + ), +}); + export const dashboardItemSchema = schema.object( { id: schema.string(), @@ -420,7 +435,7 @@ export const dashboardItemSchema = schema.object( updatedBy: schema.maybe(schema.string()), managed: schema.maybe(schema.boolean()), error: schema.maybe(apiError), - attributes: dashboardAttributesSchema, + attributes: dashboardAttributesSchemaResponse, references: schema.arrayOf(referenceSchema), namespaces: schema.maybe(schema.arrayOf(schema.string())), originId: schema.maybe(schema.string()), diff --git a/src/plugins/dashboard/server/content_management/v3/types.ts b/src/plugins/dashboard/server/content_management/v3/types.ts index 36f277ff3b268..0c7144569aba2 100644 --- a/src/plugins/dashboard/server/content_management/v3/types.ts +++ b/src/plugins/dashboard/server/content_management/v3/types.ts @@ -16,6 +16,7 @@ import { UpdateIn, } from '@kbn/content-management-plugin/common'; import { SavedObjectReference } from '@kbn/core-saved-objects-api-server'; +import { WithRequiredProperty } from '@kbn/utility-types'; import { dashboardItemSchema, controlGroupInputSchema, @@ -40,6 +41,7 @@ export type DashboardOptions = TypeOf; // recognize this, so we need to manually extend the type here. export type DashboardPanel = Omit, 'panelConfig'> & { panelConfig: TypeOf['panelConfig'] & { [key: string]: any }; + gridData: GridData; }; export type DashboardAttributes = Omit, 'panels'> & { panels: DashboardPanel[]; @@ -52,7 +54,7 @@ export type PartialDashboardItem = Omit; -export type GridData = TypeOf; +export type GridData = WithRequiredProperty, 'i'>; export type DashboardGetIn = GetIn; export type DashboardGetOut = TypeOf; From 4e62c7dde3e0a060c10e6362d564c5ea3595d997 Mon Sep 17 00:00:00 2001 From: Dzmitry Lemechko Date: Thu, 5 Dec 2024 00:19:41 +0100 Subject: [PATCH 056/141] [kbn-test] extract ES logs only for svl (#202927) ## Summary PR fixes the issue reported by @dolaru when running stateful FTR environment without docker setup locally: ``` info [es] killing node info [es] stopping node scout info [es] no debug files found, assuming es did not write any info [es] cleanup complete ERROR UNHANDLED ERROR ERROR Error: Command failed with exit code 1: docker ps -a --format {{.Names}} error during connect: Get "http://docker.example.com/v1.47/containers/json?all=1": command [ssh -o ConnectTimeout=30 -T -l dolaru -- debian-12-vm docker system dial-stdio] has exited with exit status 255, make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=ssh: Could not resolve hostname dolaru-m2-mbp-debian.local: nodename nor servname provided, or not known at makeError (/Users/dolaru/workspace/kibana/node_modules/execa/lib/error.js:60:11) at handlePromise (/Users/dolaru/workspace/kibana/node_modules/execa/index.js:118:26) at processTicksAndRejections (node:internal/process/task_queues:95:5) at extractAndArchiveLogs (extract_and_archive_logs.ts:34:41) at run_elasticsearch.ts:86:5 ``` Since we don't need it for stateful ES instance, I added condition. kbn-scout had the same issue, so I exported `cleanupElasticsearch` from `kbn-test` to avoid code duplication --- .../kbn-scout/src/servers/run_elasticsearch.ts | 7 +++---- packages/kbn-test/index.ts | 1 + .../kbn-test/src/functional_tests/lib/index.ts | 2 +- .../functional_tests/lib/run_elasticsearch.ts | 18 +++++++++++++++--- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/packages/kbn-scout/src/servers/run_elasticsearch.ts b/packages/kbn-scout/src/servers/run_elasticsearch.ts index 5406f755f5d72..24c8a49da2d9a 100644 --- a/packages/kbn-scout/src/servers/run_elasticsearch.ts +++ b/packages/kbn-scout/src/servers/run_elasticsearch.ts @@ -12,8 +12,8 @@ import { resolve } from 'path'; import type { ToolingLog } from '@kbn/tooling-log'; import { REPO_ROOT } from '@kbn/repo-info'; import type { ArtifactLicense, ServerlessProjectType } from '@kbn/es'; -import { isServerlessProjectType, extractAndArchiveLogs } from '@kbn/es/src/utils'; -import { createTestEsCluster, esTestConfig } from '@kbn/test'; +import { isServerlessProjectType } from '@kbn/es/src/utils'; +import { createTestEsCluster, esTestConfig, cleanupElasticsearch } from '@kbn/test'; import { Config } from '../config'; interface RunElasticsearchOptions { @@ -82,8 +82,7 @@ export async function runElasticsearch( config, }); return async () => { - await node.cleanup(); - await extractAndArchiveLogs({ outputFolder: logsDir, log }); + await cleanupElasticsearch(node, config.serverless, logsDir, log); }; } diff --git a/packages/kbn-test/index.ts b/packages/kbn-test/index.ts index bd196e27c8cb0..b5506cc804ad3 100644 --- a/packages/kbn-test/index.ts +++ b/packages/kbn-test/index.ts @@ -22,6 +22,7 @@ export { remapPluginPaths, getKibanaCliArg, getKibanaCliLoggers, + cleanupElasticsearch, } from './src/functional_tests/lib'; export { initLogsDir } from './src/functional_tests/lib'; diff --git a/packages/kbn-test/src/functional_tests/lib/index.ts b/packages/kbn-test/src/functional_tests/lib/index.ts index 23c6ec8331602..62275737f6d47 100644 --- a/packages/kbn-test/src/functional_tests/lib/index.ts +++ b/packages/kbn-test/src/functional_tests/lib/index.ts @@ -8,7 +8,7 @@ */ export { runKibanaServer } from './run_kibana_server'; -export { runElasticsearch } from './run_elasticsearch'; +export { runElasticsearch, cleanupElasticsearch } from './run_elasticsearch'; export * from './run_ftr'; export { parseRawFlags, diff --git a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts index 964359cdb7ee5..6e082c7083b37 100644 --- a/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts +++ b/packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts @@ -16,7 +16,7 @@ import { REPO_ROOT } from '@kbn/repo-info'; import type { ArtifactLicense, ServerlessProjectType } from '@kbn/es'; import { isServerlessProjectType, extractAndArchiveLogs } from '@kbn/es/src/utils'; import type { Config } from '../../functional_test_runner'; -import { createTestEsCluster, esTestConfig } from '../../es'; +import { ICluster, createTestEsCluster, esTestConfig } from '../../es'; interface RunElasticsearchOptions { log: ToolingLog; @@ -77,6 +77,19 @@ function getEsConfig({ }; } +export async function cleanupElasticsearch( + node: ICluster, + isServerless: boolean, + logsDir: string | undefined, + log: ToolingLog +): Promise { + await node.cleanup(); + + if (isServerless) { + await extractAndArchiveLogs({ outputFolder: logsDir, log }); + } +} + export async function runElasticsearch( options: RunElasticsearchOptions ): Promise<() => Promise> { @@ -91,8 +104,7 @@ export async function runElasticsearch( config, }); return async () => { - await node.cleanup(); - await extractAndArchiveLogs({ outputFolder: logsDir, log }); + await cleanupElasticsearch(node, config.serverless, logsDir, log); }; } From 9ec4df24c27805fd55ecb8c643b6f9d23e05c7a1 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 5 Dec 2024 01:54:55 +0000 Subject: [PATCH 057/141] skip flaky suite (#199204) --- .../public/components/package_policy_delete_provider.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/fleet/public/components/package_policy_delete_provider.test.tsx b/x-pack/plugins/fleet/public/components/package_policy_delete_provider.test.tsx index 75fce0507f5af..d76f13ee78811 100644 --- a/x-pack/plugins/fleet/public/components/package_policy_delete_provider.test.tsx +++ b/x-pack/plugins/fleet/public/components/package_policy_delete_provider.test.tsx @@ -137,7 +137,8 @@ function createMockAgentPolicies( } } -describe('PackagePolicyDeleteProvider', () => { +// FLAKY: https://github.com/elastic/kibana/issues/199204 +describe.skip('PackagePolicyDeleteProvider', () => { it('Should show delete integrations action and cancel modal', async () => { useMultipleAgentPoliciesMock.mockReturnValue({ canUseMultipleAgentPolicies: false }); sendGetAgentsMock.mockResolvedValue({ From f646befb01310bbce5505f0928c1fb27bf04f839 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 5 Dec 2024 01:59:15 +0000 Subject: [PATCH 058/141] skip flaky suite (#202940) --- .../eql/trial_license_complete_tier/eql_alert_suppression.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/eql/trial_license_complete_tier/eql_alert_suppression.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts index f8331a2d6bf31..1ba24e60adc6a 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts @@ -2875,7 +2875,8 @@ export default ({ getService }: FtrProviderContext) => { }); }); - describe('@skipInServerless sequence queries with suppression duration', () => { + // FLAKY: https://github.com/elastic/kibana/issues/202940 + describe.skip('@skipInServerless sequence queries with suppression duration', () => { it('suppresses alerts across two rule executions when the suppression duration exceeds the rule interval', async () => { const id = uuidv4(); const firstTimestamp = new Date(Date.now() - 1000).toISOString(); From 287bb343d786c805403fbc11de05d493075546e0 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 5 Dec 2024 02:01:50 +0000 Subject: [PATCH 059/141] skip flaky suite (#201611) --- .../public/components/files/file_download_button.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/cases/public/components/files/file_download_button.test.tsx b/x-pack/plugins/cases/public/components/files/file_download_button.test.tsx index 0c729900a9ea6..da80fbdfaa578 100644 --- a/x-pack/plugins/cases/public/components/files/file_download_button.test.tsx +++ b/x-pack/plugins/cases/public/components/files/file_download_button.test.tsx @@ -36,7 +36,8 @@ describe('FileDownloadButton', () => { }); }); - describe('not isIcon', () => { + // FLAKY: https://github.com/elastic/kibana/issues/201611 + describe.skip('not isIcon', () => { beforeEach(() => { jest.clearAllMocks(); appMockRender = createAppMockRenderer(); From bae192ba9f83a792ae0a4b2b3a770ebf07f154bd Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 5 Dec 2024 02:03:29 +0000 Subject: [PATCH 060/141] skip flaky suite (#202147) --- .../components/onboarding_body/hooks/use_expanded_card.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts index 26612d83b565f..65ecbe06f26c5 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts @@ -39,7 +39,8 @@ describe('useExpandedCard Hook', () => { jest.clearAllMocks(); }); - describe('when the page is completely loaded', () => { + // FLAKY: https://github.com/elastic/kibana/issues/202147 + describe.skip('when the page is completely loaded', () => { beforeEach(() => { renderHook(useExpandedCard); }); From 003514581322e4ab302263aa8257c4b8981b89ae Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 5 Dec 2024 13:05:53 +1100 Subject: [PATCH 061/141] skip failing test suite (#202337) --- .../observability/synthetics/custom_status_rule.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts b/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts index 6600054e03ab9..ccc6d37112f01 100644 --- a/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts +++ b/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts @@ -22,7 +22,8 @@ export default function ({ getService }: FtrProviderContext) { const esDeleteAllIndices = getService('esDeleteAllIndices'); const supertest = getService('supertest'); - describe('SyntheticsCustomStatusRule', () => { + // Failing: See https://github.com/elastic/kibana/issues/202337 + describe.skip('SyntheticsCustomStatusRule', () => { const SYNTHETICS_RULE_ALERT_INDEX = '.alerts-observability.uptime.alerts-default'; before(async () => { From dd646b9442de7e4e58601ced3d296e16d32d5820 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Thu, 5 Dec 2024 02:07:12 +0000 Subject: [PATCH 062/141] skip flaky suite (#202945) --- .../eql/trial_license_complete_tier/eql_alert_suppression.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts index 1ba24e60adc6a..71403ad7a3728 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/rule_execution_logic/eql/trial_license_complete_tier/eql_alert_suppression.ts @@ -2876,6 +2876,7 @@ export default ({ getService }: FtrProviderContext) => { }); // FLAKY: https://github.com/elastic/kibana/issues/202940 + // FLAKY: https://github.com/elastic/kibana/issues/202945 describe.skip('@skipInServerless sequence queries with suppression duration', () => { it('suppresses alerts across two rule executions when the suppression duration exceeds the rule interval', async () => { const id = uuidv4(); From 1a912fcd9c7128921dc88bbe4aaa31e11a1dd6bf Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 5 Dec 2024 13:13:20 +1100 Subject: [PATCH 063/141] skip failing test suite (#196257) --- .../observability/synthetics/custom_status_rule.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts b/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts index ccc6d37112f01..218b40c6be845 100644 --- a/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts +++ b/x-pack/test/alerting_api_integration/observability/synthetics/custom_status_rule.ts @@ -23,6 +23,7 @@ export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); // Failing: See https://github.com/elastic/kibana/issues/202337 + // Failing: See https://github.com/elastic/kibana/issues/196257 describe.skip('SyntheticsCustomStatusRule', () => { const SYNTHETICS_RULE_ALERT_INDEX = '.alerts-observability.uptime.alerts-default'; From 774eaf1037a645789867ad033968bd9705f2b1fa Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 5 Dec 2024 13:19:11 +1100 Subject: [PATCH 064/141] skip failing test suite (#202328) --- .../apps/triggers_actions_ui/alert_create_flyout.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts index 8be74bd57db66..1c563ed9382f6 100644 --- a/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts +++ b/x-pack/test/functional_with_es_ssl/apps/triggers_actions_ui/alert_create_flyout.ts @@ -121,6 +121,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { // Failing: See https://github.com/elastic/kibana/issues/196153 // Failing: See https://github.com/elastic/kibana/issues/196153 + // Failing: See https://github.com/elastic/kibana/issues/202328 describe.skip('create alert', function () { let apmSynthtraceEsClient: ApmSynthtraceEsClient; const webhookConnectorName = 'webhook-test'; From e72536481b5f650eefadd0b1c0eb0b7661a73a82 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Thu, 5 Dec 2024 18:17:20 +1100 Subject: [PATCH 065/141] [api-docs] 2024-12-05 Daily api_docs build (#203047) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/912 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_inventory.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.devdocs.json | 16 +- api_docs/dashboard.mdx | 4 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_usage.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 2 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.devdocs.json | 61 ++++ api_docs/elastic_assistant.mdx | 4 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.devdocs.json | 311 +++++++++++++++++- api_docs/entity_manager.mdx | 4 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.devdocs.json | 6 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/inventory.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_ai_assistant.mdx | 2 +- api_docs/kbn_ai_assistant_common.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cbor.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_cloud_security_posture.mdx | 2 +- .../kbn_cloud_security_posture_common.mdx | 2 +- api_docs/kbn_cloud_security_posture_graph.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...ent_management_content_insights_public.mdx | 2 +- ...ent_management_content_insights_server.mdx | 2 +- ...bn_content_management_favorites_common.mdx | 2 +- ...bn_content_management_favorites_public.mdx | 2 +- ...bn_content_management_favorites_server.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.devdocs.json | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_browser.mdx | 2 +- ...bn_core_feature_flags_browser_internal.mdx | 2 +- .../kbn_core_feature_flags_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_server.mdx | 2 +- ...kbn_core_feature_flags_server_internal.mdx | 2 +- .../kbn_core_feature_flags_server_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 186 ++++++----- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server_utils.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- .../kbn_deeplinks_management.devdocs.json | 4 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- .../kbn_discover_contextual_components.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.devdocs.json | 38 +++ api_docs/kbn_esql_ast.mdx | 4 +- api_docs/kbn_esql_editor.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- ...kbn_gen_ai_functional_testing.devdocs.json | 205 ++++++++++++ api_docs/kbn_gen_ai_functional_testing.mdx | 36 ++ api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grid_layout.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_adapter.mdx | 2 +- ...dex_lifecycle_management_common_shared.mdx | 2 +- .../kbn_index_management_shared_types.mdx | 2 +- api_docs/kbn_inference_common.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_investigation_shared.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_item_buffer.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- api_docs/kbn_language_documentation.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- ...n_management_cards_navigation.devdocs.json | 4 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_manifest.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_field_stats_flyout.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_parse_interval.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- .../kbn_ml_trained_models_utils.devdocs.json | 5 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_ml_validators.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_object_versioning_utils.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_observability_logs_overview.mdx | 2 +- ...kbn_observability_synthetics_test_data.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_product_doc_artifact_builder.mdx | 2 +- api_docs/kbn_product_doc_common.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- ...kbn_reporting_csv_share_panel.devdocs.json | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- ...bn_reporting_export_types_csv.devdocs.json | 16 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- ...bn_reporting_export_types_pdf.devdocs.json | 16 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- ...bn_reporting_export_types_png.devdocs.json | 8 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- .../kbn_reporting_mocks_server.devdocs.json | 10 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.devdocs.json | 14 - api_docs/kbn_reporting_public.mdx | 4 +- api_docs/kbn_reporting_server.devdocs.json | 60 +--- api_docs/kbn_reporting_server.mdx | 4 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_response_ops_rule_form.mdx | 2 +- api_docs/kbn_response_ops_rule_params.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_saved_search_component.mdx | 2 +- api_docs/kbn_scout.mdx | 2 +- api_docs/kbn_screenshotting_server.mdx | 2 +- api_docs/kbn_search_api_keys_components.mdx | 2 +- api_docs/kbn_search_api_keys_server.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_shared_ui.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- api_docs/kbn_security_authorization_core.mdx | 2 +- ...kbn_security_authorization_core_common.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- .../kbn_security_role_management_model.mdx | 2 +- ...kbn_security_solution_distribution_bar.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- api_docs/kbn_security_ui_components.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- .../kbn_server_route_repository_client.mdx | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_table_persist.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_sse_utils.mdx | 2 +- api_docs/kbn_sse_utils_client.mdx | 2 +- api_docs/kbn_sse_utils_server.devdocs.json | 39 +++ api_docs/kbn_sse_utils_server.mdx | 4 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.devdocs.json | 106 ++++++ api_docs/kbn_test.mdx | 4 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_transpose_utils.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/llm_tasks.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.devdocs.json | 30 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 25 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/product_doc_base.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 4 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.devdocs.json | 12 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_assistant.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_indices.devdocs.json | 2 +- api_docs/search_indices.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_navigation.devdocs.json | 2 +- api_docs/search_navigation.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.mdx | 2 +- api_docs/security_solution.devdocs.json | 12 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/streams.devdocs.json | 82 ++++- api_docs/streams.mdx | 2 +- api_docs/streams_app.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 798 files changed, 1827 insertions(+), 1041 deletions(-) create mode 100644 api_docs/kbn_gen_ai_functional_testing.devdocs.json create mode 100644 api_docs/kbn_gen_ai_functional_testing.mdx diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index c4348a9a48601..44e6df0051c00 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 085757806bc21..d9b7684a21014 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index e1e8ba9866891..16b3d049774c3 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 428ade7744223..f08953a636c2f 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index 89134f0218de5..e7364c539c72a 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index b6b2d6a3ab1cf..af73a15c4d23d 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 998eda1dc17a9..375bdd80ea47c 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_inventory.mdx b/api_docs/asset_inventory.mdx index 55d0b7ecd749f..926e855163d18 100644 --- a/api_docs/asset_inventory.mdx +++ b/api_docs/asset_inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetInventory title: "assetInventory" image: https://source.unsplash.com/400x175/?github description: API docs for the assetInventory plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetInventory'] --- import assetInventoryObj from './asset_inventory.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index b1851d98928e2..dfe1f20c84c5c 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index d858e9ba8104a..10315cb41d758 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-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 023325877619f..440492b1035b2 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index c23eb1bb10f55..1c0bf62c8e510 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index c3dc4b74d7861..1d810a9559a4b 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index bd80ad0f03be0..ef8cf26d2ecc0 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index b207a528adca8..246d5634136f9 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index 91eddf482b78b..9b6cc4b640853 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 045aae0f821fa..f233f88b833e1 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 6f58ddbf11c1a..1d5b02638c26b 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index 16c1268c4c7ac..15dbdf080af4d 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 0066f8f32a6ab..e7b895fab2fe1 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index f1ff49c81bc85..bd3bcc2e10e98 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-12-04 +date: 2024-12-05 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 44745257e1472..79542dae85297 100644 --- a/api_docs/dashboard.devdocs.json +++ b/api_docs/dashboard.devdocs.json @@ -1285,7 +1285,9 @@ "section": "def-common.DashboardContainerInput", "text": "DashboardContainerInput" }, - ", \"executionContext\" | \"panels\" | \"controlGroupInput\">> & { dashboardId?: string | undefined; useHash?: boolean | undefined; preserveSavedFilters?: boolean | undefined; searchSessionId?: string | undefined; panels?: (Omit | undefined; savedObjectId?: string | undefined; } & {}>; gridData: Readonly<{} & { i: string; y: number; w: number; h: number; x: number; }>; panelIndex: string; }>, \"panelConfig\"> & { panelConfig: Readonly<{ version?: string | undefined; title?: string | undefined; description?: string | undefined; hidePanelTitles?: boolean | undefined; enhancements?: Record | undefined; savedObjectId?: string | undefined; } & {}> & { [key: string]: any; }; } & ", + ", \"executionContext\" | \"panels\" | \"controlGroupInput\">> & { dashboardId?: string | undefined; useHash?: boolean | undefined; preserveSavedFilters?: boolean | undefined; searchSessionId?: string | undefined; panels?: (Omit | undefined; savedObjectId?: string | undefined; } & {}>; gridData: Readonly<{ i?: string | undefined; } & { y: number; w: number; h: number; x: number; }>; }>, \"panelConfig\"> & { panelConfig: Readonly<{ version?: string | undefined; title?: string | undefined; description?: string | undefined; hidePanelTitles?: boolean | undefined; enhancements?: Record | undefined; savedObjectId?: string | undefined; } & {}> & { [key: string]: any; }; gridData: ", + "GridData", + "; } & ", { "pluginId": "@kbn/utility-types", "scope": "common", @@ -1532,7 +1534,7 @@ "section": "def-common.ControlLabelPosition", "text": "ControlLabelPosition" }, - "; autoApplySelections: boolean; ignoreParentSettings: Readonly<{} & { ignoreFilters: boolean; ignoreQuery: boolean; ignoreTimerange: boolean; ignoreValidations: boolean; }>; controls: Readonly<{ controlConfig?: Record | undefined; } & { id: string; type: string; order: number; grow: boolean; width: ", + "; autoApplySelections: boolean; ignoreParentSettings: Readonly<{} & { ignoreFilters: boolean; ignoreQuery: boolean; ignoreTimerange: boolean; ignoreValidations: boolean; }>; controls: Readonly<{ id?: string | undefined; controlConfig?: Record | undefined; } & { type: string; order: number; grow: boolean; width: ", { "pluginId": "controls", "scope": "common", @@ -1572,7 +1574,7 @@ "section": "def-common.FilterStateStore", "text": "FilterStateStore" }, - "; }> | undefined; } & { meta: Readonly<{ params?: any; key?: string | undefined; value?: string | undefined; type?: string | undefined; alias?: string | null | undefined; index?: string | undefined; disabled?: boolean | undefined; field?: string | undefined; group?: string | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; isMultiIndex?: boolean | undefined; } & {}>; }>[] | undefined; query?: Readonly<{} & { query: string | Record; language: string; }> | undefined; } & {}> | undefined; } & {}>; timeRestore: boolean; panels: Readonly<{ id?: string | undefined; version?: string | undefined; title?: string | undefined; panelRefName?: string | undefined; } & { type: string; panelConfig: Readonly<{ version?: string | undefined; title?: string | undefined; description?: string | undefined; hidePanelTitles?: boolean | undefined; enhancements?: Record | undefined; savedObjectId?: string | undefined; } & {}>; gridData: Readonly<{} & { i: string; y: number; w: number; h: number; x: number; }>; panelIndex: string; }>[]; }>, \"panels\"> & { panels: ", + "; }> | undefined; } & { meta: Readonly<{ params?: any; key?: string | undefined; value?: string | undefined; type?: string | undefined; alias?: string | null | undefined; index?: string | undefined; disabled?: boolean | undefined; field?: string | undefined; group?: string | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; isMultiIndex?: boolean | undefined; } & {}>; }>[] | undefined; query?: Readonly<{} & { query: string | Record; language: string; }> | undefined; } & {}> | undefined; } & {}>; timeRestore: boolean; panels: Readonly<{ id?: string | undefined; version?: string | undefined; title?: string | undefined; panelRefName?: string | undefined; panelIndex?: string | undefined; } & { type: string; panelConfig: Readonly<{ version?: string | undefined; title?: string | undefined; description?: string | undefined; hidePanelTitles?: boolean | undefined; enhancements?: Record | undefined; savedObjectId?: string | undefined; } & {}>; gridData: Readonly<{ i?: string | undefined; } & { y: number; w: number; h: number; x: number; }>; }>[]; }>, \"panels\"> & { panels: ", "DashboardPanel", "[]; }" ], @@ -1661,7 +1663,9 @@ "section": "def-common.DashboardPanelMap", "text": "DashboardPanelMap" }, - ", removeLegacyVersion?: boolean | undefined) => { panelRefName?: string | undefined; id?: string | undefined; title?: string | undefined; type: string; gridData: Readonly<{} & { i: string; y: number; w: number; h: number; x: number; }>; panelIndex: string; panelConfig: _.Omit { panelRefName?: string | undefined; id?: string | undefined; title?: string | undefined; type: string; gridData: ", + "GridData", + "; panelIndex: string; panelConfig: _.Omit, \"i\"> & { readonly i: string; }" ], "path": "src/plugins/dashboard/common/dashboard_container/types.ts", "deprecated": false, diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 7789f721787e4..48928e26afd80 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 114 | 0 | 111 | 13 | +| 114 | 0 | 111 | 14 | ## Client diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 3a6bb8a266f68..15f3a035e41db 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 5a912599207c0..0e44f5b6ae59d 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index c843dbc3f03b1..30e7b68e6c5b9 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 89ef4b5e6e54a..8322dc65837cf 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 3347408398b2f..c1168207a4e7d 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index 766a57e1377ca..66f926fb30ded 100644 --- a/api_docs/data_usage.mdx +++ b/api_docs/data_usage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataUsage title: "dataUsage" image: https://source.unsplash.com/400x175/?github description: API docs for the dataUsage plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataUsage'] --- import dataUsageObj from './data_usage.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 7c06280aeeb48..a2f7a703413bf 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index f563d056c9e0c..f9dc815b24f43 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index 9021a46925682..e8169220add69 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index a4ebfabb48493..9f0b52d55f51b 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index b52168994c2b6..4a9723ee0237f 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 13d13395e6721..66a06d208d474 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 98cdec7fdc4d9..a99a28bec938e 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index de3525e5d31c2..eb52c777ee8a3 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 50ae7f1c2d546..7d98513dfb169 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 525ee4c5d9b93..e8a85571768a3 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index bcac1745926d4..bf1f872ed5d90 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 4b8a582c6b998..443ae331e1b31 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 84644210ce820..885628f638a5e 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 3f3657effa6ac..47c1847ae25f3 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.devdocs.json b/api_docs/elastic_assistant.devdocs.json index 60d0345bc415b..6292df433806a 100644 --- a/api_docs/elastic_assistant.devdocs.json +++ b/api_docs/elastic_assistant.devdocs.json @@ -1569,6 +1569,27 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "elasticAssistant", + "id": "def-server.AssistantToolParams.llmTasks", + "type": "Object", + "tags": [], + "label": "llmTasks", + "description": [], + "signature": [ + { + "pluginId": "llmTasks", + "scope": "server", + "docId": "kibLlmTasksPluginApi", + "section": "def-server.LlmTasksPluginStart", + "text": "LlmTasksPluginStart" + }, + " | undefined" + ], + "path": "x-pack/plugins/elastic_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "elasticAssistant", "id": "def-server.AssistantToolParams.isOssModel", @@ -1862,6 +1883,26 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "elasticAssistant", + "id": "def-server.ElasticAssistantPluginStartDependencies.llmTasks", + "type": "Object", + "tags": [], + "label": "llmTasks", + "description": [], + "signature": [ + { + "pluginId": "llmTasks", + "scope": "server", + "docId": "kibLlmTasksPluginApi", + "section": "def-server.LlmTasksPluginStart", + "text": "LlmTasksPluginStart" + } + ], + "path": "x-pack/plugins/elastic_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "elasticAssistant", "id": "def-server.ElasticAssistantPluginStartDependencies.inference", @@ -1942,6 +1983,26 @@ "path": "x-pack/plugins/elastic_assistant/server/types.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "elasticAssistant", + "id": "def-server.ElasticAssistantPluginStartDependencies.productDocBase", + "type": "Object", + "tags": [], + "label": "productDocBase", + "description": [], + "signature": [ + { + "pluginId": "productDocBase", + "scope": "server", + "docId": "kibProductDocBasePluginApi", + "section": "def-server.ProductDocBaseStartContract", + "text": "ProductDocBaseStartContract" + } + ], + "path": "x-pack/plugins/elastic_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 403e8091b62f6..f42de26ee4fd2 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 53 | 0 | 38 | 2 | +| 56 | 0 | 41 | 2 | ## Server diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 0c9b5e68b76bb..bcf9a3e04d446 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index c472f7fc3fd34..a17079616ba63 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index a8e3a4f735612..9f5599e782000 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index da1fd6c9f048f..318c9cb6aae4e 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index a022a389c6878..00e0e88820aca 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.devdocs.json b/api_docs/entity_manager.devdocs.json index fb4d3e8050c6f..e08d74b938581 100644 --- a/api_docs/entity_manager.devdocs.json +++ b/api_docs/entity_manager.devdocs.json @@ -21,7 +21,7 @@ "label": "repositoryClient", "description": [], "signature": [ - "(endpoint: TEndpoint, ...args: MaybeOptionalArgs<", + "(endpoint: TEndpoint, ...args: MaybeOptionalArgs<", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -29,7 +29,79 @@ "section": "def-common.ClientRequestParamsOf", "text": "ClientRequestParamsOf" }, - "<{ \"POST /internal/entities/v2/_search/preview\": ", + "<{ \"GET /internal/entities/v2/definitions/sources\": { endpoint: \"GET /internal/entities/v2/definitions/sources\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/sources\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/definitions/sources\", Zod.ZodObject<{ body: Zod.ZodObject<{ source: Zod.ZodObject<{ id: Zod.ZodString; type_id: Zod.ZodString; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>, undefined>; \"GET /internal/entities/v2/definitions/types\": { endpoint: \"GET /internal/entities/v2/definitions/types\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ types: { id: string; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/types\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/definitions/types\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { type: { id: string; }; }, { type: { id: string; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: { id: string; }; }; }, { body: { type: { id: string; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + ", undefined>; \"POST /internal/entities/v2/_search/preview\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -37,7 +109,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodObject<{ sources: Zod.ZodArray; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }; }>, ", + "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ sources: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -63,7 +135,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodString; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }; }>, ", + "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ type: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: string; }, { type: string; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { type: string; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { type: string; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -377,7 +449,61 @@ "section": "def-common.ReturnOf", "text": "ReturnOf" }, - "<{ \"POST /internal/entities/v2/_search/preview\": ", + "<{ \"GET /internal/entities/v2/definitions/sources\": { endpoint: \"GET /internal/entities/v2/definitions/sources\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/sources\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/definitions/sources\", Zod.ZodObject<{ body: Zod.ZodObject<{ source: Zod.ZodObject<{ id: Zod.ZodString; type_id: Zod.ZodString; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>, undefined>; \"GET /internal/entities/v2/definitions/types\": { endpoint: \"GET /internal/entities/v2/definitions/types\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ types: { id: string; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/types\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -385,7 +511,25 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodObject<{ sources: Zod.ZodArray; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }; }>, ", + "<\"POST /internal/entities/v2/definitions/types\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { type: { id: string; }; }, { type: { id: string; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: { id: string; }; }; }, { body: { type: { id: string; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + ", undefined>; \"POST /internal/entities/v2/_search/preview\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ sources: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -411,7 +555,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodString; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }; }>, ", + "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ type: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: string; }, { type: string; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { type: string; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { type: string; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -1261,6 +1405,36 @@ "interfaces": [], "enums": [], "misc": [ + { + "parentPluginId": "entityManager", + "id": "def-server.CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE", + "type": "string", + "tags": [], + "label": "CREATE_ENTITY_SOURCE_DEFINITION_PRIVILEGE", + "description": [], + "signature": [ + "\"create_entity_source_definition\"" + ], + "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "entityManager", + "id": "def-server.CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE", + "type": "string", + "tags": [], + "label": "CREATE_ENTITY_TYPE_DEFINITION_PRIVILEGE", + "description": [], + "signature": [ + "\"create_entity_type_definition\"" + ], + "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "entityManager", "id": "def-server.EntityManagerConfig", @@ -1284,7 +1458,25 @@ "label": "EntityManagerRouteRepository", "description": [], "signature": [ - "{ \"POST /internal/entities/v2/_search/preview\": ", + "{ \"GET /internal/entities/v2/definitions/sources\": { endpoint: \"GET /internal/entities/v2/definitions/sources\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/sources\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -1292,7 +1484,61 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodObject<{ sources: Zod.ZodArray; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; limit: number; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { sources: { type: string; filters: string[]; metadata_fields: string[]; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; limit?: number | undefined; }; }>, ", + "<\"POST /internal/entities/v2/definitions/sources\", Zod.ZodObject<{ body: Zod.ZodObject<{ source: Zod.ZodObject<{ id: Zod.ZodString; type_id: Zod.ZodString; index_patterns: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }, { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }, { body: { source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ source: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }; }>, undefined>; \"GET /internal/entities/v2/definitions/types\": { endpoint: \"GET /internal/entities/v2/definitions/types\"; handler: ServerRouteHandler<", + "EntityManagerRouteHandlerResources", + ", undefined, ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + "<{ types: { id: string; }[]; }>>; security?: ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.RouteSecurity", + "text": "RouteSecurity" + }, + " | undefined; }; \"POST /internal/entities/v2/definitions/types\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/definitions/types\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; }, \"strip\", Zod.ZodTypeAny, { type: { id: string; }; }, { type: { id: string; }; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: { id: string; }; }; }, { body: { type: { id: string; }; }; }>, ", + "EntityManagerRouteHandlerResources", + ", ", + { + "pluginId": "@kbn/core-http-server", + "scope": "server", + "docId": "kibKbnCoreHttpServerPluginApi", + "section": "def-server.IKibanaResponse", + "text": "IKibanaResponse" + }, + ", undefined>; \"POST /internal/entities/v2/_search/preview\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /internal/entities/v2/_search/preview\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ sources: Zod.ZodArray; identity_fields: Zod.ZodArray; metadata_fields: Zod.ZodArray; filters: Zod.ZodArray; timestamp_field: Zod.ZodOptional; display_name: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }, { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }>, \"many\">; }, \"strip\", Zod.ZodTypeAny, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }, { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { sources: { id: string; filters: string[]; metadata_fields: string[]; type_id: string; index_patterns: string[]; identity_fields: string[]; timestamp_field?: string | undefined; display_name?: string | undefined; }[]; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -1318,7 +1564,7 @@ "section": "def-common.ServerRoute", "text": "ServerRoute" }, - "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodObject<{ type: Zod.ZodString; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; start: Zod.ZodEffects>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { body: { type: string; start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }; }, { body: { type: string; start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }; }>, ", + "<\"POST /internal/entities/v2/_search\", Zod.ZodObject<{ body: Zod.ZodIntersection>, string, string | undefined>; end: Zod.ZodEffects>, string, string | undefined>; sort: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { field: string; direction: \"ASC\" | \"DESC\"; }, { field: string; direction: \"ASC\" | \"DESC\"; }>>; limit: Zod.ZodDefault>; metadata_fields: Zod.ZodDefault>>; filters: Zod.ZodDefault>>; }, \"strip\", Zod.ZodTypeAny, { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; }, { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; }>, Zod.ZodObject<{ type: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { type: string; }, { type: string; }>>; }, \"strip\", Zod.ZodTypeAny, { body: { start: string; end: string; filters: string[]; limit: number; metadata_fields: string[]; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; } & { type: string; }; }, { body: { start?: string | undefined; end?: string | undefined; sort?: { field: string; direction: \"ASC\" | \"DESC\"; } | undefined; filters?: string[] | undefined; limit?: number | undefined; metadata_fields?: string[] | undefined; } & { type: string; }; }>, ", "EntityManagerRouteHandlerResources", ", ", { @@ -1622,6 +1868,51 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "entityManager", + "id": "def-server.READ_ENTITIES_PRIVILEGE", + "type": "string", + "tags": [], + "label": "READ_ENTITIES_PRIVILEGE", + "description": [], + "signature": [ + "\"read_entities\"" + ], + "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "entityManager", + "id": "def-server.READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE", + "type": "string", + "tags": [], + "label": "READ_ENTITY_SOURCE_DEFINITION_PRIVILEGE", + "description": [], + "signature": [ + "\"read_entity_source_definition\"" + ], + "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "entityManager", + "id": "def-server.READ_ENTITY_TYPE_DEFINITION_PRIVILEGE", + "type": "string", + "tags": [], + "label": "READ_ENTITY_TYPE_DEFINITION_PRIVILEGE", + "description": [], + "signature": [ + "\"read_entity_type_definition\"" + ], + "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [], diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 327c6f7ae6208..f50584f7f362a 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entiti | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 37 | 0 | 37 | 3 | +| 42 | 0 | 42 | 3 | ## Client diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 7fcfbd27e7393..f309d4fb9419c 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index b77690b16e75b..b6df8b06085f1 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index f9443fa3a9ff5..11f50f8c71474 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 534012b4d5709..f496e8286b0fe 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index d493f565bdf1a..292a5f672cbab 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.devdocs.json b/api_docs/event_log.devdocs.json index 38cb6edc47b4d..109159af2d1bf 100644 --- a/api_docs/event_log.devdocs.json +++ b/api_docs/event_log.devdocs.json @@ -1514,7 +1514,7 @@ "label": "data", "description": [], "signature": [ - "(Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; type_id?: string | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined)[]" + "(Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; type_id?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined)[]" ], "path": "x-pack/plugins/event_log/server/es/cluster_client_adapter.ts", "deprecated": false, @@ -1534,7 +1534,7 @@ "label": "IEvent", "description": [], "signature": [ - "DeepPartial | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; type_id?: string | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}>>> | undefined" + "DeepPartial | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; type_id?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}>>> | undefined" ], "path": "x-pack/plugins/event_log/generated/schemas.ts", "deprecated": false, @@ -1549,7 +1549,7 @@ "label": "IValidatedEvent", "description": [], "signature": [ - "Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; type_id?: string | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined" + "Readonly<{ log?: Readonly<{ logger?: string | undefined; level?: string | undefined; } & {}> | undefined; error?: Readonly<{ id?: string | undefined; type?: string | undefined; message?: string | undefined; code?: string | undefined; stack_trace?: string | undefined; } & {}> | undefined; '@timestamp'?: string | undefined; message?: string | undefined; tags?: string[] | undefined; rule?: Readonly<{ id?: string | undefined; version?: string | undefined; name?: string | undefined; license?: string | undefined; description?: string | undefined; uuid?: string | undefined; category?: string | undefined; reference?: string | undefined; author?: string[] | undefined; ruleset?: string | undefined; } & {}> | undefined; kibana?: Readonly<{ task?: Readonly<{ id?: string | undefined; schedule_delay?: string | number | undefined; scheduled?: string | undefined; } & {}> | undefined; action?: Readonly<{ id?: string | undefined; name?: string | undefined; type_id?: string | undefined; execution?: Readonly<{ source?: string | undefined; uuid?: string | undefined; gen_ai?: Readonly<{ usage?: Readonly<{ prompt_tokens?: string | number | undefined; completion_tokens?: string | number | undefined; total_tokens?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; usage?: Readonly<{ request_body_bytes?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; } & {}> | undefined; version?: string | undefined; alerting?: Readonly<{ outcome?: string | undefined; status?: string | undefined; summary?: Readonly<{ recovered?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; new?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; ongoing?: Readonly<{ count?: string | number | undefined; } & {}> | undefined; } & {}> | undefined; instance_id?: string | undefined; action_group_id?: string | undefined; action_subgroup?: string | undefined; } & {}> | undefined; alert?: Readonly<{ rule?: Readonly<{ consumer?: string | undefined; revision?: string | number | undefined; execution?: Readonly<{ uuid?: string | undefined; status?: string | undefined; metrics?: Readonly<{ total_search_duration_ms?: string | number | undefined; total_indexing_duration_ms?: string | number | undefined; number_of_triggered_actions?: string | number | undefined; number_of_generated_actions?: string | number | undefined; alert_counts?: Readonly<{ recovered?: string | number | undefined; active?: string | number | undefined; new?: string | number | undefined; } & {}> | undefined; number_of_delayed_alerts?: string | number | undefined; number_of_searches?: string | number | undefined; es_search_duration_ms?: string | number | undefined; execution_gap_duration_s?: string | number | undefined; rule_type_run_duration_ms?: string | number | undefined; process_alerts_duration_ms?: string | number | undefined; trigger_actions_duration_ms?: string | number | undefined; process_rule_duration_ms?: string | number | undefined; claim_to_start_duration_ms?: string | number | undefined; persist_alerts_duration_ms?: string | number | undefined; prepare_rule_duration_ms?: string | number | undefined; total_run_duration_ms?: string | number | undefined; total_enrichment_duration_ms?: string | number | undefined; } & {}> | undefined; status_order?: string | number | undefined; backfill?: Readonly<{ id?: string | undefined; start?: string | undefined; interval?: string | undefined; } & {}> | undefined; } & {}> | undefined; rule_type_id?: string | undefined; } & {}> | undefined; flapping?: boolean | undefined; uuid?: string | undefined; maintenance_window_ids?: string[] | undefined; } & {}> | undefined; space_ids?: string[] | undefined; server_uuid?: string | undefined; saved_objects?: Readonly<{ id?: string | undefined; type?: string | undefined; namespace?: string | undefined; rel?: string | undefined; type_id?: string | undefined; space_agnostic?: boolean | undefined; } & {}>[] | undefined; } & {}> | undefined; event?: Readonly<{ id?: string | undefined; type?: string[] | undefined; reason?: string | undefined; action?: string | undefined; start?: string | undefined; end?: string | undefined; outcome?: string | undefined; duration?: string | number | undefined; code?: string | undefined; severity?: string | number | undefined; category?: string[] | undefined; timezone?: string | undefined; risk_score?: number | undefined; url?: string | undefined; created?: string | undefined; provider?: string | undefined; dataset?: string | undefined; hash?: string | undefined; ingested?: string | undefined; kind?: string | undefined; module?: string | undefined; original?: string | undefined; reference?: string | undefined; risk_score_norm?: number | undefined; sequence?: string | number | undefined; } & {}> | undefined; ecs?: Readonly<{ version?: string | undefined; } & {}> | undefined; user?: Readonly<{ id?: string | undefined; name?: string | undefined; } & {}> | undefined; } & {}> | undefined" ], "path": "x-pack/plugins/event_log/generated/schemas.ts", "deprecated": false, diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index a484d997c245c..6a0a0e1f57232 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index cf0775ce83192..dfe16304652cc 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index d52f6a973d0ed..fc2c49ea0a549 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index 96b71c29ec363..fe8cf1d70e8da 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 6a7d13344a6de..c5b47ba0533fa 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index fa3ace9b3de93..6e8caf2c8470a 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 23f9a35801663..bf7bc8c457d54 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index f185899eb8746..77fa8c8f1bfe7 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index d4ba50f7fb97c..f42788be47536 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 3b8ee1c3ff204..9217f8db6d058 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 9006688f3403d..d61b5f529b8b6 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 6b1533b3abd43..8e4f6107b4e87 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index c79c21b9f0244..ae20f22e10cf7 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index 9c093ebd1337b..cd5e581996cd1 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index d1e4f2db692fb..8e1ce15251e29 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index a6e253b82e694..4dae3493adbbc 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 1702cdaf88ab4..8519484bec428 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index c741ad88a270d..8f9409bcf4e65 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 3dd253447fbea..b520762cb0979 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 749d0359ae800..c7008a3d269fa 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 201e726f8889e..af0071c018d86 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 3932454df9411..faae03200d380 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 0122614fca115..fecbc7e88e1c9 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 40377eebffeda..c8c37b5fd2b64 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index 633fd092c00f2..eeea8aed87340 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index ff2b1eace8794..353208af2fcfe 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index 99bb604f127dc..8c6493d6cb739 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 8b60ae8717ddd..676529442492a 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 3a45a0dec4dd8..246349bd87696 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index 030500abbc8e6..bd88e1d2395c0 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 4883e030e4681..c7bdce7d50ea3 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index 4885fa04f687a..8caea386dffa0 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index f11b8b3a6218c..db766c7df9012 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 8c8f19ee4188b..bbbf11ed39d71 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 98296faaad71d..e3f71b62a81b1 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/inventory.mdx b/api_docs/inventory.mdx index 29b895bbf37b4..358e44bec724e 100644 --- a/api_docs/inventory.mdx +++ b/api_docs/inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inventory title: "inventory" image: https://source.unsplash.com/400x175/?github description: API docs for the inventory plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inventory'] --- import inventoryObj from './inventory.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 1273dbd88b76b..c75d1d6b30873 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 5ea1418c874c4..80041fff6f649 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index da8e1a1a2de32..7bd5ce2e24be0 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant.mdx b/api_docs/kbn_ai_assistant.mdx index 6fe97e545a948..2127ba43fe97f 100644 --- a/api_docs/kbn_ai_assistant.mdx +++ b/api_docs/kbn_ai_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant title: "@kbn/ai-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant'] --- import kbnAiAssistantObj from './kbn_ai_assistant.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant_common.mdx b/api_docs/kbn_ai_assistant_common.mdx index 0b07871fa314b..6dae3837f8265 100644 --- a/api_docs/kbn_ai_assistant_common.mdx +++ b/api_docs/kbn_ai_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant-common title: "@kbn/ai-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-common'] --- import kbnAiAssistantCommonObj from './kbn_ai_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 93d6e4ca6b3e6..b7c6fb7e6dab4 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 6b930853f97f9..10b46b612c11b 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 32e7698a574a2..b3a6437a88c2c 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 85c74a0725835..7b03075b89e7a 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index fc1bf300771da..f363044ec29bb 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 889429319f067..436cdfa5ac8b8 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index 2c38c7dea05ac..b4e927000fdad 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 83d0ecbfdd7f8..32a2c5620280c 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 2e2c5dee4292e..705268d6772eb 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index eaf6b7afefa0d..03a37f44fe7c4 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 0688208da3a4e..2a0ed19749522 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 6c65fded83e3c..2bc6282fc5ce3 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index c4eb865655c49..5789a45a790bf 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index befe73a1e5c51..56a6621ea877a 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 4fb1e3d508066..599aa2fb083dc 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index d3a42ab4d8f66..ffcac4379cef7 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index fc7c5283cbf27..fb96df17d1788 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 449b715be8dfd..f1a9e5e8c8fd3 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 4038f5fa624e3..0a520cce01d44 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 1f8e1667c3c9e..7d18395a49575 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index 33919e92cbe9e..e97ce07efcea2 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-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 73fa84ad025bd..1ee103258509d 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index ab62da4117a77..7a2a97b5e03e9 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 8157201ddbdec..7f23851f916f3 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index cc7206fe76745..823e8c539063e 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 576132ee406d6..8d761c6213a28 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 0eee2226e27fe..eceff927c7476 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 0f7c5b88074a3..5182a6bc65785 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index da5359d1877c1..37384a9fb79fe 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 72465aedb6e7f..eec85e6d1ec36 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index a517d6489ce22..e6ae95bf722a1 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 70ddcb3e06c55..eef9901d343f6 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index de4d5f38b2b2c..7f538e041d2c3 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index cfba50d9410d8..3061b19b9b5b6 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_graph.mdx b/api_docs/kbn_cloud_security_posture_graph.mdx index 83e2dbe25c8c0..0c4de1cb4f303 100644 --- a/api_docs/kbn_cloud_security_posture_graph.mdx +++ b/api_docs/kbn_cloud_security_posture_graph.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-graph title: "@kbn/cloud-security-posture-graph" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-graph plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-graph'] --- import kbnCloudSecurityPostureGraphObj from './kbn_cloud_security_posture_graph.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index a983a4a2dd020..4e2366ef40ef0 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index 42fecaefb65b4..69f24d27ba3ed 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index b1e83c1e04f42..a5d4ee78e778b 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index bb273a1ebc0d8..18f3e55f51bce 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 08b953613c83a..0d610b960ae19 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index 76b5e1c6be1c6..2a9d3e05c72a4 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index c16e4c999d515..e5bc89bc83666 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index db1887cf7b23b..3161c83420fab 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index be4c35727d452..8d37ce7a9090d 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index 7b3c6e7dbad15..a161d2ea1d6db 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_common.mdx b/api_docs/kbn_content_management_favorites_common.mdx index 24a88839fa4b5..73d3db4f243ab 100644 --- a/api_docs/kbn_content_management_favorites_common.mdx +++ b/api_docs/kbn_content_management_favorites_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-common title: "@kbn/content-management-favorites-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-common'] --- import kbnContentManagementFavoritesCommonObj from './kbn_content_management_favorites_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index e54b5a171e512..001d4187cdb59 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index aa5fe3ce19625..422aa03144436 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index d31dd82766246..8e6097f33c5c7 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index 2c1784ecaed13..88c4312a3f1fa 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 6382733360c6a..759a66f28587b 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 7896acc5b16ea..cbe6712566e89 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index 0e2ac27b6b983..ef4957429848d 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 067e08645e0f7..33a653d39a967 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 139a85c567e70..a3832c4febbaa 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index 033b54ee12941..cf3c7a9263d90 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index ba066be2c61a8..617fa01449b91 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index 9e97b7799b010..59108e360bacc 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index 956fa2c66001b..4dbe3607886d8 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 0121c90b4f0f4..07430df9d07f2 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index 415266a6b2bea..fcb768fc96bad 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index bab95bbc3d321..a40c22b14fbb6 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index f23d0ea92170b..b584e1505faa2 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index 89bcf7ebf4922..94c96cb04f150 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 615c617375459..d682dff24480c 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index 5341d886d1928..0b4146c285cc8 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index 043b8460bae08..77743705ed3a9 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index 9a5638911f211..b1fc695a87a2c 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index a62f763c09787..bf98cd68db054 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index 8c98de2cff48d..bae54f0339b9a 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 02c138d02b56d..9b89a6db2d7f9 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index 6c0f34c3b808f..b8bf30f841ca5 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index fe880f02d582c..eec671caf8033 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index 037168c6a7659..953a27c63b3fd 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index e30dbdbdbe6e1..c560507ef80ea 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.devdocs.json b/api_docs/kbn_core_chrome_browser.devdocs.json index acc96d2631c68..113afb7d94fca 100644 --- a/api_docs/kbn_core_chrome_browser.devdocs.json +++ b/api_docs/kbn_core_chrome_browser.devdocs.json @@ -3765,7 +3765,7 @@ "label": "AppDeepLinkId", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "packages/core/chrome/core-chrome-browser/src/project_navigation.ts", "deprecated": false, diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 5a4ac1229deda..b125a4e5e5fe9 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index 7c5d26d77d322..2e071f814565d 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index d5eddf89e9467..81f63fae5fd40 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index 9cdf07135273f..ff2ef81681ee5 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index b1e8e3df5b37d..e759b5239a435 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index 869bf762de5b3..4861840b61679 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index 89fb112831351..4a19096576956 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index 58da4fa6a90d6..8f6ef2a0bda5c 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index d0b5ab69a1ddf..673c8088714c0 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index 4d785ad59491e..5240f99dd403a 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index a7be619b6b47d..29ec68ba35d27 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index c1c627e96d038..84df54ab8e49e 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index f973e7f86847d..b589c715a6429 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index 6b4212347f7bf..4c7c5678cea19 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index ee1c2eaf73c67..24078b4eea76e 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index c1fbcd5ee81b5..fb2be986c9134 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index 0139abd8dc355..32c1f425f8faf 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 3a2fda52329bb..b93e11588d665 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index c0f7f1af88052..1763fc52fd0a0 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index f679ac6090e18..f93080392e2e1 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index 794684fde5d7f..8eeb6aae2698e 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index 6905e6720d199..04c40d6fed6d3 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index 5f1055e3fd8be..207ebe5e5fdf9 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index dfb719efaba2c..be3482fd4d8a2 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index bee169f020184..4f1cc7ed6f996 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index e601cb2c41ec4..372b62a1600fb 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index 00ba80c427d72..e4907cb59999e 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index 0c5cccfa619a7..ce2c7c8a9d902 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index a60bcab07388f..554bb432d4406 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index a052e367b58b3..b215bc409d44b 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 28e876ebd284b..b72ef85c3b93a 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 6c8982376ca73..a2ca12f0d754c 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index 6ac62f9327ac0..fa00ae4b9c8a7 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index 06a80e5ae9639..9a5e33f5a5b6c 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index c61bd146ed516..cccff5fe48058 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index c7ada85998dac..030f53e0d5b2b 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index 25a9348f3411e..d3735a2615d17 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser.mdx b/api_docs/kbn_core_feature_flags_browser.mdx index f9bf0883453ff..e6fc3ef698ccd 100644 --- a/api_docs/kbn_core_feature_flags_browser.mdx +++ b/api_docs/kbn_core_feature_flags_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser title: "@kbn/core-feature-flags-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser'] --- import kbnCoreFeatureFlagsBrowserObj from './kbn_core_feature_flags_browser.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_internal.mdx b/api_docs/kbn_core_feature_flags_browser_internal.mdx index b59a7bd238244..9614fcb0f9451 100644 --- a/api_docs/kbn_core_feature_flags_browser_internal.mdx +++ b/api_docs/kbn_core_feature_flags_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-internal title: "@kbn/core-feature-flags-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-internal'] --- import kbnCoreFeatureFlagsBrowserInternalObj from './kbn_core_feature_flags_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_mocks.mdx b/api_docs/kbn_core_feature_flags_browser_mocks.mdx index 6cf848764668a..4216d28c0f163 100644 --- a/api_docs/kbn_core_feature_flags_browser_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-mocks title: "@kbn/core-feature-flags-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-mocks'] --- import kbnCoreFeatureFlagsBrowserMocksObj from './kbn_core_feature_flags_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server.mdx b/api_docs/kbn_core_feature_flags_server.mdx index 69b93f3a4d23a..d42014a9d7d52 100644 --- a/api_docs/kbn_core_feature_flags_server.mdx +++ b/api_docs/kbn_core_feature_flags_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server title: "@kbn/core-feature-flags-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server'] --- import kbnCoreFeatureFlagsServerObj from './kbn_core_feature_flags_server.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_internal.mdx b/api_docs/kbn_core_feature_flags_server_internal.mdx index f7e1cd613e14d..b012e68abc8e6 100644 --- a/api_docs/kbn_core_feature_flags_server_internal.mdx +++ b/api_docs/kbn_core_feature_flags_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-internal title: "@kbn/core-feature-flags-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-internal'] --- import kbnCoreFeatureFlagsServerInternalObj from './kbn_core_feature_flags_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_mocks.mdx b/api_docs/kbn_core_feature_flags_server_mocks.mdx index 0a40d922b497e..74ec68ae732b5 100644 --- a/api_docs/kbn_core_feature_flags_server_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-mocks title: "@kbn/core-feature-flags-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-mocks'] --- import kbnCoreFeatureFlagsServerMocksObj from './kbn_core_feature_flags_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index ae01188315e5d..93317a929f573 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index e08e5447841d9..b87b7069f235f 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index 351e0c63b31f0..85f080bef0e0d 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index e714a1e1d43b9..f43071f0b5ad4 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index 39476482b121a..7d2a5791a5542 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index dc49a0dd3af82..ebd3121542acb 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index 513ad790d9eaf..304e9829906c0 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index b7fddc7a9f50a..3777e8370cfb9 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index d7e9f4e31da3c..b871c5844280a 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index b30c609b048d2..65c2d797fd88e 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index c27172643701d..3b6d88a4848e5 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 74fb6a313f775..dd55a6904231d 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -4193,6 +4193,10 @@ "plugin": "inference", "path": "x-pack/plugins/inference/server/routes/connectors.ts" }, + { + "plugin": "productDocBase", + "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" + }, { "plugin": "globalSearch", "path": "x-pack/plugins/global_search/server/routes/get_searchable_types.ts" @@ -4789,6 +4793,10 @@ "plugin": "searchPlayground", "path": "x-pack/plugins/search_playground/server/routes.ts" }, + { + "plugin": "searchprofiler", + "path": "x-pack/plugins/searchprofiler/server/routes/profile.ts" + }, { "plugin": "serverlessSearch", "path": "x-pack/plugins/serverless_search/server/routes/api_key_routes.ts" @@ -4969,10 +4977,6 @@ "plugin": "watcher", "path": "x-pack/plugins/watcher/server/routes/api/register_load_history_route.ts" }, - { - "plugin": "productDocBase", - "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" - }, { "plugin": "customBranding", "path": "x-pack/plugins/custom_branding/server/routes/info.ts" @@ -6883,6 +6887,14 @@ "plugin": "inference", "path": "x-pack/plugins/inference/server/routes/chat_complete.ts" }, + { + "plugin": "productDocBase", + "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" + }, + { + "plugin": "productDocBase", + "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" + }, { "plugin": "globalSearch", "path": "x-pack/plugins/global_search/server/routes/find.ts" @@ -7559,14 +7571,6 @@ "plugin": "watcher", "path": "x-pack/plugins/watcher/server/routes/api/register_list_fields_route.ts" }, - { - "plugin": "productDocBase", - "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" - }, - { - "plugin": "productDocBase", - "path": "x-pack/plugins/ai_infra/product_doc_base/server/routes/installation.ts" - }, { "plugin": "grokdebugger", "path": "x-pack/plugins/grokdebugger/server/lib/kibana_framework.ts" @@ -15485,6 +15489,46 @@ "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/notifications.ts" }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/calendars.ts" @@ -15669,42 +15713,6 @@ "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/system.ts" }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/management.ts" @@ -16009,6 +16017,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/routes/index/read_alerts_index_exists_route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/get_insights.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/risk_score/prebuilt_dev_tool_content/routes/read_prebuilt_dev_tool_content_route.ts" @@ -16524,6 +16536,10 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/security/fleet_router.ts" }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/annotations.ts" @@ -16560,10 +16576,6 @@ "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/anomaly_detectors.ts" }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/inference_models.ts" @@ -16620,6 +16632,10 @@ "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/api/rules/update_rule/route.ts" }, + { + "plugin": "securitySolution", + "path": "x-pack/plugins/security_solution/server/endpoint/routes/workflow_insights/update_insight.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/risk_score/indices/create_index_route.ts" @@ -16967,6 +16983,34 @@ "plugin": "ecsDataQualityDashboard", "path": "x-pack/plugins/ecs_data_quality_dashboard/server/routes/results/post_index_results.ts" }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/annotations.ts" @@ -17231,34 +17275,6 @@ "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/system.ts" }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/alerting.ts" @@ -18157,6 +18173,10 @@ "plugin": "fleet", "path": "x-pack/plugins/fleet/server/services/security/fleet_router.ts" }, + { + "plugin": "ml", + "path": "x-pack/plugins/ml/server/routes/trained_models.ts" + }, { "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/annotations.ts" @@ -18189,10 +18209,6 @@ "plugin": "ml", "path": "x-pack/plugins/ml/server/routes/anomaly_detectors.ts" }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/server/routes/trained_models.ts" - }, { "plugin": "elasticAssistant", "path": "x-pack/plugins/elastic_assistant/server/routes/user_conversations/delete_route.ts" @@ -20755,7 +20771,7 @@ "\nHttp response headers to set." ], "signature": [ - "Record | Record<\"date\" | \"allow\" | \"warning\" | \"location\" | \"authorization\" | \"from\" | \"host\" | \"range\" | \"etag\" | \"accept\" | \"accept-language\" | \"accept-patch\" | \"accept-ranges\" | \"access-control-allow-credentials\" | \"access-control-allow-headers\" | \"access-control-allow-methods\" | \"access-control-allow-origin\" | \"access-control-expose-headers\" | \"access-control-max-age\" | \"access-control-request-headers\" | \"access-control-request-method\" | \"age\" | \"alt-svc\" | \"cache-control\" | \"connection\" | \"content-disposition\" | \"content-encoding\" | \"content-language\" | \"content-length\" | \"content-location\" | \"content-range\" | \"content-type\" | \"cookie\" | \"expect\" | \"expires\" | \"forwarded\" | \"if-match\" | \"if-modified-since\" | \"if-none-match\" | \"if-unmodified-since\" | \"last-modified\" | \"origin\" | \"pragma\" | \"proxy-authenticate\" | \"proxy-authorization\" | \"public-key-pins\" | \"referer\" | \"retry-after\" | \"sec-websocket-accept\" | \"sec-websocket-extensions\" | \"sec-websocket-key\" | \"sec-websocket-protocol\" | \"sec-websocket-version\" | \"set-cookie\" | \"strict-transport-security\" | \"tk\" | \"trailer\" | \"transfer-encoding\" | \"upgrade\" | \"user-agent\" | \"vary\" | \"via\" | \"www-authenticate\", string | string[]>" + "Record<\"date\" | \"allow\" | \"warning\" | \"location\" | \"authorization\" | \"from\" | \"host\" | \"range\" | \"etag\" | \"accept\" | \"accept-language\" | \"accept-patch\" | \"accept-ranges\" | \"access-control-allow-credentials\" | \"access-control-allow-headers\" | \"access-control-allow-methods\" | \"access-control-allow-origin\" | \"access-control-expose-headers\" | \"access-control-max-age\" | \"access-control-request-headers\" | \"access-control-request-method\" | \"age\" | \"alt-svc\" | \"cache-control\" | \"connection\" | \"content-disposition\" | \"content-encoding\" | \"content-language\" | \"content-length\" | \"content-location\" | \"content-range\" | \"content-type\" | \"cookie\" | \"expect\" | \"expires\" | \"forwarded\" | \"if-match\" | \"if-modified-since\" | \"if-none-match\" | \"if-unmodified-since\" | \"last-modified\" | \"origin\" | \"pragma\" | \"proxy-authenticate\" | \"proxy-authorization\" | \"public-key-pins\" | \"referer\" | \"retry-after\" | \"sec-websocket-accept\" | \"sec-websocket-extensions\" | \"sec-websocket-key\" | \"sec-websocket-protocol\" | \"sec-websocket-version\" | \"set-cookie\" | \"strict-transport-security\" | \"tk\" | \"trailer\" | \"transfer-encoding\" | \"upgrade\" | \"user-agent\" | \"vary\" | \"via\" | \"www-authenticate\", string | string[]> | Record" ], "path": "packages/core/http/core-http-server/src/router/headers.ts", "deprecated": false, diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 4555947150dc1..d53c431bc997c 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 577d29659f0a3..9f7800f0c42ed 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index 19754d4daeb0d..eb5b1b4d22b1e 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_utils.mdx b/api_docs/kbn_core_http_server_utils.mdx index 9fdd8dbe22b20..6ae3c6c8bdc17 100644 --- a/api_docs/kbn_core_http_server_utils.mdx +++ b/api_docs/kbn_core_http_server_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-utils title: "@kbn/core-http-server-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-utils'] --- import kbnCoreHttpServerUtilsObj from './kbn_core_http_server_utils.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index a14a0223a08a7..e635398eccc7a 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index b0120417f64e6..3d0e8bb5c5054 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index e059d3c886d32..3fec91b07b63c 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index 6981d19721567..9c117c90e46e0 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index fd4cb19fa366a..33cb92b0bbf4c 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index f0701519f413e..197b20f5decf4 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index ae6da1defb41d..3dc7c57b7f83a 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index 3adfe84b4f5f6..c0ca84a0076f1 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 36c0e29b13155..9c9397f5c0497 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index 2b03388339aef..546bae9e59052 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index 824cc472f8a5f..8e3ca85eaeb44 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index 43b4e5e3baf36..e6a888711379c 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index 0b28a40d4498a..de4833fdf3a65 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index e6a497e401c13..e94c2b96f1186 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index f3b2661af80df..7c9076fd10e6c 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 4f678cdb4a982..b01050d97c3a3 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index c672c30543a69..96472497405a0 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index 5e7c416da6127..5d2e583a447b3 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index 39eceedc182eb..58fe2c7c7688a 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index 69a813f18762f..654b4a5202382 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index b918443a1b009..bc7bfdca9165d 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index 131947cb74c15..4f55d8999fe14 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index 17ea2f36194db..a68f2a7115f09 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index 3e978ff053260..5ffaad7010caa 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index af65350929d21..a66d2379f3b7b 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index ce6d554db0320..307edfb975a03 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index 7e8cb9c36d58a..0386b6ac66e02 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index 23cbf2110872a..444a44e81f75e 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index 0cafab758c0e5..277b8c8c7a8f3 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 920ab59035c0f..852b22548654b 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index b4c05840f2674..77a7444974c7b 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index b1e6b08d5bf9a..56c9435e72204 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 7a3f8bf254c79..3da12cdd78ad2 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index 91ac124c64b5b..7cd76f5393ac2 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index acd13bb4eaf90..542ec6f810c4d 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 5c57a0ab84cca..cd1e406d4ef22 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 0d5697816ccf7..c7815ec645a6d 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index c6cda7a75c583..e38218fc0d999 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index f34a0514e723f..93b2a3e0df091 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 6ded7d61fcfeb..df370cdc30d64 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser.mdx b/api_docs/kbn_core_rendering_browser.mdx index 1838f6bdaf775..d0fba64e00ba0 100644 --- a/api_docs/kbn_core_rendering_browser.mdx +++ b/api_docs/kbn_core_rendering_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser title: "@kbn/core-rendering-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser'] --- import kbnCoreRenderingBrowserObj from './kbn_core_rendering_browser.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index 800bc0c4ea237..5771b78a30fa9 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index d41a86955a72a..a00f4a050123e 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index ce345fe98f724..518bac917d8c7 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index 548ce22a0f69b..9ededd3289f77 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index cafd4c7ff0458..c18b4d37b20c3 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 9f30387db4e6a..f6e8e8d522a41 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index f5337dc112890..fd07c7706410d 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index 9f4fec851d4e3..1d54509a60e04 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index ef90c58164528..d764dcb29ce2c 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index ca5a3fe54a9dd..4a5cfacbfe05a 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index e5f3f1d79d44d..60087c614efa3 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index c386ab576e53e..356f860780c85 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index 31d4b760876ec..cf0cb5f060a53 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index 408c84af27522..a08d13c9ce455 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index 8513e427ed4bd..582f622e8f24c 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index 0e0188cec8f6e..1738eda766167 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index bbaf3226d17fa..e06c6ffc6ba35 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index def75e9a0bf42..f709e4cf3dcc8 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index efa24f7133f1a..01cf64367b930 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 854a6fd5f339a..2eb1b6207be4c 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index 5afdcc6a3a1d9..c186fe40e4981 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 4583971f5af23..b7c9af8be4dde 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 43a6675fa5618..819a604f933a0 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 5871d19ab6e4d..9ef6baeef9af5 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index df18849446f70..ade892a629634 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index 04ebf311e4214..bbb402db93bb5 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 1d9597ab84f9b..5c8aae302f6c8 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index 61cee88e45976..d4ebdd7093d4e 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index af98b204a9845..25d492eec2cea 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index c8da7f2fb1129..f8a6763467762 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 43bbfa3a1db70..72408f30f2a27 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index 3974f71571a23..91075bc408082 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index 0ec6a0f46810c..b7dc893f5e661 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index a1a4189a5dbba..89c3d76c580bc 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 55c71ff2b79a5..76610bb39ebb2 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 49b0a19ccf8e7..e0e62e3711a64 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index cd3088c8f08be..f05defa4a9c15 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index 4229dccaaca24..6524d0dad75f6 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index c81d88da88cd1..d050dd18c6903 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 73460277a4e1e..3b412c2e35f2b 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index 1e3abef29e673..55239a0925ac7 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index cc355cbb2be9c..a09e61f0614d9 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 9b84314cbc838..a23c8f2e760da 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 6dd623506d465..f07c8635c04a5 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index 5e55a73094ca2..33c63a5136f77 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index cf3c18fc3b12b..e79c1e5558596 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index b16e4165c8799..1829385b680e2 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index ae363121df001..bfb317da8da3f 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index c81f5e2b12bb6..e77142009e897 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index 378ac22e6fae6..7d34f39d430d3 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index 82b522281754f..74273043edcf8 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 85c05d82d3fa7..cdcf484a5773a 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 246dfa76c1968..f711c7728abba 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 3530b8dcae63b..5771840dd7fdc 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index caadd1c4789f7..1b3748d7e396c 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index fcbe2e1d6f9e2..d537c7cc88adc 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 1a30ca194196a..a3803242e9fcc 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index f15e97a5f802e..3a80ee49393c9 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 8fb2be8a00470..bf6260a407bee 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 2c1a0a235f853..8434d24e33989 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 43aff04e304b6..66ed4410036aa 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 195e7c1f50292..751e134214d1a 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 786e468c07655..5edbcb21820aa 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index b6d9518c5994f..5c58ff51d786a 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index 4a931ee5d5b4b..7c9548979c262 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index 442d143d195a4..db6539f65359b 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index 9a8a585682bbc..a70a5c5713dd5 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index dd3b8d208aaae..fff86f338f532 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index 0ebe9c08c67c8..0a262e45d7b90 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index 845633b4f5943..d9efc3af68e78 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index 83c9162a9d953..eb0611c880bc2 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 65d854069d1d7..fa840d7e95990 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.devdocs.json b/api_docs/kbn_deeplinks_management.devdocs.json index 8279acbff8269..379adac0327dc 100644 --- a/api_docs/kbn_deeplinks_management.devdocs.json +++ b/api_docs/kbn_deeplinks_management.devdocs.json @@ -45,7 +45,7 @@ "label": "DeepLinkId", "description": [], "signature": [ - "\"fleet\" | \"monitoring\" | \"management\" | \"integrations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\"" + "\"fleet\" | \"monitoring\" | \"management\" | \"integrations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\"" ], "path": "packages/deeplinks/management/deep_links.ts", "deprecated": false, @@ -60,7 +60,7 @@ "label": "LinkId", "description": [], "signature": [ - "\"transform\" | \"watcher\" | \"cases\" | \"tags\" | \"maintenanceWindows\" | \"cross_cluster_replication\" | \"dataViews\" | \"spaces\" | \"settings\" | \"users\" | \"migrate_data\" | \"search_sessions\" | \"data_quality\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"aiAssistantManagementSelection\" | \"securityAiAssistantManagement\" | \"observabilityAiAssistantManagement\" | \"api_keys\" | \"license_management\" | \"index_lifecycle_management\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"remote_clusters\" | \"role_mappings\" | \"rollup_jobs\" | \"snapshot_restore\" | \"triggersActions\" | \"triggersActionsConnectors\" | \"upgrade_assistant\"" + "\"transform\" | \"watcher\" | \"cases\" | \"tags\" | \"maintenanceWindows\" | \"cross_cluster_replication\" | \"dataViews\" | \"spaces\" | \"settings\" | \"users\" | \"migrate_data\" | \"search_sessions\" | \"data_quality\" | \"filesManagement\" | \"pipelines\" | \"roles\" | \"reporting\" | \"aiAssistantManagementSelection\" | \"securityAiAssistantManagement\" | \"observabilityAiAssistantManagement\" | \"api_keys\" | \"license_management\" | \"index_lifecycle_management\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"remote_clusters\" | \"role_mappings\" | \"rollup_jobs\" | \"snapshot_restore\" | \"triggersActions\" | \"triggersActionsConnectors\" | \"upgrade_assistant\"" ], "path": "packages/deeplinks/management/deep_links.ts", "deprecated": false, diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 9fe7a06efabde..eed1cf6cf5816 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index cb3f60a593d78..f76c4832b8bdd 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index 4ff197ed84254..86d8cb02fb077 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 266f802a5a093..0c5aa89e27bac 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index bd4e89f4d32aa..0afa887c2cfa2 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 94628b350da1f..d310a678a3511 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index de4a4a3e7b54d..fb757ed168867 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index 2acc7d88a5b15..3b66a3d944e06 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index 67d4aff260561..a1fef9959cf2a 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index c1fe4e4462117..246e0bd5e365e 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 6fa6333287d56..16fe3b1ab4428 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index 8743aef828990..715be8b8e72a6 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index df44ffeb7fd3e..04a4817f24048 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 437e50a6616aa..b628230f9ab44 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_contextual_components.mdx b/api_docs/kbn_discover_contextual_components.mdx index 05191dbd7dc4e..dd540f89dd994 100644 --- a/api_docs/kbn_discover_contextual_components.mdx +++ b/api_docs/kbn_discover_contextual_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-contextual-components title: "@kbn/discover-contextual-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-contextual-components plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-contextual-components'] --- import kbnDiscoverContextualComponentsObj from './kbn_discover_contextual_components.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 5bedb7d432a07..832e2bd9dd49e 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 14308e13589e9..a336c7d7355f4 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index 94941da8442e2..ed2d5bbe7b9d2 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index 5f2407484ae74..c542c802d674c 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index acb91dfbe9940..c00fa59b7a85c 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 92a81ef7d7ef4..25d1c1927ad9d 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index f7961494628d4..1bb3be1d94a6d 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index f09e260ca150a..80756ca060356 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index c0eb380f72c40..dcbda49d0549b 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 33a74251271c5..87e334ffee10d 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 57b41841cee57..06c36e7e3a0d7 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index dccdc9fbbef11..f68c178f31a6a 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 6eff3ef151a42..0a3bb4f9da1bc 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 41ec11bee6a7b..f6eb9a88e57d7 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index c43378f58415c..a78417d27f38b 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index f39c40d5200eb..117463c4c3437 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.devdocs.json b/api_docs/kbn_esql_ast.devdocs.json index bf0442c6badd7..3a850ab7e31f6 100644 --- a/api_docs/kbn_esql_ast.devdocs.json +++ b/api_docs/kbn_esql_ast.devdocs.json @@ -1001,6 +1001,28 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.EsqlQuery.Unnamed.$4", + "type": "Array", + "tags": [], + "label": "errors", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.EditorError", + "text": "EditorError" + }, + "[]" + ], + "path": "packages/kbn-esql-ast/src/query/query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true } ], "returnComment": [] @@ -14434,6 +14456,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/esql-ast", + "id": "def-common.ESQLCommand.commandType", + "type": "string", + "tags": [], + "label": "commandType", + "description": [ + "\nThe subtype of the command. For example, the `JOIN` command can be: (1)\nLOOKUP JOIN, (2) LEFT JOIN, (3) RIGHT JOIN." + ], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-esql-ast/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/esql-ast", "id": "def-common.ESQLCommand.args", diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 2d5bb60c7bc55..3dc114d5d9bbe 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 283 | 1 | 222 | 36 | +| 285 | 1 | 223 | 36 | ## Common diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx index 54df72c9b35d7..98f677db84a6f 100644 --- a/api_docs/kbn_esql_editor.mdx +++ b/api_docs/kbn_esql_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-editor title: "@kbn/esql-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-editor plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-editor'] --- import kbnEsqlEditorObj from './kbn_esql_editor.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index b729158cb00a6..3b81e50c906a7 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index aadc04a45e31c..64da979683dab 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index dc00f6ac4b901..2abeaca9ad9bb 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 2fda71044bb1f..a2051c6e8dbaf 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 6787041a53bc9..08a91bd2c969b 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 6cf33e6c0170f..a9a414ef15111 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index da85c52a2a2eb..2d9af29fd67e3 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 45ec4dcd4b815..edd29b5401904 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 9ba8fbf33b403..862287ce98b76 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index 8ebe4aeb1dc2c..614beb41db6a4 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index bdd4abae40174..b07c5ad9f2edb 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_gen_ai_functional_testing.devdocs.json b/api_docs/kbn_gen_ai_functional_testing.devdocs.json new file mode 100644 index 0000000000000..af7da09a371a7 --- /dev/null +++ b/api_docs/kbn_gen_ai_functional_testing.devdocs.json @@ -0,0 +1,205 @@ +{ + "id": "@kbn/gen-ai-functional-testing", + "client": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "server": { + "classes": [], + "functions": [], + "interfaces": [], + "enums": [], + "misc": [], + "objects": [] + }, + "common": { + "classes": [], + "functions": [ + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.getAvailableConnectors", + "type": "Function", + "tags": [], + "label": "getAvailableConnectors", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "@kbn/gen-ai-functional-testing", + "scope": "common", + "docId": "kibKbnGenAiFunctionalTestingPluginApi", + "section": "def-common.AvailableConnectorWithId", + "text": "AvailableConnectorWithId" + }, + "[]" + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.getPreconfiguredConnectorConfig", + "type": "Function", + "tags": [], + "label": "getPreconfiguredConnectorConfig", + "description": [ + "\nRetrieve the list of preconfigured connectors that should be used when defining the\nFTR configuration of suites using the connectors.\n" + ], + "signature": [ + "() => Record" + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + } + ], + "interfaces": [ + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnector", + "type": "Interface", + "tags": [], + "label": "AvailableConnector", + "description": [], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnector.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnector.actionTypeId", + "type": "string", + "tags": [], + "label": "actionTypeId", + "description": [], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnector.config", + "type": "Object", + "tags": [], + "label": "config", + "description": [], + "signature": [ + "{ [x: string]: unknown; }" + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnector.secrets", + "type": "Object", + "tags": [], + "label": "secrets", + "description": [], + "signature": [ + "{ [x: string]: unknown; }" + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnectorWithId", + "type": "Interface", + "tags": [], + "label": "AvailableConnectorWithId", + "description": [], + "signature": [ + { + "pluginId": "@kbn/gen-ai-functional-testing", + "scope": "common", + "docId": "kibKbnGenAiFunctionalTestingPluginApi", + "section": "def-common.AvailableConnectorWithId", + "text": "AvailableConnectorWithId" + }, + " extends ", + { + "pluginId": "@kbn/gen-ai-functional-testing", + "scope": "common", + "docId": "kibKbnGenAiFunctionalTestingPluginApi", + "section": "def-common.AvailableConnector", + "text": "AvailableConnector" + } + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AvailableConnectorWithId.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], + "enums": [], + "misc": [ + { + "parentPluginId": "@kbn/gen-ai-functional-testing", + "id": "def-common.AI_CONNECTORS_VAR_ENV", + "type": "string", + "tags": [], + "label": "AI_CONNECTORS_VAR_ENV", + "description": [ + "\nThe environment variable that is used by the CI to load the connectors configuration" + ], + "signature": [ + "\"KIBANA_TESTING_AI_CONNECTORS\"" + ], + "path": "packages/kbn-gen-ai-functional-testing/src/connectors.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + } + ], + "objects": [] + } +} \ No newline at end of file diff --git a/api_docs/kbn_gen_ai_functional_testing.mdx b/api_docs/kbn_gen_ai_functional_testing.mdx new file mode 100644 index 0000000000000..408ba16a232ed --- /dev/null +++ b/api_docs/kbn_gen_ai_functional_testing.mdx @@ -0,0 +1,36 @@ +--- +#### +#### 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: kibKbnGenAiFunctionalTestingPluginApi +slug: /kibana-dev-docs/api/kbn-gen-ai-functional-testing +title: "@kbn/gen-ai-functional-testing" +image: https://source.unsplash.com/400x175/?github +description: API docs for the @kbn/gen-ai-functional-testing plugin +date: 2024-12-05 +tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/gen-ai-functional-testing'] +--- +import kbnGenAiFunctionalTestingObj from './kbn_gen_ai_functional_testing.devdocs.json'; + + + +Contact [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) for questions regarding this plugin. + +**Code health stats** + +| Public API count | Any count | Items lacking comments | Missing exports | +|-------------------|-----------|------------------------|-----------------| +| 10 | 0 | 8 | 0 | + +## Common + +### Functions + + +### Interfaces + + +### Consts, variables and types + + diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 7e97f6f84ee75..18972f01cb745 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index d438b42e3ab9b..d8f624eb028bc 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index f979b49960ab9..574b2ac6320fc 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index 2e59f20136ffa..51592ebbbbfbc 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 194a120d5989d..c55abd4f399af 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 3096bd98ea2e8..cb2167a5e2c8f 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 1c8d367316625..9335d3b1dfd3c 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 168bb6e41dfa9..8fbc998187d48 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index 96831de7c1b3f..74d54eb01052f 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index dd679a2a54410..5e53efa31efb2 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index 7a5329c48c0fe..4eb5e1615f19c 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 16fc448e09464..c77e95de4cf00 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index c7aae9631a57a..a6c639049514d 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 57eb04db4a23e..d74ee2e04c1cb 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_adapter.mdx b/api_docs/kbn_index_adapter.mdx index 2cd0eb4e6dcd1..608ed7e6fae0c 100644 --- a/api_docs/kbn_index_adapter.mdx +++ b/api_docs/kbn_index_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-adapter title: "@kbn/index-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-adapter plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-adapter'] --- import kbnIndexAdapterObj from './kbn_index_adapter.devdocs.json'; diff --git a/api_docs/kbn_index_lifecycle_management_common_shared.mdx b/api_docs/kbn_index_lifecycle_management_common_shared.mdx index f01f4493cd912..1e83e617cefc0 100644 --- a/api_docs/kbn_index_lifecycle_management_common_shared.mdx +++ b/api_docs/kbn_index_lifecycle_management_common_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-lifecycle-management-common-shared title: "@kbn/index-lifecycle-management-common-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-lifecycle-management-common-shared plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-lifecycle-management-common-shared'] --- import kbnIndexLifecycleManagementCommonSharedObj from './kbn_index_lifecycle_management_common_shared.devdocs.json'; diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx index d03d7fea18286..741fb28236fec 100644 --- a/api_docs/kbn_index_management_shared_types.mdx +++ b/api_docs/kbn_index_management_shared_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management-shared-types title: "@kbn/index-management-shared-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management-shared-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management-shared-types'] --- import kbnIndexManagementSharedTypesObj from './kbn_index_management_shared_types.devdocs.json'; diff --git a/api_docs/kbn_inference_common.mdx b/api_docs/kbn_inference_common.mdx index 3c2597d4255a9..8fea2dcf8433f 100644 --- a/api_docs/kbn_inference_common.mdx +++ b/api_docs/kbn_inference_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference-common title: "@kbn/inference-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-common'] --- import kbnInferenceCommonObj from './kbn_inference_common.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 6477207b86e92..f54206eb31cdd 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index ed41317eeb4cd..fa0333569364a 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index d97e79c7634db..1d1336e746dcc 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index 0c37debaa97fb..4d5858c688a5b 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index b470dd030e1f6..93b98e6f037cf 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 26739a5c205d2..b1ff1a9a64209 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_item_buffer.mdx b/api_docs/kbn_item_buffer.mdx index 006c8d0faab4b..b40672091ca60 100644 --- a/api_docs/kbn_item_buffer.mdx +++ b/api_docs/kbn_item_buffer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-item-buffer title: "@kbn/item-buffer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/item-buffer plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/item-buffer'] --- import kbnItemBufferObj from './kbn_item_buffer.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 80d56f0eb048d..83de93d67d40d 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index c3ee7f53eeb64..f45e580d9e8c8 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index b301ce06b5ae9..e298af26ffe87 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index aa12154eb4a4d..40672c6fca2e2 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index fb1b06b715979..80f91463cb1ed 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation.mdx b/api_docs/kbn_language_documentation.mdx index 7750f1c975276..c23569c5d0f07 100644 --- a/api_docs/kbn_language_documentation.mdx +++ b/api_docs/kbn_language_documentation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation title: "@kbn/language-documentation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation'] --- import kbnLanguageDocumentationObj from './kbn_language_documentation.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 38cb8e6c0e001..e2bcd3824e403 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 8c4f6f4f0853c..eac1fb96d8855 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 4c50c7a48af5d..01ad495fe83ef 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index dbfa44138949e..29ce476c33b4b 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 576e6a5510013..210f36e7874d7 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 11a6dab9082dd..c68b643a6b519 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.devdocs.json b/api_docs/kbn_management_cards_navigation.devdocs.json index 09bcfb00d4e2d..761cfc57d721c 100644 --- a/api_docs/kbn_management_cards_navigation.devdocs.json +++ b/api_docs/kbn_management_cards_navigation.devdocs.json @@ -145,7 +145,7 @@ "label": "hideLinksTo", "description": [], "signature": [ - "(\"transform\" | \"tags\" | \"maintenanceWindows\" | \"dataViews\" | \"spaces\" | \"settings\" | \"data_quality\" | \"data_usage\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"triggersActions\" | \"triggersActionsConnectors\")[] | undefined" + "(\"transform\" | \"tags\" | \"maintenanceWindows\" | \"dataViews\" | \"spaces\" | \"settings\" | \"data_quality\" | \"data_usage\" | \"filesManagement\" | \"pipelines\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"triggersActions\" | \"triggersActionsConnectors\")[] | undefined" ], "path": "packages/kbn-management/cards_navigation/src/types.ts", "deprecated": false, @@ -202,7 +202,7 @@ "label": "AppId", "description": [], "signature": [ - "\"transform\" | \"tags\" | \"maintenanceWindows\" | \"dataViews\" | \"spaces\" | \"settings\" | \"data_quality\" | \"data_usage\" | \"filesManagement\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"pipelines\" | \"triggersActions\" | \"triggersActionsConnectors\"" + "\"transform\" | \"tags\" | \"maintenanceWindows\" | \"dataViews\" | \"spaces\" | \"settings\" | \"data_quality\" | \"data_usage\" | \"filesManagement\" | \"pipelines\" | \"roles\" | \"reporting\" | \"api_keys\" | \"index_management\" | \"ingest_pipelines\" | \"jobsListLink\" | \"objects\" | \"triggersActions\" | \"triggersActionsConnectors\"" ], "path": "packages/kbn-management/cards_navigation/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 34aba6e190793..0e12559aa6b2f 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index 319f4ad26b484..1397355486a34 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index 44438159b34f4..d1227bf640b28 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index ef659815fee6f..6f07b3f85b9fc 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 4278031ebdc81..709af981d90b5 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index 35a881052655b..537ac2789f12d 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index 615c773bb0975..e0f15b7a14a07 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 2729ecab9d774..a1517ceda355b 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 3e0cf1e0a4543..7b1132020715e 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index c2aaf698087d7..d6a59dfc0e5fc 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 27a319979d531..f371c43a002c1 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index 9afc80582a4c3..b81bff14d9060 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_manifest.mdx b/api_docs/kbn_manifest.mdx index 0a6281f981a77..ac85da019b97a 100644 --- a/api_docs/kbn_manifest.mdx +++ b/api_docs/kbn_manifest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-manifest title: "@kbn/manifest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/manifest plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/manifest'] --- import kbnManifestObj from './kbn_manifest.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 044d4b9197c56..62a82581c0345 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index 45829fd02d43a..edcbbba797d26 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 4796ce0a867b7..492bace27e304 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index 996eb947adfaf..23ddc848ffcff 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index 5431f7aafbbc3..c867ea0c8370c 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index a4352d264a1c6..b12336ef55a6b 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index 8eb1785007850..0d5b6e09e5fc8 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index 25e68a6f7e75b..8df28c43af3cf 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index 0b596308bb701..9e18b7177161c 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 29cfdaadbc2e2..ad86bbf3c2559 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index 9cccb59a8f21d..3d0abf5f4b708 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index 1f5defa258dc4..d9e898c21aec7 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_field_stats_flyout.mdx b/api_docs/kbn_ml_field_stats_flyout.mdx index 7eb423553481b..1cf3cb5fab097 100644 --- a/api_docs/kbn_ml_field_stats_flyout.mdx +++ b/api_docs/kbn_ml_field_stats_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-field-stats-flyout title: "@kbn/ml-field-stats-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-field-stats-flyout plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-field-stats-flyout'] --- import kbnMlFieldStatsFlyoutObj from './kbn_ml_field_stats_flyout.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index ee50f72d39033..a528653c4b40f 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 8e0eb20041f16..d7954e63c4ddd 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index 6e4bdba2950b6..0e4cb2194bcf5 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 4506b1b6f5183..4e9a5aba92786 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 899c540546ccc..78da0cb7c0339 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index 1aa7f27af7477..e02ec4051f518 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index 8d7e34eb4970a..c8fd3d29090a7 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_parse_interval.mdx b/api_docs/kbn_ml_parse_interval.mdx index 957990eea8913..b58eeacbf3e6d 100644 --- a/api_docs/kbn_ml_parse_interval.mdx +++ b/api_docs/kbn_ml_parse_interval.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-parse-interval title: "@kbn/ml-parse-interval" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-parse-interval plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-parse-interval'] --- import kbnMlParseIntervalObj from './kbn_ml_parse_interval.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 412235108e7a4..7d1fcc26425af 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index a5ea5fe89fd10..2c2627b325f36 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index 697bf82435828..4c26e21e0ee7c 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index f28a0d54128b7..9ff6f48174d9c 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 48eca0dbaca7b..6b2eb5ad119f1 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 103a5a6e5d33e..4c0a167702c2d 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.devdocs.json b/api_docs/kbn_ml_trained_models_utils.devdocs.json index f3065fd30c25c..e3c63f83892f7 100644 --- a/api_docs/kbn_ml_trained_models_utils.devdocs.json +++ b/api_docs/kbn_ml_trained_models_utils.devdocs.json @@ -522,7 +522,8 @@ "label": "InferenceAPIConfigResponse", "description": [], "signature": [ - "{ inference_id: string; task_type: \"sparse_embedding\" | \"text_embedding\"; task_settings: { model?: string | undefined; }; } & ", + "InferenceInferenceEndpointInfo", + " & ", "InferenceServiceSettings" ], "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", @@ -650,7 +651,7 @@ "label": "TrainedModelType", "description": [], "signature": [ - "\"tree_ensemble\" | \"lang_ident\" | \"pytorch\"" + "\"pytorch\" | \"tree_ensemble\" | \"lang_ident\"" ], "path": "x-pack/packages/ml/trained_models_utils/src/constants/trained_models.ts", "deprecated": false, diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index ee576a2b335e7..c31fd63e7703f 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index 92ac157683161..31deb90048027 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index d9bce2b629824..b53472793003b 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_ml_validators.mdx b/api_docs/kbn_ml_validators.mdx index 38415e153acf7..ad55ccd0b8a1a 100644 --- a/api_docs/kbn_ml_validators.mdx +++ b/api_docs/kbn_ml_validators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-validators title: "@kbn/ml-validators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-validators plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-validators'] --- import kbnMlValidatorsObj from './kbn_ml_validators.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 55b5c9bb6010c..bb6286ad771ca 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index 8801b4c3c77d1..8a8bc6fac69f3 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 40f1a920520b0..174f331a19a3f 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index 875591963da05..957da727cba47 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 2a2dea9790a3b..e86c08a9c2caa 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index b8c904a33d2cf..fea47baeb6880 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index d7c351d3e3b25..32e0165f932eb 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 0fcc272c5c85c..a55eb6a2fa253 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_observability_logs_overview.mdx b/api_docs/kbn_observability_logs_overview.mdx index 05a4c412abd7c..2bb54a2dccf67 100644 --- a/api_docs/kbn_observability_logs_overview.mdx +++ b/api_docs/kbn_observability_logs_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-logs-overview title: "@kbn/observability-logs-overview" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-logs-overview plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-logs-overview'] --- import kbnObservabilityLogsOverviewObj from './kbn_observability_logs_overview.devdocs.json'; diff --git a/api_docs/kbn_observability_synthetics_test_data.mdx b/api_docs/kbn_observability_synthetics_test_data.mdx index 76041b1ec00e0..6c9fe9e705352 100644 --- a/api_docs/kbn_observability_synthetics_test_data.mdx +++ b/api_docs/kbn_observability_synthetics_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-synthetics-test-data title: "@kbn/observability-synthetics-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-synthetics-test-data plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-synthetics-test-data'] --- import kbnObservabilitySyntheticsTestDataObj from './kbn_observability_synthetics_test_data.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 8424330792b8d..93e21b43bd6ce 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index adfae438581fd..55c1eeed3cfdf 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 00483aa7fe072..10ec9d427b92e 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 2795c8728854e..ad63194371c64 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index 995e4d6a28e25..230a3fe62b3a4 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index e2c8788e4a18e..3ce840271de91 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 007895ff15a58..72e3da7872478 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index 003988bbec52a..f90d77eec7cbb 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 46d1b3384c60b..5998e3f932fc1 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index a155aedee4384..a6c31f6114c32 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index df598e4c1248b..ad615f5265036 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 4f3cbc8923b4a..8bed87f5c802f 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_product_doc_artifact_builder.mdx b/api_docs/kbn_product_doc_artifact_builder.mdx index b22d3cee04ef4..418593a1d8087 100644 --- a/api_docs/kbn_product_doc_artifact_builder.mdx +++ b/api_docs/kbn_product_doc_artifact_builder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-artifact-builder title: "@kbn/product-doc-artifact-builder" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-artifact-builder plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-artifact-builder'] --- import kbnProductDocArtifactBuilderObj from './kbn_product_doc_artifact_builder.devdocs.json'; diff --git a/api_docs/kbn_product_doc_common.mdx b/api_docs/kbn_product_doc_common.mdx index cd7fa5d19c72d..9f116a29a743f 100644 --- a/api_docs/kbn_product_doc_common.mdx +++ b/api_docs/kbn_product_doc_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-common title: "@kbn/product-doc-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-common'] --- import kbnProductDocCommonObj from './kbn_product_doc_common.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 829e9f8fa96ea..ef52f5664e5d6 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 4a610626d10cd..ca703801378e0 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 286df15747f36..b3e283c5e3f64 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 9b31f7870601c..6091507c022d5 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 85210794806ac..1446fedf9a793 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index eb61dacfdf76a..5a6091df5eddb 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index 84b3b8a426684..2f7ff52dc7544 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index c12eebc8a37e2..e52f54db570ce 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index fe098a4deb644..a463bc58ecc6b 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index be46f12158d5d..ebb8a88be3839 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 48b7a53441b59..9c8ff5d44ee45 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index dc9598e8de2eb..102cae640dc02 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index 1544ad3ae0a4a..e569773a34515 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index c9bcee4d543af..d75b1e2ddfb81 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 94fefc58b75da..4d8a4007410a9 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index 130c5f95fd04d..72382f1d90f2c 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.devdocs.json b/api_docs/kbn_reporting_csv_share_panel.devdocs.json index ef9cac6807088..529dd32169094 100644 --- a/api_docs/kbn_reporting_csv_share_panel.devdocs.json +++ b/api_docs/kbn_reporting_csv_share_panel.devdocs.json @@ -86,7 +86,7 @@ "id": "def-public.ReportingCsvPanelAction.Unnamed.$1", "type": "Object", "tags": [], - "label": "{ core, csvConfig, apiClient, startServices$, usesUiCapabilities }", + "label": "{ core, apiClient, startServices$ }", "description": [], "signature": [ "Params" diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 4833b96cc9850..d292282a22f73 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.devdocs.json b/api_docs/kbn_reporting_export_types_csv.devdocs.json index 9e4bdaccb78ca..56748215d9395 100644 --- a/api_docs/kbn_reporting_export_types_csv.devdocs.json +++ b/api_docs/kbn_reporting_export_types_csv.devdocs.json @@ -168,7 +168,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -176,7 +176,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -192,7 +192,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -200,7 +200,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/csv/csv_searchsource.ts", "deprecated": false, @@ -565,7 +565,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -573,7 +573,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -589,7 +589,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -597,7 +597,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/csv/csv_v2.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 23889400b11af..dc38c6c3651fb 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index ae5af2f899199..45bc0829b4beb 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.devdocs.json b/api_docs/kbn_reporting_export_types_pdf.devdocs.json index f0fb7f203f946..a3f6183280b45 100644 --- a/api_docs/kbn_reporting_export_types_pdf.devdocs.json +++ b/api_docs/kbn_reporting_export_types_pdf.devdocs.json @@ -176,7 +176,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -184,7 +184,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -200,7 +200,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -208,7 +208,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/pdf/printable_pdf_v2.ts", "deprecated": false, @@ -597,7 +597,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -605,7 +605,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -621,7 +621,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -629,7 +629,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/pdf/printable_pdf.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index f77fce22c61e7..d660d1b5a78d6 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index 4c573272fe740..610546d2d5c1b 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.devdocs.json b/api_docs/kbn_reporting_export_types_png.devdocs.json index 99fb9ba2966b3..022be1c0e97c3 100644 --- a/api_docs/kbn_reporting_export_types_png.devdocs.json +++ b/api_docs/kbn_reporting_export_types_png.devdocs.json @@ -176,7 +176,7 @@ "section": "def-server.CoreSetup", "text": "CoreSetup" }, - ", config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + ", config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -184,7 +184,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, logger: ", { "pluginId": "@kbn/logging", "scope": "common", @@ -200,7 +200,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -208,7 +208,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>]" ], "path": "packages/kbn-reporting/export_types/png/png_v2.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 62f8bb209e313..77eed3e73b29a 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index a4fd075a194e6..b3006c504bc4b 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.devdocs.json b/api_docs/kbn_reporting_mocks_server.devdocs.json index 2ad48d68483b0..9fd240d87c90e 100644 --- a/api_docs/kbn_reporting_mocks_server.devdocs.json +++ b/api_docs/kbn_reporting_mocks_server.devdocs.json @@ -29,7 +29,7 @@ "signature": [ "(overrides?: ", "_DeepPartialObject", - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -37,7 +37,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>) => Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>) => Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -45,7 +45,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" ], "path": "packages/kbn-reporting/mocks_server/index.ts", "deprecated": false, @@ -60,7 +60,7 @@ "description": [], "signature": [ "_DeepPartialObject", - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -68,7 +68,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" ], "path": "packages/kbn-reporting/mocks_server/index.ts", "deprecated": false, diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 22cdadbfaae34..69bb64193e5b3 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.devdocs.json b/api_docs/kbn_reporting_public.devdocs.json index a57898a72dd7b..474ecf1139f3e 100644 --- a/api_docs/kbn_reporting_public.devdocs.json +++ b/api_docs/kbn_reporting_public.devdocs.json @@ -1710,20 +1710,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "@kbn/reporting-public", - "id": "def-public.ClientConfigType.roles", - "type": "Object", - "tags": [], - "label": "roles", - "description": [], - "signature": [ - "{ enabled: boolean; }" - ], - "path": "packages/kbn-reporting/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "@kbn/reporting-public", "id": "def-public.ClientConfigType.export_types", diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index a91079ad703f9..77353bf28dc64 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 111 | 0 | 104 | 2 | +| 110 | 0 | 103 | 2 | ## Client diff --git a/api_docs/kbn_reporting_server.devdocs.json b/api_docs/kbn_reporting_server.devdocs.json index 29373857cb9db..0a7505bde41b5 100644 --- a/api_docs/kbn_reporting_server.devdocs.json +++ b/api_docs/kbn_reporting_server.devdocs.json @@ -416,7 +416,7 @@ "label": "config", "description": [], "signature": [ - "Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + "Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -424,7 +424,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" ], "path": "packages/kbn-reporting/server/export_type.ts", "deprecated": false, @@ -467,7 +467,7 @@ "section": "def-server.PluginInitializerContext", "text": "PluginInitializerContext" }, - "; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + " | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -475,7 +475,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>>" ], "path": "packages/kbn-reporting/server/export_type.ts", "deprecated": false, @@ -949,7 +949,7 @@ "label": "getFullRedirectAppUrl", "description": [], "signature": [ - "(config: Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + "(config: Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -957,7 +957,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, serverInfo: ", + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>, serverInfo: ", "ReportingServerInfo", ", spaceId: string | undefined, forceNow: string | undefined) => string" ], @@ -973,7 +973,7 @@ "label": "config", "description": [], "signature": [ - "Readonly<{ encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + "Readonly<{ roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; encryptionKey?: string | undefined; } & { enabled: boolean; csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -981,7 +981,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; capture: Readonly<{} & { maxAttempts: number; }>; kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; statefulSettings: Readonly<{} & { enabled: boolean; }>; }>" ], "path": "packages/kbn-reporting/server/get_full_redirect_app_url.ts", "deprecated": false, @@ -1320,24 +1320,6 @@ } ], "returnComment": [] - }, - { - "parentPluginId": "@kbn/reporting-server", - "id": "def-server.ReportingServerPluginSetup.usesUiCapabilities", - "type": "Function", - "tags": [], - "label": "usesUiCapabilities", - "description": [ - "\nUsed to inform plugins if Reporting config is compatible with UI Capabilities / Application Sub-Feature Controls" - ], - "signature": [ - "() => boolean" - ], - "path": "packages/kbn-reporting/server/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [] } ], "initialIsOpen": false @@ -1661,7 +1643,7 @@ "label": "ReportingConfigType", "description": [], "signature": [ - "{ readonly encryptionKey?: string | undefined; readonly enabled: boolean; readonly csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", + "{ readonly roles?: Readonly<{} & { enabled: boolean; allow: string[]; }> | undefined; readonly encryptionKey?: string | undefined; readonly enabled: boolean; readonly csv: Readonly<{ enablePanelActionDownload?: boolean | undefined; } & { scroll: Readonly<{} & { size: number; duration: string; strategy: \"scroll\" | \"pit\"; }>; checkForFormulas: boolean; escapeFormulaValues: boolean; maxSizeBytes: number | ", { "pluginId": "@kbn/config-schema", "scope": "common", @@ -1669,7 +1651,7 @@ "section": "def-common.ByteSizeValue", "text": "ByteSizeValue" }, - "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; readonly capture: Readonly<{} & { maxAttempts: number; }>; readonly roles: Readonly<{} & { enabled: boolean; allow: string[]; }>; readonly kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; readonly queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; readonly poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; readonly export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; readonly statefulSettings: Readonly<{} & { enabled: boolean; }>; }" + "; useByteOrderMarkEncoding: boolean; maxConcurrentShardRequests: number; }>; readonly capture: Readonly<{} & { maxAttempts: number; }>; readonly kibanaServer: Readonly<{ hostname?: string | undefined; protocol?: string | undefined; port?: number | undefined; } & {}>; readonly queue: Readonly<{} & { timeout: number | moment.Duration; pollInterval: number | moment.Duration; indexInterval: string; pollEnabled: boolean; pollIntervalErrorMultiplier: number; }>; readonly poll: Readonly<{} & { jobCompletionNotifier: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; jobsRefresh: Readonly<{} & { interval: number; intervalErrorMultiplier: number; }>; }>; readonly export_types: Readonly<{} & { csv: Readonly<{} & { enabled: boolean; }>; png: Readonly<{} & { enabled: boolean; }>; pdf: Readonly<{} & { enabled: boolean; }>; }>; readonly statefulSettings: Readonly<{} & { enabled: boolean; }>; }" ], "path": "packages/kbn-reporting/server/types.ts", "deprecated": false, @@ -2026,26 +2008,10 @@ "pluginId": "@kbn/config-schema", "scope": "common", "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.ObjectType", - "text": "ObjectType" - }, - "<{ enabled: ", - { - "pluginId": "@kbn/config-schema", - "scope": "common", - "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.ConditionalType", - "text": "ConditionalType" - }, - "; allow: ", - { - "pluginId": "@kbn/config-schema", - "scope": "common", - "docId": "kibKbnConfigSchemaPluginApi", - "section": "def-common.ConditionalType", - "text": "ConditionalType" + "section": "def-common.Type", + "text": "Type" }, - "; }>; poll: ", + " | undefined>; poll: ", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 47c8380159851..ef3d16faa98a0 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 92 | 0 | 91 | 0 | +| 91 | 0 | 91 | 0 | ## Server diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 611fdb5763c60..97c54324476a5 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index 758eff1dffae8..c327a15a73770 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_form.mdx b/api_docs/kbn_response_ops_rule_form.mdx index 08d164281a363..50104b165a34e 100644 --- a/api_docs/kbn_response_ops_rule_form.mdx +++ b/api_docs/kbn_response_ops_rule_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-form title: "@kbn/response-ops-rule-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-form plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-form'] --- import kbnResponseOpsRuleFormObj from './kbn_response_ops_rule_form.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_params.mdx b/api_docs/kbn_response_ops_rule_params.mdx index 1928e26ca0118..00169434f6cfb 100644 --- a/api_docs/kbn_response_ops_rule_params.mdx +++ b/api_docs/kbn_response_ops_rule_params.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-params title: "@kbn/response-ops-rule-params" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-params plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-params'] --- import kbnResponseOpsRuleParamsObj from './kbn_response_ops_rule_params.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 57ac90ba81778..67baf7e906292 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 02d5f039e5f38..acbc7bc7652da 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 1da4703189b2d..4a1b01ceb6fba 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 8b8afcb82e658..29bdd119be031 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index b815a397694d0..acc5865ce9ba1 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index abebfae8e57d8..082a217ee7599 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 94a1005230562..fe24e1ae6c654 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_saved_search_component.mdx b/api_docs/kbn_saved_search_component.mdx index 5fc913629ca05..2b115579f37e4 100644 --- a/api_docs/kbn_saved_search_component.mdx +++ b/api_docs/kbn_saved_search_component.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-search-component title: "@kbn/saved-search-component" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-search-component plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-search-component'] --- import kbnSavedSearchComponentObj from './kbn_saved_search_component.devdocs.json'; diff --git a/api_docs/kbn_scout.mdx b/api_docs/kbn_scout.mdx index 953cb949b5dcb..9e77b255f4883 100644 --- a/api_docs/kbn_scout.mdx +++ b/api_docs/kbn_scout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout title: "@kbn/scout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout'] --- import kbnScoutObj from './kbn_scout.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index 9581b82abd7d6..d0c8c99189985 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_components.mdx b/api_docs/kbn_search_api_keys_components.mdx index 6027f57e8c0d2..ddb0cbe006837 100644 --- a/api_docs/kbn_search_api_keys_components.mdx +++ b/api_docs/kbn_search_api_keys_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-components title: "@kbn/search-api-keys-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-components plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-components'] --- import kbnSearchApiKeysComponentsObj from './kbn_search_api_keys_components.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_server.mdx b/api_docs/kbn_search_api_keys_server.mdx index 32828b112ec8f..37429f7642573 100644 --- a/api_docs/kbn_search_api_keys_server.mdx +++ b/api_docs/kbn_search_api_keys_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-server title: "@kbn/search-api-keys-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-server'] --- import kbnSearchApiKeysServerObj from './kbn_search_api_keys_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index bd954f963cff1..9528ef4986c2a 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 3db2b41f02d63..6f04f0a51eb80 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 84485be6e5724..fd29730175a6b 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 3a3ba7bcb4aff..e7d280a88f7a2 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index 48e78d0105dc4..ca9d429f1b1c2 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_shared_ui.mdx b/api_docs/kbn_search_shared_ui.mdx index c54d8196645d4..628c66d36a652 100644 --- a/api_docs/kbn_search_shared_ui.mdx +++ b/api_docs/kbn_search_shared_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-shared-ui title: "@kbn/search-shared-ui" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-shared-ui plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-shared-ui'] --- import kbnSearchSharedUiObj from './kbn_search_shared_ui.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index ae081f5de51be..56e46027490e8 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 7cea476f10f3e..8728b332fd669 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index 3dbc0624f939c..1ad9916845546 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core_common.mdx b/api_docs/kbn_security_authorization_core_common.mdx index 80aa77fa9f0f6..2228b9d8c4085 100644 --- a/api_docs/kbn_security_authorization_core_common.mdx +++ b/api_docs/kbn_security_authorization_core_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core-common title: "@kbn/security-authorization-core-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core-common'] --- import kbnSecurityAuthorizationCoreCommonObj from './kbn_security_authorization_core_common.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 4455cd5e47564..42499bf8d897f 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 5676beb86db8f..26d23c3b97258 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index f3f51205ba633..7b40a5f741eb0 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index 073d1d991ae13..0cec768d41108 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 6c69feba8fcb3..12a9ecb5b889e 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index 004715da78cbf..8fba07b3a26e8 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index c9dec6f626029..60a31b402b494 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 63277adc0023b..aece765ae9702 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 13e75b21bce32..b22b550d202de 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index 7f22bdc36209c..83256bbb60a35 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index cb13a1cc6cf90..051a0883deae2 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index d1fc87a67ca15..d58b0b0dfe47c 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 3ddb398fe83d9..8015bb4fed32e 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index ecaa8f2337fa0..518de5069f5c7 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 94be65a962cba..10872029fe051 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index f4ea272182c61..30fe1092ae20c 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 96aaf4fdacf21..18cc1d9824859 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 367c7b9e7b88e..59813dd16ca85 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index b3db5ec8143a8..cac972b0d625c 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 3c580b2869b1b..e3488134e926b 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 19104e71f462c..573a0af403027 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 890b30028f44c..f4d2902f71b7f 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index d6143d415211a..532c4aff3e698 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index 6ca17e8c4d150..a9330d8e5dbd0 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index 5ba4b1d40caff..105b3e4540180 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index ea5c9e3c49a10..2d50a210666ee 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 4a89de465b78a..af93af1c2bd6c 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 1996376ace7ff..7cbb5cfcf4b21 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 344265b1bb43c..c370f29498099 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 65303db5b16b9..ded0e09e5950b 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index a25498956de2b..8981034abc16c 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index b244058479bd8..99ec9eff9f1c9 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 11638ee23b393..3c63f400f5f7c 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 5836e34eb4cca..bf17fda265bd3 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index 7dba001a06317..34b950278519e 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index 947d49a30b832..235ddb8346826 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 9f948f7092063..da738e6cd2cbe 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index f0addacd7b3cf..858f9f7085f3b 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index e94eb7c763488..4ed5c69136af7 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 3355d46f911c5..69c620329d44d 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index dce835326c031..dd0363c7f94d2 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index fc15e63824ea9..f041d73864106 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 11358e2bfcbca..7dfdc999d217e 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 03b85518a41c6..6d0bc5b47d195 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index 4acc0dc4174f2..ae1c36ad0bf38 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index 99dbe02fe1787..f2faffce46eef 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index b604c608cdfd7..afafdbe01cf52 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 0a9ea50a66cc7..74f76c42410cf 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index 067951489b041..c114b1c7c1242 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index d384082a5609d..56fb65d18e823 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index e04c8b143f990..dc14e663bb265 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index 4554eda88c43c..c3ec414139b13 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index c53ffbe655152..0a4f1ce0882d7 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index a8a5c2c6cd09c..c2ef00151dc26 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index ef32b7bf51c89..fe233ec6c9b79 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index 11f063814a894..cb1e518b57172 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index dcaccc37e138c..b0a8ca2a55028 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index d0aaac98a7f9f..3e147a88ba27e 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index 43a3196863950..59d33903bd7b9 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index 9a72bbcdbd911..d128f233ffb51 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 9f0498b05c932..c7ab3578cfa55 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index 69ce6936b9bf8..104b73f31f044 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index d6b6e18bd71e4..d8e0bea30a87a 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index 8a3d41e4654ae..2b5efee386948 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index 9c1b2ae95ec70..2acdcc173320c 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index ed7d154d9a09e..482004a4a91a8 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index 38776feb98e21..8f3bfae7f219d 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index d65ea9b6e13fe..c56fcbdc80657 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index 93cdba2cb8209..c41e6bd415dc1 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index c5c31afb89a5b..cf40558b1d07d 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index ace68d50617c4..78afcc9ac763d 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index 8ce2187bc012a..8e0d9562d314a 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index 8c8a2533d4c65..a52b1fe929535 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index 96cb4805928e1..c446cbcb35a8e 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index 1493ddda841a1..ac4c69658a6eb 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index 666a184214061..bbbb33e24c127 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index 9a9edd522860c..6e2f9a0d7edf0 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index b5fe9898cc58f..2ab9a355f339f 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index d102966bd9eb5..4a1be765fae64 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 26976f7604dc5..c474cfa289d3b 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 10640bdbae2a8..c9640e76e5b91 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index f1bfd8fa38d67..1147c8628b73b 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index dc63f9e16709f..59288860028b0 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_sse_utils.mdx b/api_docs/kbn_sse_utils.mdx index 744ccf8c410f2..d9c6dc6a006e0 100644 --- a/api_docs/kbn_sse_utils.mdx +++ b/api_docs/kbn_sse_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils title: "@kbn/sse-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils'] --- import kbnSseUtilsObj from './kbn_sse_utils.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_client.mdx b/api_docs/kbn_sse_utils_client.mdx index d7d7214fe85fb..b011596f89319 100644 --- a/api_docs/kbn_sse_utils_client.mdx +++ b/api_docs/kbn_sse_utils_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-client title: "@kbn/sse-utils-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-client plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-client'] --- import kbnSseUtilsClientObj from './kbn_sse_utils_client.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_server.devdocs.json b/api_docs/kbn_sse_utils_server.devdocs.json index add589a703b5e..dbf75dfc2083a 100644 --- a/api_docs/kbn_sse_utils_server.devdocs.json +++ b/api_docs/kbn_sse_utils_server.devdocs.json @@ -55,6 +55,45 @@ ], "returnComment": [], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/sse-utils-server", + "id": "def-common.supertestToObservable", + "type": "Function", + "tags": [], + "label": "supertestToObservable", + "description": [ + "\nConvert a supertest response to an SSE observable.\n\nNote: the supertest response should *NOT* be awaited when using that utility,\nor at least not before calling it.\n" + ], + "signature": [ + "(response: ", + "Test", + ") => ", + "Observable", + "" + ], + "path": "packages/kbn-sse-utils-server/src/supertest_to_observable.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/sse-utils-server", + "id": "def-common.supertestToObservable.$1", + "type": "Object", + "tags": [], + "label": "response", + "description": [], + "signature": [ + "Test" + ], + "path": "packages/kbn-sse-utils-server/src/supertest_to_observable.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false } ], "interfaces": [], diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index f1d58053d2ee1..cebfa7235f064 100644 --- a/api_docs/kbn_sse_utils_server.mdx +++ b/api_docs/kbn_sse_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-server title: "@kbn/sse-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-server plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.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 | |-------------------|-----------|------------------------|-----------------| -| 2 | 0 | 2 | 0 | +| 4 | 0 | 3 | 0 | ## Common diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 7f49c8bc606ba..cacd4078dc9f0 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index c201a0b5ddee6..14ded0c87e2f6 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index c834cde97e9d4..3837fd10aba3e 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 15807a60b2725..596a8d5f9ede5 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 2f5b98a574870..c706181bdbeea 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index c5deaf21952a0..188bdf4c20e5e 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.devdocs.json b/api_docs/kbn_test.devdocs.json index d06c2234a316d..85e09a0c2b0bc 100644 --- a/api_docs/kbn_test.devdocs.json +++ b/api_docs/kbn_test.devdocs.json @@ -2167,6 +2167,112 @@ } ], "functions": [ + { + "parentPluginId": "@kbn/test", + "id": "def-common.cleanupElasticsearch", + "type": "Function", + "tags": [], + "label": "cleanupElasticsearch", + "description": [], + "signature": [ + "(node: ", + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.ICluster", + "text": "ICluster" + }, + ", isServerless: boolean, logsDir: string | undefined, log: ", + { + "pluginId": "@kbn/tooling-log", + "scope": "common", + "docId": "kibKbnToolingLogPluginApi", + "section": "def-common.ToolingLog", + "text": "ToolingLog" + }, + ") => Promise" + ], + "path": "packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/test", + "id": "def-common.cleanupElasticsearch.$1", + "type": "Object", + "tags": [], + "label": "node", + "description": [], + "signature": [ + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.ICluster", + "text": "ICluster" + } + ], + "path": "packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/test", + "id": "def-common.cleanupElasticsearch.$2", + "type": "boolean", + "tags": [], + "label": "isServerless", + "description": [], + "signature": [ + "boolean" + ], + "path": "packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/test", + "id": "def-common.cleanupElasticsearch.$3", + "type": "string", + "tags": [], + "label": "logsDir", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": false + }, + { + "parentPluginId": "@kbn/test", + "id": "def-common.cleanupElasticsearch.$4", + "type": "Object", + "tags": [], + "label": "log", + "description": [], + "signature": [ + { + "pluginId": "@kbn/tooling-log", + "scope": "common", + "docId": "kibKbnToolingLogPluginApi", + "section": "def-common.ToolingLog", + "text": "ToolingLog" + } + ], + "path": "packages/kbn-test/src/functional_tests/lib/run_elasticsearch.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/test", "id": "def-common.createAsyncInstance", diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 0dbe4a1ccd618..caaa930e0b2e5 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 353 | 4 | 298 | 14 | +| 358 | 4 | 303 | 14 | ## Common diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index fefb0a596aa72..49443b0f2b540 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index f22450288c629..5f86aedaeaa0c 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index ab37e65cd7090..bcf8c08d96cb0 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index f9307554b72c9..e9c51c80bff42 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 5cb43fb47a9e2..c3c19c6e2707f 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_transpose_utils.mdx b/api_docs/kbn_transpose_utils.mdx index c360235bd4faf..7ba5f027e9993 100644 --- a/api_docs/kbn_transpose_utils.mdx +++ b/api_docs/kbn_transpose_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-transpose-utils title: "@kbn/transpose-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/transpose-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/transpose-utils'] --- import kbnTransposeUtilsObj from './kbn_transpose_utils.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index a42dd21cb5c13..7a76b37e5528a 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 09718c3e3799b..8f523be047a8b 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 8da59bb7b4620..88edc70deb634 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 6678d379ce810..fe9ba6657fdbf 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index 49d3e968ab285..c1d1d422c7b0a 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 0e8ea1e81fdfa..c91d8bd2183b3 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 5693247f27849..9fdc78b1aa38c 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 233d7c9d3c055..6c63158f5fc69 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index abd32cd2a3484..b22ae3bb364a9 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index d3812dd75e3ea..7b4012feffc81 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index 249375a0b5a80..59baf075fb9b4 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 1bbc62eb30d65..44f992677f2cd 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 9781be5ce2e5f..2af23d5eb7500 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index ec09f0a301d1c..700263df9d6ca 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index a6be3f2241a41..df388be4045c2 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index c4d5a120abf4a..6894218660cc3 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index 9245b0cf4ff5b..b201178f04fad 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index feb2682418ed8..ec8f70b04abb0 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index cc257a9aac2c9..c131b146a79f2 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 1184c348f2079..a00cd4de5c0f6 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index c580a405ab046..2b3655b4f7c96 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 9cdeb184a3c9e..02522cb4a61a6 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 5bd6640e44a5b..3ef344eace2f1 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index d91b94de2bc54..056ea08798a46 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 93822740beac3..3702555c30403 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index bdecb06dc7058..f8771aa0535f7 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index a47b457368b1f..0d2731a0a307c 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index c6ebf2a48be87..e6bdcac40ce95 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 38bf210ef6de0..d286697bfc3e6 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index 60808388b806c..fae5d1b6a1044 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 87dfe7b0dd4a2..d71b97ac74c87 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index 339597c6167c7..2b05c97edcd09 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index bd6a2ef0d65a5..4963030c351da 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/llm_tasks.mdx b/api_docs/llm_tasks.mdx index d8c5c27dcd4bf..51dfe4c0368bc 100644 --- a/api_docs/llm_tasks.mdx +++ b/api_docs/llm_tasks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/llmTasks title: "llmTasks" image: https://source.unsplash.com/400x175/?github description: API docs for the llmTasks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'llmTasks'] --- import llmTasksObj from './llm_tasks.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index c1e8cb13bbf00..9430af534ee97 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 674383308d2d2..b21975a42075f 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 14b91c87adca8..f806e45f3c9cd 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index ad72e64be58e6..52c6c65034c3a 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 3609ea1b9a525..542cc753ed5e5 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 33bb1e14ada9a..eada5bc1fbbcd 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 7f7ae57766150..709fe37157f55 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index 8933b190e240f..484e9c66925f6 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1092,9 +1092,9 @@ "description": [], "signature": [ "MlTrainedModelConfig", - " & { pipelines?: Record | null | undefined; origin_job_exists?: boolean | undefined; metadata?: ({ analytics_config: ", + " & { metadata?: (", + "MlTrainedModelConfigMetadata", + " & { analytics_config?: ", { "pluginId": "@kbn/ml-data-frame-analytics-utils", "scope": "common", @@ -1102,7 +1102,7 @@ "section": "def-common.DataFrameAnalyticsConfig", "text": "DataFrameAnalyticsConfig" }, - "; input: unknown; total_feature_importance?: ", + " | undefined; input: unknown; total_feature_importance?: ", { "pluginId": "@kbn/ml-data-frame-analytics-utils", "scope": "common", @@ -1118,25 +1118,7 @@ "section": "def-common.FeatureImportanceBaseline", "text": "FeatureImportanceBaseline" }, - " | undefined; model_aliases?: string[] | undefined; } & Record) | undefined; model_id: string; model_type: ", - { - "pluginId": "@kbn/ml-trained-models-utils", - "scope": "common", - "docId": "kibKbnMlTrainedModelsUtilsPluginApi", - "section": "def-common.TrainedModelType", - "text": "TrainedModelType" - }, - "; tags: string[]; version: string; inference_config?: Record | undefined; indices?: Record[] | undefined; hasInferenceServices?: boolean | undefined; inference_apis?: ", - { - "pluginId": "@kbn/ml-trained-models-utils", - "scope": "common", - "docId": "kibKbnMlTrainedModelsUtilsPluginApi", - "section": "def-common.InferenceAPIConfigResponse", - "text": "InferenceAPIConfigResponse" - }, - "[] | undefined; }" + " | undefined; } & Record) | undefined; }" ], "path": "x-pack/plugins/ml/common/types/trained_models.ts", "deprecated": false, @@ -1643,6 +1625,8 @@ "InferenceQueryParams", " | undefined): Promise<", "TrainedModelConfigResponse", + "[]>; getTrainedModelsList(): Promise<", + "TrainedModelUIItem", "[]>; getTrainedModelStats(modelId?: string | string[] | undefined, params?: ", "InferenceStatsQueryParams", " | undefined): Promise<", diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 21c03195e34d2..16ba0339dc6b2 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index 9b0583dd9a2b1..7597824780235 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 23a19f3a7a6a9..48163e5eb5a95 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index eb43202f398b6..00a3703e00386 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index e74b0af15688c..1fbb7cef1ed2c 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index 0db62f8c3a230..706b2d7175277 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 11fe7d56e6298..f2f3ba21b0499 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 37ef4f0bc5412..1ff8e8763a00f 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 33e8f9df8945e..76fe12c04e84a 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index f5e0930a290cb..ac398a6a63ff6 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 1e9e92f697b4f..64b91c74f67e5 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index 75aea43dc4723..b9de9b86b93a4 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 7d07cef53e14b..748111ef2e697 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index d9c514f3f9fbe..9637ce0f978ea 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-12-04 +date: 2024-12-05 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 997a88481479c..8eb7b713ce5d5 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-12-04 +date: 2024-12-05 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 19a801281ea4c..7fb8c83b4ca75 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index 860660451d208..1df633c972a10 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index 7999c6c906b85..64cf6c4638b13 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
    public API | Number of teams | |--------------|----------|------------------------| -| 897 | 764 | 43 | +| 898 | 765 | 43 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 54953 | 240 | 41325 | 2037 | +| 54976 | 240 | 41347 | 2038 | ## Plugin Directory @@ -54,7 +54,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | crossClusterReplication | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 268 | 0 | 249 | 1 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 114 | 0 | 111 | 13 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 114 | 0 | 111 | 14 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 54 | 0 | 51 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3209 | 31 | 2594 | 24 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 6 | 0 | 6 | 0 | @@ -70,13 +70,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 35 | 0 | 33 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A stateful layer to register shared features and provide an access point to discover without a direct dependency | 26 | 0 | 23 | 2 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 53 | 0 | 38 | 2 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 56 | 0 | 41 | 2 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 578 | 1 | 468 | 9 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 19 | 0 | 19 | 2 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 54 | 0 | 47 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Adds dashboards for discovering and managing Enterprise Search products. | 5 | 0 | 5 | 0 | | | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | - | 2 | 0 | 2 | 0 | -| | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | Entity manager plugin for entity assets (inventory, topology, etc) | 37 | 0 | 37 | 3 | +| | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | Entity manager plugin for entity assets (inventory, topology, etc) | 42 | 0 | 42 | 3 | | entityManagerApp | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | Entity manager plugin for entity assets (inventory, topology, etc) | 0 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 99 | 3 | 97 | 3 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 25 | 0 | 9 | 0 | @@ -170,7 +170,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 16 | 1 | 16 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 22 | 0 | 22 | 7 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 23 | 0 | 23 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Reporting Services enables applications to feature reports that the user can automate with Watcher and download later. | 9 | 0 | 2 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Reporting Services enables applications to feature reports that the user can automate with Watcher and download later. | 7 | 0 | 2 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 21 | 0 | 21 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 259 | 0 | 222 | 10 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 24 | 0 | 19 | 2 | @@ -529,7 +529,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 271 | 1 | 210 | 14 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 30 | 0 | 30 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 283 | 1 | 222 | 36 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 285 | 1 | 223 | 36 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 29 | 0 | 12 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 83 | 0 | 74 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 205 | 0 | 193 | 12 | @@ -542,6 +542,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 111 | 2 | 86 | 1 | | | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 560 | 6 | 520 | 7 | +| | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 10 | 0 | 8 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 1 | 0 | 1 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 26 | 0 | 26 | 1 | @@ -671,8 +672,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 17 | 0 | 16 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 11 | 0 | 9 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 111 | 0 | 104 | 2 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 92 | 0 | 91 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 110 | 0 | 103 | 2 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 91 | 0 | 91 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A component for creating resizable layouts containing a fixed width panel and a flexible panel, with support for horizontal and vertical layouts. | 18 | 0 | 5 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 3 | 0 | 3 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 157 | 0 | 156 | 7 | @@ -784,14 +785,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 4 | 0 | 4 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 19 | 0 | 19 | 3 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 1 | 0 | 1 | 1 | -| | [@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) | - | 4 | 0 | 3 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 108 | 2 | 70 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 4 | 0 | 2 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 41 | 2 | 21 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 32 | 2 | 32 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 19 | 0 | 19 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 5 | 1 | -| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 353 | 4 | 298 | 14 | +| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 358 | 4 | 303 | 14 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 37 | 1 | 19 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 131 | 3 | 98 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 187472351f24a..01414e90ef48f 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 5ccf8703e00f9..a78dd1125b6fa 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/product_doc_base.mdx b/api_docs/product_doc_base.mdx index 0101e9481f5e6..5b32c12174e0b 100644 --- a/api_docs/product_doc_base.mdx +++ b/api_docs/product_doc_base.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/productDocBase title: "productDocBase" image: https://source.unsplash.com/400x175/?github description: API docs for the productDocBase plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'productDocBase'] --- import productDocBaseObj from './product_doc_base.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 90d8dc1b16567..0acc2ff44bf6a 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 585757b5a2d94..7912783a48de0 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 7a9f248e89a5d..2b63fa1ba1ae6 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index 0e4736d0be198..6804d5935dd9f 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 9 | 0 | 2 | 0 | +| 7 | 0 | 2 | 0 | ## Client diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 6a45e8c8c6666..fb070eb291b15 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.devdocs.json b/api_docs/rule_registry.devdocs.json index b56fdcb364cd4..c8b4ab490604b 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -3254,8 +3254,8 @@ "description": [], "signature": [ "(alerts: { _id: string; _source: T; }[], suppressionWindow: string, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined, currentTimeOverride?: Date | undefined, isRuleExecutionOnly?: boolean | undefined, maxAlerts?: number | undefined) => Promise<", + "SuppressionFields8170", + ">(alerts: { _id: string; _source: T; subAlerts?: { _id: string; _source: T; }[] | undefined; }[], suppressionWindow: string, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined, currentTimeOverride?: Date | undefined, isRuleExecutionOnly?: boolean | undefined, maxAlerts?: number | undefined) => Promise<", { "pluginId": "ruleRegistry", "scope": "server", @@ -3278,7 +3278,7 @@ "label": "alerts", "description": [], "signature": [ - "{ _id: string; _source: T; }[]" + "{ _id: string; _source: T; subAlerts?: { _id: string; _source: T; }[] | undefined; }[]" ], "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", "deprecated": false, @@ -3990,8 +3990,8 @@ "description": [], "signature": [ "(alerts: { _id: string; _source: T; }[], suppressionWindow: string, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined, currentTimeOverride?: Date | undefined, isRuleExecutionOnly?: boolean | undefined, maxAlerts?: number | undefined) => Promise<", + "SuppressionFields8170", + ">(alerts: { _id: string; _source: T; subAlerts?: { _id: string; _source: T; }[] | undefined; }[], suppressionWindow: string, enrichAlerts?: ((alerts: { _id: string; _source: T; }[], params: { spaceId: string; }) => Promise<{ _id: string; _source: T; }[]>) | undefined, currentTimeOverride?: Date | undefined, isRuleExecutionOnly?: boolean | undefined, maxAlerts?: number | undefined) => Promise<", { "pluginId": "ruleRegistry", "scope": "server", @@ -4014,7 +4014,7 @@ "label": "alerts", "description": [], "signature": [ - "{ _id: string; _source: T; }[]" + "{ _id: string; _source: T; subAlerts?: { _id: string; _source: T; }[] | undefined; }[]" ], "path": "x-pack/plugins/rule_registry/server/utils/persistence_types.ts", "deprecated": false, diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 5ba93b7590b75..3dbb8c0e6a810 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index abf17d9d8af9f..bc1b863e8305d 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 24bfd88316a2a..9c871b27e32dc 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index de3c712510571..9add26b265187 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index d3d26858e0ff7..f002a09248e93 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 536b0ba129ba6..21ea11b39b58f 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 268149cf0624f..3d80815e812b7 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index 4151f92c64b70..2046dd4fea9b5 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 4f2f15b983e23..eb8517c03e3a4 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index 5b32fe32aa05f..80059588c47ab 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index 4027792cbf0d7..b82bd5f8e4fda 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index bf199e37aa003..72bab57150441 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index f77abaf9c4f22..1349d9178902d 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.devdocs.json b/api_docs/search_indices.devdocs.json index 8446bc09cbb0d..c2b13298b2e18 100644 --- a/api_docs/search_indices.devdocs.json +++ b/api_docs/search_indices.devdocs.json @@ -85,7 +85,7 @@ "label": "startAppId", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "x-pack/plugins/search_indices/public/types.ts", "deprecated": false, diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index df051f9a52ab8..78d8ce1c1713e 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index f126c01df2210..6f67f4d4b6efd 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_navigation.devdocs.json b/api_docs/search_navigation.devdocs.json index 9f9ff7e4294c4..2abd5573472a1 100644 --- a/api_docs/search_navigation.devdocs.json +++ b/api_docs/search_navigation.devdocs.json @@ -132,7 +132,7 @@ "label": "link", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:pipelines\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "x-pack/plugins/search_solution/search_navigation/public/types.ts", "deprecated": false, diff --git a/api_docs/search_navigation.mdx b/api_docs/search_navigation.mdx index b4515b9462bd3..e0c890e57baff 100644 --- a/api_docs/search_navigation.mdx +++ b/api_docs/search_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNavigation title: "searchNavigation" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNavigation plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNavigation'] --- import searchNavigationObj from './search_navigation.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index a1e0c6253d004..134a0e12f368f 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index fb2fd3b1b1b07..5754dd1df1c80 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 9ded6a45a70aa..86094ac61c79d 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-12-04 +date: 2024-12-05 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 8320b9f633933..ff8b79974b7b8 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -522,7 +522,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantModelEvaluation\" | \"defendInsights\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"graphVisualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"siemMigrationsEnabled\" | undefined" + "\"assistantModelEvaluation\" | \"defendInsights\" | \"alertSuppressionForSequenceEqlRuleEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"graphVisualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"siemMigrationsEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -602,7 +602,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantModelEvaluation\" | \"defendInsights\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"graphVisualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"siemMigrationsEnabled\" | undefined" + "\"assistantModelEvaluation\" | \"defendInsights\" | \"alertSuppressionForSequenceEqlRuleEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"entityAlertPreviewDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"timelineEsqlTabDisabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"graphVisualizationInFlyoutEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"siemMigrationsEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1882,7 +1882,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3130,7 +3130,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3303,7 +3303,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly entityAlertPreviewDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly graphVisualizationInFlyoutEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly siemMigrationsEnabled: boolean; readonly defendInsights: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3369,7 +3369,7 @@ "\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: false; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: true; readonly responseActionsSentinelOneProcessesEnabled: true; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly endpointManagementSpaceAwarenessEnabled: false; readonly securitySolutionNotesDisabled: false; readonly entityAlertPreviewDisabled: false; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly responseActionsTelemetryEnabled: false; readonly jamfDataInAnalyzerEnabled: true; readonly timelineEsqlTabDisabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly graphVisualizationInFlyoutEnabled: false; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly filterProcessDescendantsForEventFiltersEnabled: true; readonly dataIngestionHubEnabled: false; readonly entityStoreDisabled: false; readonly siemMigrationsEnabled: false; readonly defendInsights: false; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: false; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: true; readonly responseActionsSentinelOneProcessesEnabled: true; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly endpointManagementSpaceAwarenessEnabled: false; readonly securitySolutionNotesDisabled: false; readonly entityAlertPreviewDisabled: false; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly responseActionsTelemetryEnabled: false; readonly jamfDataInAnalyzerEnabled: true; readonly timelineEsqlTabDisabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly graphVisualizationInFlyoutEnabled: false; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly filterProcessDescendantsForEventFiltersEnabled: true; readonly dataIngestionHubEnabled: false; readonly entityStoreDisabled: false; readonly siemMigrationsEnabled: false; readonly defendInsights: false; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index bf6ba57352342..fa48cda70fba1 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index c2af8e63db827..4a58a37c33a08 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index 090d15ddf39d5..3b87510bbab9a 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 5eefdef70259c..1bce5689dd94b 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index d87b433f16b2a..d8d823181a96e 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index 42f7a26f1003d..24a3beb0fe69c 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 437d5160c3d8b..592b08ffaa0ca 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 0913e17b26e40..b5d7cec902506 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 1db8f75c7947f..689806fa24559 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 696fb232f3975..289ef73971b1f 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index 969a75b1ed39f..7f3dbaebd92cf 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 3e0a4b00c0f07..3626aafe3a713 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 8e1f651f3ef2b..cf11b8e102cc2 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/streams.devdocs.json b/api_docs/streams.devdocs.json index bf552dc47d88d..095b9b87cb116 100644 --- a/api_docs/streams.devdocs.json +++ b/api_docs/streams.devdocs.json @@ -63,7 +63,29 @@ "section": "def-common.RouteRepositoryClient", "text": "RouteRepositoryClient" }, - "<{ \"POST /api/streams/_disable\": ", + "<{ \"POST /api/streams/{id}/_sample\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /api/streams/{id}/_sample\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ condition: Zod.ZodOptional>; start: Zod.ZodOptional; end: Zod.ZodOptional; number: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }, { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }; }, { path: { id: string; }; body: { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }; }>, ", + "StreamsRouteHandlerResources", + ", { documents: unknown[]; }, undefined>; \"POST /api/streams/_disable\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -177,7 +199,7 @@ "Condition", "; }[]; fields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; }[]; managed: boolean; processing: { config: { type: \"grok\"; field: string; patterns: string[]; pattern_definitions?: Record | undefined; } | { type: \"dissect\"; field: string; pattern: string; }; condition?: ", "Condition", - "; }[]; unmanaged_elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } & { inheritedFields: ({ type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; } & { from: string; })[]; }, undefined>; \"POST /api/streams/{id}/_fork\": ", + "; }[]; inheritedFields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; from: string; }[]; unmanaged_elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, undefined>; \"POST /api/streams/{id}/_fork\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -290,17 +312,6 @@ "deprecated": false, "trackAdoption": false, "children": [ - { - "parentPluginId": "streams", - "id": "def-server.ListStreamResponse.total", - "type": "number", - "tags": [], - "label": "total", - "description": [], - "path": "x-pack/plugins/streams/server/lib/streams/stream_crud.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "streams", "id": "def-server.ListStreamResponse.definitions", @@ -348,7 +359,29 @@ "label": "StreamsRouteRepository", "description": [], "signature": [ - "{ \"POST /api/streams/_disable\": ", + "{ \"POST /api/streams/{id}/_sample\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"POST /api/streams/{id}/_sample\", Zod.ZodObject<{ path: Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>; body: Zod.ZodObject<{ condition: Zod.ZodOptional>; start: Zod.ZodOptional; end: Zod.ZodOptional; number: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }, { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }>; }, \"strip\", Zod.ZodTypeAny, { path: { id: string; }; body: { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }; }, { path: { id: string; }; body: { number?: number | undefined; start?: number | undefined; end?: number | undefined; condition?: ", + "Condition", + "; }; }>, ", + "StreamsRouteHandlerResources", + ", { documents: unknown[]; }, undefined>; \"POST /api/streams/_disable\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -462,7 +495,7 @@ "Condition", "; }[]; fields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; }[]; managed: boolean; processing: { config: { type: \"grok\"; field: string; patterns: string[]; pattern_definitions?: Record | undefined; } | { type: \"dissect\"; field: string; pattern: string; }; condition?: ", "Condition", - "; }[]; unmanaged_elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; } & { inheritedFields: ({ type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; } & { from: string; })[]; }, undefined>; \"POST /api/streams/{id}/_fork\": ", + "; }[]; inheritedFields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; from: string; }[]; unmanaged_elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }, undefined>; \"POST /api/streams/{id}/_fork\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -576,6 +609,25 @@ "interfaces": [], "enums": [], "misc": [ + { + "parentPluginId": "streams", + "id": "def-common.ReadStreamDefinition", + "type": "Type", + "tags": [], + "label": "ReadStreamDefinition", + "description": [], + "signature": [ + "{ id: string; children: { id: string; condition?: ", + "Condition", + "; }[]; fields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; }[]; managed: boolean; processing: { config: { type: \"grok\"; field: string; patterns: string[]; pattern_definitions?: Record | undefined; } | { type: \"dissect\"; field: string; pattern: string; }; condition?: ", + "Condition", + "; }[]; inheritedFields: { type: \"boolean\" | \"ip\" | \"keyword\" | \"date\" | \"long\" | \"double\" | \"match_only_text\"; name: string; from: string; }[]; unmanaged_elasticsearch_assets?: { id: string; type: \"ingest_pipeline\" | \"data_stream\" | \"index_template\" | \"component_template\"; }[] | undefined; }" + ], + "path": "x-pack/plugins/streams/common/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "streams", "id": "def-common.StreamDefinition", diff --git a/api_docs/streams.mdx b/api_docs/streams.mdx index a583ef6b7a014..003aade7cc175 100644 --- a/api_docs/streams.mdx +++ b/api_docs/streams.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streams title: "streams" image: https://source.unsplash.com/400x175/?github description: API docs for the streams plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streams'] --- import streamsObj from './streams.devdocs.json'; diff --git a/api_docs/streams_app.mdx b/api_docs/streams_app.mdx index fbe03bb2a4793..329525ae787fa 100644 --- a/api_docs/streams_app.mdx +++ b/api_docs/streams_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streamsApp title: "streamsApp" image: https://source.unsplash.com/400x175/?github description: API docs for the streamsApp plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streamsApp'] --- import streamsAppObj from './streams_app.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index b5b9064324d8f..703d8351735c7 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 78ac29ef66246..a866c7d3850ee 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 050260a9ab4dd..d539948409e38 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index b9cedfa89433b..65a50a0688cdc 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 1f463bff10c3a..ec46a182fa48e 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 8cc628d27a1fe..2386818bb1276 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index 1fb24e6d71146..8b0b38ff27c69 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index c58c3fc9196a1..82a0e67444e37 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 0e928f3afe3f7..c19d33faafb53 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-12-04 +date: 2024-12-05 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 8a297d374c976..c7f6e59a5cfae 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index a1c6d87a8bbd3..fb7e58deb13fa 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index f602231ac2735..3189130e339ba 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 8f75d2864ec15..ed1eaebaba5d5 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 72600331c03cc..344f79ae663cb 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index 6786013646d57..47377ce873102 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index e81879314668d..6293673e8efce 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 84837e93addbb..2959756858a34 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index 50c6a71d30333..1849f153beb16 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index d7ef166274308..cb30d696b8d47 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index d4a0cc94700a8..fe5200e40449e 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index b9a5478f1aba3..ac5c387a931f1 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 291819295e3ff..63309102a77df 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 360592e366d7d..1bdaadadee3ed 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index ecc2ddf40df34..71b3830f68f21 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index 4c8d018900ad4..e99c9c96e2108 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 2dd9cb60f2f69..7a2f0e25bc075 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 5a2bc4ba71116..668daa2023afb 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 1334f4635cd8f..66222fd332344 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index fd77aa74b21f4..36b81ccc0ae54 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-12-04 +date: 2024-12-05 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 3a55c390443600a7b29df5b10ebe904646cfdc90 Mon Sep 17 00:00:00 2001 From: Marta Bondyra <4283304+mbondyra@users.noreply.github.com> Date: Thu, 5 Dec 2024 09:10:22 +0100 Subject: [PATCH 066/141] [Collapsable panels][A11y] Tabbing through panels in a correct order (#202365) ## Summary This is a preparatory step for keyboard navigation improvements. It ensures proper tabbing order by aligning grid positions with the sequence in the HTML structure, as recommended for accessibility. Manipulating the tabindex property is an alternative but it's not a good approach. Keeping grid layouts consistent with the HTML flow is a more sustainable and accessible approach, as outlined in [related documentation](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_grid_layout/Grid_layout_and_accessibility). https://github.com/user-attachments/assets/d41eac8d-1ee1-47b1-8f40-e3207796573b I also modified styles for drag and resize handles. hover: Screenshot 2024-11-29 at 20 47 13 focus: Screenshot 2024-11-29 at 20 47 40 --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../kbn-grid-layout/grid/grid_layout.test.tsx | 167 ++++++++++++++++++ packages/kbn-grid-layout/grid/grid_layout.tsx | 7 +- .../grid/grid_panel/drag_handle.tsx | 74 ++++++++ .../grid/grid_panel/grid_panel.test.tsx | 68 +++++++ .../grid/{ => grid_panel}/grid_panel.tsx | 152 ++++------------ .../kbn-grid-layout/grid/grid_panel/index.tsx | 10 ++ .../grid/grid_panel/resize_handle.tsx | 70 ++++++++ .../grid/grid_row/grid_row.test.tsx | 49 +++++ .../grid/{ => grid_row}/grid_row.tsx | 114 ++++++------ .../grid/grid_row/grid_row_header.tsx | 41 +++++ .../kbn-grid-layout/grid/grid_row/index.ts | 10 ++ .../kbn-grid-layout/grid/test_utils/mocks.tsx | 52 ++++++ .../grid/test_utils/sample_layout.ts | 101 +++++++++++ .../grid/use_grid_layout_events.ts | 1 + .../grid/utils/resolve_grid_row.ts | 12 +- packages/kbn-grid-layout/tsconfig.json | 6 - 16 files changed, 741 insertions(+), 193 deletions(-) create mode 100644 packages/kbn-grid-layout/grid/grid_layout.test.tsx create mode 100644 packages/kbn-grid-layout/grid/grid_panel/drag_handle.tsx create mode 100644 packages/kbn-grid-layout/grid/grid_panel/grid_panel.test.tsx rename packages/kbn-grid-layout/grid/{ => grid_panel}/grid_panel.tsx (67%) create mode 100644 packages/kbn-grid-layout/grid/grid_panel/index.tsx create mode 100644 packages/kbn-grid-layout/grid/grid_panel/resize_handle.tsx create mode 100644 packages/kbn-grid-layout/grid/grid_row/grid_row.test.tsx rename packages/kbn-grid-layout/grid/{ => grid_row}/grid_row.tsx (77%) create mode 100644 packages/kbn-grid-layout/grid/grid_row/grid_row_header.tsx create mode 100644 packages/kbn-grid-layout/grid/grid_row/index.ts create mode 100644 packages/kbn-grid-layout/grid/test_utils/mocks.tsx create mode 100644 packages/kbn-grid-layout/grid/test_utils/sample_layout.ts diff --git a/packages/kbn-grid-layout/grid/grid_layout.test.tsx b/packages/kbn-grid-layout/grid/grid_layout.test.tsx new file mode 100644 index 0000000000000..33b1bad784618 --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_layout.test.tsx @@ -0,0 +1,167 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ +import React from 'react'; +import { fireEvent, render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import { getSampleLayout } from './test_utils/sample_layout'; +import { GridLayout, GridLayoutProps } from './grid_layout'; +import { gridSettings, mockRenderPanelContents } from './test_utils/mocks'; +import { cloneDeep } from 'lodash'; + +describe('GridLayout', () => { + const renderGridLayout = (propsOverrides: Partial = {}) => { + const defaultProps: GridLayoutProps = { + accessMode: 'EDIT', + layout: getSampleLayout(), + gridSettings, + renderPanelContents: mockRenderPanelContents, + onLayoutChange: jest.fn(), + }; + + const { rerender, ...rtlRest } = render(); + + return { + ...rtlRest, + rerender: (overrides: Partial) => + rerender(), + }; + }; + const getAllThePanelIds = () => + screen + .getAllByRole('button', { name: /panelId:panel/i }) + .map((el) => el.getAttribute('aria-label')?.replace(/panelId:/g, '')); + + const startDragging = (handle: HTMLElement, options = { clientX: 0, clientY: 0 }) => { + fireEvent.mouseDown(handle, options); + }; + const moveTo = (options = { clientX: 256, clientY: 128 }) => { + fireEvent.mouseMove(document, options); + }; + const drop = (handle: HTMLElement) => { + fireEvent.mouseUp(handle); + }; + + const assertTabThroughPanel = async (panelId: string) => { + await userEvent.tab(); // tab to drag handle + await userEvent.tab(); // tab to the panel + expect(screen.getByLabelText(`panelId:${panelId}`)).toHaveFocus(); + await userEvent.tab(); // tab to the resize handle + }; + + const expectedInitialOrder = [ + 'panel1', + 'panel5', + 'panel2', + 'panel3', + 'panel7', + 'panel6', + 'panel8', + 'panel4', + 'panel9', + 'panel10', + ]; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it(`'renderPanelContents' is not called during dragging`, () => { + renderGridLayout(); + + expect(mockRenderPanelContents).toHaveBeenCalledTimes(10); // renderPanelContents is called for each of 10 panels + jest.clearAllMocks(); + + const panel1DragHandle = screen.getAllByRole('button', { name: /drag to move/i })[0]; + startDragging(panel1DragHandle); + moveTo({ clientX: 256, clientY: 128 }); + expect(mockRenderPanelContents).toHaveBeenCalledTimes(0); // renderPanelContents should not be called during dragging + + drop(panel1DragHandle); + expect(mockRenderPanelContents).toHaveBeenCalledTimes(0); // renderPanelContents should not be called after reordering + }); + + describe('panels order: panels are rendered from left to right, from top to bottom', () => { + it('focus management - tabbing through the panels', async () => { + renderGridLayout(); + // we only test a few panels because otherwise that test would execute for too long + await assertTabThroughPanel('panel1'); + await assertTabThroughPanel('panel5'); + await assertTabThroughPanel('panel2'); + await assertTabThroughPanel('panel3'); + }); + it('on initializing', () => { + renderGridLayout(); + expect(getAllThePanelIds()).toEqual(expectedInitialOrder); + }); + + it('after reordering some panels', async () => { + renderGridLayout(); + + const panel1DragHandle = screen.getAllByRole('button', { name: /drag to move/i })[0]; + startDragging(panel1DragHandle); + + moveTo({ clientX: 256, clientY: 128 }); + expect(getAllThePanelIds()).toEqual(expectedInitialOrder); // the panels shouldn't be reordered till we drop + + drop(panel1DragHandle); + expect(getAllThePanelIds()).toEqual([ + 'panel2', + 'panel5', + 'panel3', + 'panel7', + 'panel1', + 'panel8', + 'panel6', + 'panel4', + 'panel9', + 'panel10', + ]); + }); + it('after removing a panel', async () => { + const { rerender } = renderGridLayout(); + const sampleLayoutWithoutPanel1 = cloneDeep(getSampleLayout()); + delete sampleLayoutWithoutPanel1[0].panels.panel1; + rerender({ layout: sampleLayoutWithoutPanel1 }); + + expect(getAllThePanelIds()).toEqual([ + 'panel2', + 'panel5', + 'panel3', + 'panel7', + 'panel6', + 'panel8', + 'panel4', + 'panel9', + 'panel10', + ]); + }); + it('after replacing a panel id', async () => { + const { rerender } = renderGridLayout(); + const modifiedLayout = cloneDeep(getSampleLayout()); + const newPanel = { ...modifiedLayout[0].panels.panel1, id: 'panel11' }; + delete modifiedLayout[0].panels.panel1; + modifiedLayout[0].panels.panel11 = newPanel; + + rerender({ layout: modifiedLayout }); + + expect(getAllThePanelIds()).toEqual([ + 'panel11', + 'panel5', + 'panel2', + 'panel3', + 'panel7', + 'panel6', + 'panel8', + 'panel4', + 'panel9', + 'panel10', + ]); + }); + }); +}); diff --git a/packages/kbn-grid-layout/grid/grid_layout.tsx b/packages/kbn-grid-layout/grid/grid_layout.tsx index 2a14456b1ef62..1406d4b6eb55d 100644 --- a/packages/kbn-grid-layout/grid/grid_layout.tsx +++ b/packages/kbn-grid-layout/grid/grid_layout.tsx @@ -21,7 +21,7 @@ import { useGridLayoutState } from './use_grid_layout_state'; import { isLayoutEqual } from './utils/equality_checks'; import { resolveGridRow } from './utils/resolve_grid_row'; -interface GridLayoutProps { +export interface GridLayoutProps { layout: GridLayoutData; gridSettings: GridSettings; renderPanelContents: (panelId: string) => React.ReactNode; @@ -121,11 +121,6 @@ export const GridLayout = ({ rowIndex={rowIndex} renderPanelContents={renderPanelContents} gridLayoutStateManager={gridLayoutStateManager} - toggleIsCollapsed={() => { - const newLayout = cloneDeep(gridLayoutStateManager.gridLayout$.value); - newLayout[rowIndex].isCollapsed = !newLayout[rowIndex].isCollapsed; - gridLayoutStateManager.gridLayout$.next(newLayout); - }} setInteractionEvent={(nextInteractionEvent) => { if (!nextInteractionEvent) { gridLayoutStateManager.activePanel$.next(undefined); diff --git a/packages/kbn-grid-layout/grid/grid_panel/drag_handle.tsx b/packages/kbn-grid-layout/grid/grid_panel/drag_handle.tsx new file mode 100644 index 0000000000000..90305812ff8d5 --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_panel/drag_handle.tsx @@ -0,0 +1,74 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; + +import { EuiIcon, useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { i18n } from '@kbn/i18n'; +import { PanelInteractionEvent } from '../types'; + +export const DragHandle = ({ + interactionStart, +}: { + interactionStart: ( + type: PanelInteractionEvent['type'] | 'drop', + e: React.MouseEvent + ) => void; +}) => { + const { euiTheme } = useEuiTheme(); + return ( + + ); +}; diff --git a/packages/kbn-grid-layout/grid/grid_panel/grid_panel.test.tsx b/packages/kbn-grid-layout/grid/grid_panel/grid_panel.test.tsx new file mode 100644 index 0000000000000..2829a320abab4 --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_panel/grid_panel.test.tsx @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; +import { render, screen, fireEvent } from '@testing-library/react'; +import { GridPanel, GridPanelProps } from './grid_panel'; +import { gridLayoutStateManagerMock } from '../test_utils/mocks'; + +describe('GridPanel', () => { + const mockRenderPanelContents = jest.fn((panelId) =>
    Panel Content {panelId}
    ); + const mockInteractionStart = jest.fn(); + + const renderGridPanel = (propsOverrides: Partial = {}) => { + return render( + + ); + }; + afterEach(() => { + jest.clearAllMocks(); + }); + + it('renders panel contents correctly', () => { + renderGridPanel(); + expect(screen.getByText('Panel Content panel1')).toBeInTheDocument(); + }); + + describe('drag handle interaction', () => { + it('calls `drag` interactionStart on mouse down', () => { + renderGridPanel(); + const dragHandle = screen.getByRole('button', { name: /drag to move/i }); + fireEvent.mouseDown(dragHandle); + expect(mockInteractionStart).toHaveBeenCalledWith('drag', expect.any(Object)); + }); + it('calls `drop` interactionStart on mouse up', () => { + renderGridPanel(); + const dragHandle = screen.getByRole('button', { name: /drag to move/i }); + fireEvent.mouseUp(dragHandle); + expect(mockInteractionStart).toHaveBeenCalledWith('drop', expect.any(Object)); + }); + }); + describe('resize handle interaction', () => { + it('calls `resize` interactionStart on mouse down', () => { + renderGridPanel(); + const resizeHandle = screen.getByRole('button', { name: /resize/i }); + fireEvent.mouseDown(resizeHandle); + expect(mockInteractionStart).toHaveBeenCalledWith('resize', expect.any(Object)); + }); + it('calls `drop` interactionStart on mouse up', () => { + renderGridPanel(); + const resizeHandle = screen.getByRole('button', { name: /resize/i }); + fireEvent.mouseUp(resizeHandle); + expect(mockInteractionStart).toHaveBeenCalledWith('drop', expect.any(Object)); + }); + }); +}); diff --git a/packages/kbn-grid-layout/grid/grid_panel.tsx b/packages/kbn-grid-layout/grid/grid_panel/grid_panel.tsx similarity index 67% rename from packages/kbn-grid-layout/grid/grid_panel.tsx rename to packages/kbn-grid-layout/grid/grid_panel/grid_panel.tsx index 91f935f4507f1..e817f5fc3871b 100644 --- a/packages/kbn-grid-layout/grid/grid_panel.tsx +++ b/packages/kbn-grid-layout/grid/grid_panel/grid_panel.tsx @@ -10,39 +10,30 @@ import React, { forwardRef, useEffect, useMemo } from 'react'; import { combineLatest, skip } from 'rxjs'; -import { - EuiIcon, - EuiPanel, - euiFullHeight, - transparentize, - useEuiOverflowScroll, - useEuiTheme, -} from '@elastic/eui'; +import { EuiPanel, euiFullHeight, useEuiOverflowScroll } from '@elastic/eui'; import { css } from '@emotion/react'; import { euiThemeVars } from '@kbn/ui-theme'; - -import { GridLayoutStateManager, PanelInteractionEvent } from './types'; -import { getKeysInOrder } from './utils/resolve_grid_row'; - -export const GridPanel = forwardRef< - HTMLDivElement, - { - panelId: string; - rowIndex: number; - renderPanelContents: (panelId: string) => React.ReactNode; - interactionStart: ( - type: PanelInteractionEvent['type'] | 'drop', - e: React.MouseEvent - ) => void; - gridLayoutStateManager: GridLayoutStateManager; - } ->( +import { GridLayoutStateManager, PanelInteractionEvent } from '../types'; +import { getKeysInOrder } from '../utils/resolve_grid_row'; +import { DragHandle } from './drag_handle'; +import { ResizeHandle } from './resize_handle'; + +export interface GridPanelProps { + panelId: string; + rowIndex: number; + renderPanelContents: (panelId: string) => React.ReactNode; + interactionStart: ( + type: PanelInteractionEvent['type'] | 'drop', + e: React.MouseEvent + ) => void; + gridLayoutStateManager: GridLayoutStateManager; +} + +export const GridPanel = forwardRef( ( { panelId, rowIndex, renderPanelContents, interactionStart, gridLayoutStateManager }, panelRef ) => { - const { euiTheme } = useEuiTheme(); - /** Set initial styles based on state at mount to prevent styles from "blipping" */ const initialStyles = useMemo(() => { const initialPanel = gridLayoutStateManager.gridLayout$.getValue()[rowIndex].panels[panelId]; @@ -158,7 +149,7 @@ export const GridPanel = forwardRef< const panel = allPanels[panelId]; if (!ref || !panel) return; - const sortedKeys = getKeysInOrder(gridLayout[rowIndex]); + const sortedKeys = getKeysInOrder(gridLayout[rowIndex].panels); const currentPanelPosition = sortedKeys.indexOf(panelId); const sortedKeysBefore = sortedKeys.slice(0, currentPanelPosition); const responsiveGridRowStart = sortedKeysBefore.reduce( @@ -180,7 +171,6 @@ export const GridPanel = forwardRef< // eslint-disable-next-line react-hooks/exhaustive-deps [] ); - /** * Memoize panel contents to prevent unnecessary re-renders */ @@ -189,93 +179,29 @@ export const GridPanel = forwardRef< }, [panelId, renderPanelContents]); return ( - <> -
    - + + +
    - {/* drag handle */} -
    interactionStart('drag', e)} - onMouseUp={(e) => interactionStart('drop', e)} - > - -
    - {/* Resize handle */} -
    interactionStart('resize', e)} - onMouseUp={(e) => interactionStart('drop', e)} - css={css` - right: 0; - bottom: 0; - opacity: 0; - margin: -2px; - position: absolute; - width: ${euiThemeVars.euiSizeL}; - height: ${euiThemeVars.euiSizeL}; - transition: opacity 0.2s, border 0.2s; - border-radius: 7px 0 7px 0; - border-bottom: 2px solid ${euiThemeVars.euiColorSuccess}; - border-right: 2px solid ${euiThemeVars.euiColorSuccess}; - :hover { - opacity: 1; - background-color: ${transparentize(euiThemeVars.euiColorSuccess, 0.05)}; - cursor: se-resize; - } - .kbnGrid--static & { - opacity: 0 !important; - display: none; - } - `} - /> -
    - {panelContents} -
    - -
    - + {panelContents} +
    + +
    +
    ); } ); diff --git a/packages/kbn-grid-layout/grid/grid_panel/index.tsx b/packages/kbn-grid-layout/grid/grid_panel/index.tsx new file mode 100644 index 0000000000000..e286fc92fd9f7 --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_panel/index.tsx @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +export { GridPanel } from './grid_panel'; diff --git a/packages/kbn-grid-layout/grid/grid_panel/resize_handle.tsx b/packages/kbn-grid-layout/grid/grid_panel/resize_handle.tsx new file mode 100644 index 0000000000000..4c4a2d60ee5cb --- /dev/null +++ b/packages/kbn-grid-layout/grid/grid_panel/resize_handle.tsx @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React from 'react'; + +import { transparentize } from '@elastic/eui'; +import { css } from '@emotion/react'; +import { euiThemeVars } from '@kbn/ui-theme'; +import { i18n } from '@kbn/i18n'; +import { PanelInteractionEvent } from '../types'; + +export const ResizeHandle = ({ + interactionStart, +}: { + interactionStart: ( + type: PanelInteractionEvent['type'] | 'drop', + e: React.MouseEvent + ) => void; +}) => { + return ( + +)); + +const runtimeSettings$ = new BehaviorSubject({ + ...gridSettings, + columnPixelWidth: 0, +}); + +export const gridLayoutStateManagerMock: GridLayoutStateManager = { + expandedPanelId$: new BehaviorSubject(undefined), + isMobileView$: new BehaviorSubject(false), + gridLayout$, + runtimeSettings$, + panelRefs: { current: [] }, + rowRefs: { current: [] }, + interactionEvent$: new BehaviorSubject(undefined), + activePanel$: new BehaviorSubject(undefined), + gridDimensions$: new BehaviorSubject({ width: 600, height: 900 }), +}; diff --git a/packages/kbn-grid-layout/grid/test_utils/sample_layout.ts b/packages/kbn-grid-layout/grid/test_utils/sample_layout.ts new file mode 100644 index 0000000000000..035a6f1dda2ee --- /dev/null +++ b/packages/kbn-grid-layout/grid/test_utils/sample_layout.ts @@ -0,0 +1,101 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { GridLayoutData } from '../types'; + +export const getSampleLayout = (): GridLayoutData => [ + { + title: 'Large section', + isCollapsed: false, + panels: { + panel1: { + id: 'panel1', + row: 0, + column: 0, + width: 12, + height: 6, + }, + panel2: { + id: 'panel2', + row: 6, + column: 0, + width: 8, + height: 4, + }, + panel3: { + id: 'panel3', + row: 6, + column: 8, + width: 12, + height: 4, + }, + panel4: { + id: 'panel4', + row: 10, + column: 0, + width: 48, + height: 4, + }, + panel5: { + id: 'panel5', + row: 0, + column: 12, + width: 36, + height: 6, + }, + panel6: { + id: 'panel6', + row: 6, + column: 24, + width: 24, + height: 4, + }, + panel7: { + id: 'panel7', + row: 6, + column: 20, + width: 4, + height: 2, + }, + panel8: { + id: 'panel8', + row: 8, + column: 20, + width: 4, + height: 2, + }, + }, + }, + { + title: 'Small section', + isCollapsed: false, + panels: { + panel9: { + id: 'panel9', + row: 0, + column: 0, + width: 12, + height: 16, + }, + }, + }, + { + title: 'Another small section', + isCollapsed: false, + panels: { + panel10: { + id: 'panel10', + row: 0, + column: 24, + width: 12, + height: 6, + }, + }, + }, +]; diff --git a/packages/kbn-grid-layout/grid/use_grid_layout_events.ts b/packages/kbn-grid-layout/grid/use_grid_layout_events.ts index 9a6d6d2303909..64cc8f482838e 100644 --- a/packages/kbn-grid-layout/grid/use_grid_layout_events.ts +++ b/packages/kbn-grid-layout/grid/use_grid_layout_events.ts @@ -87,6 +87,7 @@ export const useGridLayoutEvents = ({ bottom: mouseTargetPixel.y - interactionEvent.mouseOffsets.bottom, right: mouseTargetPixel.x - interactionEvent.mouseOffsets.right, }; + gridLayoutStateManager.activePanel$.next({ id: interactionEvent.id, position: previewRect }); // find the grid that the preview rect is over diff --git a/packages/kbn-grid-layout/grid/utils/resolve_grid_row.ts b/packages/kbn-grid-layout/grid/utils/resolve_grid_row.ts index 9a6f28d006e0a..38b778b5d0571 100644 --- a/packages/kbn-grid-layout/grid/utils/resolve_grid_row.ts +++ b/packages/kbn-grid-layout/grid/utils/resolve_grid_row.ts @@ -34,11 +34,11 @@ const getAllCollisionsWithPanel = ( return collidingPanels; }; -export const getKeysInOrder = (rowData: GridRowData, draggedId?: string): string[] => { - const panelKeys = Object.keys(rowData.panels); +export const getKeysInOrder = (panels: GridRowData['panels'], draggedId?: string): string[] => { + const panelKeys = Object.keys(panels); return panelKeys.sort((panelKeyA, panelKeyB) => { - const panelA = rowData.panels[panelKeyA]; - const panelB = rowData.panels[panelKeyB]; + const panelA = panels[panelKeyA]; + const panelB = panels[panelKeyB]; // sort by row first if (panelA.row > panelB.row) return 1; @@ -60,7 +60,7 @@ export const getKeysInOrder = (rowData: GridRowData, draggedId?: string): string const compactGridRow = (originalLayout: GridRowData) => { const nextRowData = { ...originalLayout, panels: { ...originalLayout.panels } }; // compact all vertical space. - const sortedKeysAfterMove = getKeysInOrder(nextRowData); + const sortedKeysAfterMove = getKeysInOrder(nextRowData.panels); for (const panelKey of sortedKeysAfterMove) { const panel = nextRowData.panels[panelKey]; // try moving panel up one row at a time until it collides @@ -90,7 +90,7 @@ export const resolveGridRow = ( // return nextRowData; // push all panels down if they collide with another panel - const sortedKeys = getKeysInOrder(nextRowData, dragRequest?.id); + const sortedKeys = getKeysInOrder(nextRowData.panels, dragRequest?.id); for (const key of sortedKeys) { const panel = nextRowData.panels[key]; diff --git a/packages/kbn-grid-layout/tsconfig.json b/packages/kbn-grid-layout/tsconfig.json index f0dd3232a42d5..bd16ae0f0adeb 100644 --- a/packages/kbn-grid-layout/tsconfig.json +++ b/packages/kbn-grid-layout/tsconfig.json @@ -2,12 +2,6 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", - "types": [ - "jest", - "node", - "react", - "@emotion/react/types/css-prop" - ] }, "include": [ "**/*.ts", From a7a3cf5e2ee3e16a939e72d37e8bc32117736342 Mon Sep 17 00:00:00 2001 From: Ievgen Sorokopud Date: Thu, 5 Dec 2024 10:12:32 +0100 Subject: [PATCH 067/141] [Security Solution] Move ES|QL parsing functionality into `@kbn/securitysolution-utils` package (#202772) ## Summary With this PR we move existing `parseEsqlQuery` method into a shared security solution utils package. We need to the same functionality in "SIEM migrations" feature. Previously we duplicated the code in [this PR](https://github.com/elastic/kibana/pull/202331/files#diff-b5f1a952a5e5a9685a4fef5d1f5a4c3b53ce338333e569bb6f92ccf2681100b7R54) and these are the follow-up changes to make parsing functionality shared for easier re-use within security solution. ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [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: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../src/esql/index.ts | 1 + .../src/esql/parse_esql_query.test.ts | 119 ++++++++++++++++++ .../src/esql/parse_esql_query.ts | 43 ++++--- .../kbn-securitysolution-utils/tsconfig.json | 3 +- .../esql_query_validator_factory.ts | 58 +-------- .../nodes/validation/validation.ts | 2 +- .../plugins/security_solution/tsconfig.json | 2 - 7 files changed, 150 insertions(+), 78 deletions(-) create mode 100644 packages/kbn-securitysolution-utils/src/esql/parse_esql_query.test.ts rename x-pack/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/validation/esql_query.ts => packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts (66%) diff --git a/packages/kbn-securitysolution-utils/src/esql/index.ts b/packages/kbn-securitysolution-utils/src/esql/index.ts index 22c2cc42a9fed..930ff246988ea 100644 --- a/packages/kbn-securitysolution-utils/src/esql/index.ts +++ b/packages/kbn-securitysolution-utils/src/esql/index.ts @@ -9,3 +9,4 @@ export * from './compute_if_esql_query_aggregating'; export * from './get_index_list_from_esql_query'; +export * from './parse_esql_query'; diff --git a/packages/kbn-securitysolution-utils/src/esql/parse_esql_query.test.ts b/packages/kbn-securitysolution-utils/src/esql/parse_esql_query.test.ts new file mode 100644 index 0000000000000..6c4fdafd8e70b --- /dev/null +++ b/packages/kbn-securitysolution-utils/src/esql/parse_esql_query.test.ts @@ -0,0 +1,119 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { parseEsqlQuery } from './parse_esql_query'; + +describe('parseEsqlQuery', () => { + describe('ES|QL query syntax', () => { + it.each([['incorrect syntax'], ['from test* metadata']])( + 'detects incorrect syntax in "%s"', + (esqlQuery) => { + const result = parseEsqlQuery(esqlQuery); + expect(result.errors.length).toEqual(1); + expect(result.errors[0].message.startsWith('SyntaxError:')).toBeTruthy(); + expect(parseEsqlQuery(esqlQuery)).toMatchObject({ + hasMetadataOperator: false, + isEsqlQueryAggregating: false, + }); + } + ); + + it.each([ + ['from test* metadata _id'], + [ + 'FROM kibana_sample_data_logs | STATS total_bytes = SUM(bytes) BY host | WHERE total_bytes > 200000 | SORT total_bytes DESC | LIMIT 10', + ], + [ + `from packetbeat* metadata + _id + | limit 100`, + ], + [ + `FROM kibana_sample_data_logs | + STATS total_bytes = SUM(bytes) BY host | + WHERE total_bytes > 200000 | + SORT total_bytes DESC | + LIMIT 10`, + ], + ])('parses correctly valid syntax in "%s"', (esqlQuery) => { + const result = parseEsqlQuery(esqlQuery); + expect(result.errors.length).toEqual(0); + expect(result).toMatchObject({ errors: [] }); + }); + }); + + describe('METADATA operator', () => { + it.each([ + ['from test*'], + ['from metadata*'], + ['from test* | keep metadata'], + ['from test* | eval x="metadata _id"'], + ])('detects when METADATA operator is missing in a NON aggregating query "%s"', (esqlQuery) => { + expect(parseEsqlQuery(esqlQuery)).toEqual({ + errors: [], + hasMetadataOperator: false, + isEsqlQueryAggregating: false, + }); + }); + + it.each([ + ['from test* metadata _id'], + ['from test* metadata _id, _index'], + ['from test* metadata _index, _id'], + ['from test* metadata _id '], + ['from test* metadata _id '], + ['from test* metadata _id | limit 10'], + [ + `from packetbeat* metadata + + _id + | limit 100`, + ], + ])('detects existin METADATA operator in a NON aggregating query "%s"', (esqlQuery) => + expect(parseEsqlQuery(esqlQuery)).toEqual({ + errors: [], + hasMetadataOperator: true, + isEsqlQueryAggregating: false, + }) + ); + + it('detects missing METADATA operator in an aggregating query "from test* | stats c = count(*) by fieldA"', () => + expect(parseEsqlQuery('from test* | stats c = count(*) by fieldA')).toEqual({ + errors: [], + hasMetadataOperator: false, + isEsqlQueryAggregating: true, + })); + }); + + describe('METADATA _id field for NON aggregating queries', () => { + it('detects missing METADATA "_id" field', () => { + expect(parseEsqlQuery('from test*')).toEqual({ + errors: [], + hasMetadataOperator: false, + isEsqlQueryAggregating: false, + }); + }); + + it('detects existing METADATA "_id" field', async () => { + expect(parseEsqlQuery('from test* metadata _id')).toEqual({ + errors: [], + hasMetadataOperator: true, + isEsqlQueryAggregating: false, + }); + }); + }); + + describe('METADATA _id field for aggregating queries', () => { + it('detects existing METADATA operator with missing "_id" field', () => { + expect( + parseEsqlQuery('from test* metadata someField | stats c = count(*) by fieldA') + ).toEqual({ errors: [], hasMetadataOperator: false, isEsqlQueryAggregating: true }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/validation/esql_query.ts b/packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts similarity index 66% rename from x-pack/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/validation/esql_query.ts rename to packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts index a8c1d6acff408..2a62aed8873a0 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/validation/esql_query.ts +++ b/packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts @@ -1,21 +1,40 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". */ -import type { ESQLAstQueryExpression, ESQLCommandOption, EditorError } from '@kbn/esql-ast'; -import { parse } from '@kbn/esql-ast'; +import { type ESQLAstQueryExpression, parse, ESQLCommandOption, EditorError } from '@kbn/esql-ast'; import { isColumnItem, isOptionItem } from '@kbn/esql-validation-autocomplete'; -import { isAggregatingQuery } from '@kbn/securitysolution-utils'; +import { isAggregatingQuery } from './compute_if_esql_query_aggregating'; -interface ParseEsqlQueryResult { +export interface ParseEsqlQueryResult { errors: EditorError[]; isEsqlQueryAggregating: boolean; hasMetadataOperator: boolean; } +/** + * check if esql query valid for Security rule: + * - if it's non aggregation query it must have metadata operator + */ +export const parseEsqlQuery = (query: string): ParseEsqlQueryResult => { + const { root, errors } = parse(query); + const isEsqlQueryAggregating = isAggregatingQuery(root); + + return { + errors, + isEsqlQueryAggregating, + hasMetadataOperator: computeHasMetadataOperator(root), + }; +}; + +/** + * checks whether query has metadata _id operator + */ function computeHasMetadataOperator(astExpression: ESQLAstQueryExpression): boolean { // Check whether the `from` command has `metadata` operator const metadataOption = getMetadataOption(astExpression); @@ -50,13 +69,3 @@ function getMetadataOption(astExpression: ESQLAstQueryExpression): ESQLCommandOp return undefined; } - -export const parseEsqlQuery = (query: string): ParseEsqlQueryResult => { - const { root, errors } = parse(query); - const isEsqlQueryAggregating = isAggregatingQuery(root); - return { - errors, - isEsqlQueryAggregating, - hasMetadataOperator: computeHasMetadataOperator(root), - }; -}; diff --git a/packages/kbn-securitysolution-utils/tsconfig.json b/packages/kbn-securitysolution-utils/tsconfig.json index 5b9520c487e31..d45b0c973af87 100644 --- a/packages/kbn-securitysolution-utils/tsconfig.json +++ b/packages/kbn-securitysolution-utils/tsconfig.json @@ -13,7 +13,8 @@ "kbn_references": [ "@kbn/i18n", "@kbn/esql-utils", - "@kbn/esql-ast" + "@kbn/esql-ast", + "@kbn/esql-validation-autocomplete" ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts index 90cdaff14cc9b..c5b54db172a18 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts @@ -7,10 +7,7 @@ import type { QueryClient } from '@tanstack/react-query'; import type { DatatableColumn } from '@kbn/expressions-plugin/common'; -import type { ESQLAstQueryExpression, ESQLCommandOption } from '@kbn/esql-ast'; -import { parse } from '@kbn/esql-ast'; -import { isAggregatingQuery } from '@kbn/securitysolution-utils'; -import { isColumnItem, isOptionItem } from '@kbn/esql-validation-autocomplete'; +import { parseEsqlQuery } from '@kbn/securitysolution-utils'; import type { FormData, ValidationError, ValidationFunc } from '../../../../../shared_imports'; import type { FieldValueQueryBar } from '../../../../rule_creation_ui/components/query_bar_field'; import { fetchEsqlQueryColumns } from '../../../logic/esql_query_columns'; @@ -79,59 +76,6 @@ function hasIdColumn(columns: DatatableColumn[]): boolean { return columns.some(({ id }) => '_id' === id); } -/** - * check if esql query valid for Security rule: - * - if it's non aggregation query it must have metadata operator - */ -function parseEsqlQuery(query: string) { - const { root, errors } = parse(query); - const isEsqlQueryAggregating = isAggregatingQuery(root); - - return { - errors, - isEsqlQueryAggregating, - hasMetadataOperator: computeHasMetadataOperator(root), - }; -} - -/** - * checks whether query has metadata _id operator - */ -function computeHasMetadataOperator(astExpression: ESQLAstQueryExpression): boolean { - // Check whether the `from` command has `metadata` operator - const metadataOption = getMetadataOption(astExpression); - if (!metadataOption) { - return false; - } - - // Check whether the `metadata` operator has `_id` argument - const idColumnItem = metadataOption.args.find( - (fromArg) => isColumnItem(fromArg) && fromArg.name === '_id' - ); - if (!idColumnItem) { - return false; - } - - return true; -} - -function getMetadataOption(astExpression: ESQLAstQueryExpression): ESQLCommandOption | undefined { - const fromCommand = astExpression.commands.find((x) => x.name === 'from'); - - if (!fromCommand?.args) { - return undefined; - } - - // Check whether the `from` command has `metadata` operator - for (const fromArg of fromCommand.args) { - if (isOptionItem(fromArg) && fromArg.name === 'metadata') { - return fromArg; - } - } - - return undefined; -} - function constructSyntaxError(error: Error): ValidationError { return { code: ESQL_ERROR_CODES.INVALID_SYNTAX, diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/validation/validation.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/validation/validation.ts index 272aedfe4793d..6f97678a04558 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/validation/validation.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/validation/validation.ts @@ -7,8 +7,8 @@ import type { Logger } from '@kbn/core/server'; import { isEmpty } from 'lodash/fp'; +import { parseEsqlQuery } from '@kbn/securitysolution-utils'; import type { GraphNode } from '../../types'; -import { parseEsqlQuery } from './esql_query'; interface GetValidationNodeParams { logger: Logger; diff --git a/x-pack/plugins/security_solution/tsconfig.json b/x-pack/plugins/security_solution/tsconfig.json index 4d11804796e2b..7767fffe69824 100644 --- a/x-pack/plugins/security_solution/tsconfig.json +++ b/x-pack/plugins/security_solution/tsconfig.json @@ -209,8 +209,6 @@ "@kbn/core-theme-browser", "@kbn/integration-assistant-plugin", "@kbn/avc-banner", - "@kbn/esql-ast", - "@kbn/esql-validation-autocomplete", "@kbn/config", "@kbn/openapi-common", "@kbn/securitysolution-lists-common", From 432b0f56b8351e90c2a85e813e3b60d0510c85ec Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 5 Dec 2024 10:12:48 +0100 Subject: [PATCH 068/141] [SLOs] Added $state into filters schema !! (#202887) ## Summary fixes https://github.com/elastic/kibana/issues/202999 Added $state into filters schema !! --- .../kbn-slo-schema/src/schema/indicators.ts | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/x-pack/packages/kbn-slo-schema/src/schema/indicators.ts b/x-pack/packages/kbn-slo-schema/src/schema/indicators.ts index 6c3149c3c35e1..f246d36382c8f 100644 --- a/x-pack/packages/kbn-slo-schema/src/schema/indicators.ts +++ b/x-pack/packages/kbn-slo-schema/src/schema/indicators.ts @@ -11,26 +11,31 @@ import { allOrAnyString } from './common'; const kqlQuerySchema = t.string; const filtersSchema = t.array( - t.type({ - meta: t.partial({ - alias: t.union([t.string, t.null]), - disabled: t.boolean, - negate: t.boolean, - // controlledBy is there to identify who owns the filter - controlledBy: t.string, - // allows grouping of filters - group: t.string, - // index and type are optional only because when you create a new filter, there are no defaults - index: t.string, - isMultiIndex: t.boolean, - type: t.string, - key: t.string, - field: t.string, - params: t.any, - value: t.string, + t.intersection([ + t.type({ + meta: t.partial({ + alias: t.union([t.string, t.null]), + disabled: t.boolean, + negate: t.boolean, + // controlledBy is there to identify who owns the filter + controlledBy: t.string, + // allows grouping of filters + group: t.string, + // index and type are optional only because when you create a new filter, there are no defaults + index: t.string, + isMultiIndex: t.boolean, + type: t.string, + key: t.string, + field: t.string, + params: t.any, + value: t.string, + }), + query: t.record(t.string, t.any), + }), + t.partial({ + $state: t.any, }), - query: t.record(t.string, t.any), - }) + ]) ); const kqlWithFiltersSchema = t.type({ From 52c2e15f73f8ba42493152ae2d5c0ddd51041b92 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Thu, 5 Dec 2024 10:19:11 +0100 Subject: [PATCH 069/141] [Synthetics] Run synthetics runner based tests on package.json changes !! (#202995) ## Summary Run synthetics runner based tests on package.json changes !! --- .../pipelines/pull_request/pipeline.ts | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index 638f4d5ed7a8e..ad71f70258a23 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -113,30 +113,42 @@ const getPipeline = (filename: string, removeSteps = true) => { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/fleet_cypress.yml')); } - if (await doAnyChangesMatch([/^x-pack\/plugins\/observability_solution\/exploratory_view/])) { + if ( + (await doAnyChangesMatch([/^x-pack\/plugins\/observability_solution\/exploratory_view/])) || + GITHUB_PR_LABELS.includes('ci:synthetics-runner-suites') + ) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/exploratory_view_plugin.yml')); } if ( - await doAnyChangesMatch([ + (await doAnyChangesMatch([ /^x-pack\/plugins\/observability_solution\/synthetics/, /^x-pack\/plugins\/observability_solution\/exploratory_view/, - ]) + ])) || + GITHUB_PR_LABELS.includes('ci:synthetics-runner-suites') ) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/synthetics_plugin.yml')); pipeline.push(getPipeline('.buildkite/pipelines/pull_request/uptime_plugin.yml')); } if ( - await doAnyChangesMatch([ + (await doAnyChangesMatch([ /^x-pack\/plugins\/observability_solution\/ux/, /^x-pack\/plugins\/observability_solution\/exploratory_view/, - ]) + ])) || + GITHUB_PR_LABELS.includes('ci:synthetics-runner-suites') ) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/ux_plugin_e2e.yml')); } - if (await doAnyChangesMatch([/^x-pack\/plugins\/observability_solution/])) { + if ( + (await doAnyChangesMatch([ + /^x-pack\/plugins\/observability_solution/, + /^package.json/, + /^yarn.lock/, + ])) || + GITHUB_PR_LABELS.includes('ci:synthetics-runner-suites') + ) { pipeline.push(getPipeline('.buildkite/pipelines/pull_request/slo_plugin_e2e.yml')); } From 54ab9913295b18e99488903eee7c0e0925ff35cf Mon Sep 17 00:00:00 2001 From: Marco Antonio Ghiani Date: Thu, 5 Dec 2024 10:23:54 +0100 Subject: [PATCH 070/141] [Logs] Deprecate configuration settings (#201625) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 📓 Summary Closes #200898 These changes deprecate some unused configurations and update the implementation where required in preparation for the Kibana v9 upgrade. Screenshot 2024-11-25 at 12 54 14 --------- Co-authored-by: Marco Antonio Ghiani Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../infra/server/config.ts | 113 ++++++++++++++++++ .../infra/server/index.ts | 4 +- .../framework/kibana_framework_adapter.ts | 3 +- .../infra/server/plugin.ts | 80 +------------ .../infra/tsconfig.json | 2 + .../logs_shared/server/config.ts | 1 + .../server/lib/logs_shared_types.ts | 1 + .../logs_shared/server/plugin.ts | 7 +- .../server/routes/log_views/get_log_view.ts | 3 +- .../server/routes/log_views/index.ts | 2 +- .../public/plugin.ts | 9 +- .../server/config.ts | 3 +- .../application/shared/header_action_menu.tsx | 5 +- .../observability_onboarding/public/plugin.ts | 72 +++++------ .../observability_onboarding/server/config.ts | 36 ++++++ .../observability_onboarding/server/index.ts | 26 +--- .../observability_onboarding/server/plugin.ts | 2 +- .../server/routes/types.ts | 2 +- .../observability_onboarding/tsconfig.json | 3 +- 19 files changed, 208 insertions(+), 166 deletions(-) create mode 100644 x-pack/plugins/observability_solution/infra/server/config.ts create mode 100644 x-pack/plugins/observability_solution/observability_onboarding/server/config.ts diff --git a/x-pack/plugins/observability_solution/infra/server/config.ts b/x-pack/plugins/observability_solution/infra/server/config.ts new file mode 100644 index 0000000000000..3e3d51f42a5d1 --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/server/config.ts @@ -0,0 +1,113 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; + +import { offeringBasedSchema, schema } from '@kbn/config-schema'; +import { PluginConfigDescriptor } from '@kbn/core-plugins-server'; +import { ConfigDeprecation } from '@kbn/config'; +import { InfraConfig } from './types'; +import { publicConfigKeys } from '../common/plugin_config_types'; + +export type { InfraConfig }; + +export const config: PluginConfigDescriptor = { + schema: schema.object({ + enabled: schema.boolean({ defaultValue: true }), + alerting: schema.object({ + inventory_threshold: schema.object({ + group_by_page_size: schema.number({ defaultValue: 5_000 }), + }), + metric_threshold: schema.object({ + group_by_page_size: schema.number({ defaultValue: 10_000 }), + }), + }), + inventory: schema.object({ + compositeSize: schema.number({ defaultValue: 2000 }), + }), + sources: schema.maybe( + schema.object({ + default: schema.maybe( + schema.object({ + fields: schema.maybe( + schema.object({ + message: schema.maybe(schema.arrayOf(schema.string())), + }) + ), + }) + ), + }) + ), + featureFlags: schema.object({ + customThresholdAlertsEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: false }), + serverless: schema.boolean({ defaultValue: false }), + }), + logsUIEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), + metricsExplorerEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), + osqueryEnabled: schema.boolean({ defaultValue: true }), + inventoryThresholdAlertRuleEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: true }), + }), + metricThresholdAlertRuleEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), + logThresholdAlertRuleEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: false }), + }), + alertsAndRulesDropdownEnabled: offeringBasedSchema({ + traditional: schema.boolean({ defaultValue: true }), + serverless: schema.boolean({ defaultValue: true }), + }), + /** + * Depends on optional "profilingDataAccess" and "profiling" + * plugins. Enable both with `xpack.profiling.enabled: true` before + * enabling this feature flag. + */ + profilingEnabled: schema.boolean({ defaultValue: false }), + ruleFormV2Enabled: schema.boolean({ defaultValue: false }), + }), + }), + deprecations: () => [sourceFieldsMessageDeprecation], + exposeToBrowser: publicConfigKeys, +}; + +const sourceFieldsMessageDeprecation: ConfigDeprecation = (settings, fromPath, addDeprecation) => { + const sourceFieldsMessageSetting = settings?.xpack?.infra?.sources?.default?.fields?.message; + + if (sourceFieldsMessageSetting) { + addDeprecation({ + configPath: `${fromPath}.sources.default.fields.message`, + title: i18n.translate('xpack.infra.deprecations.sourcesDefaultFieldsMessage.title', { + defaultMessage: 'The "xpack.infra.sources.default.fields.message" setting is deprecated.', + ignoreTag: true, + }), + message: i18n.translate('xpack.infra.deprecations.sourcesDefaultFieldsMessage.message', { + defaultMessage: + 'Features using this configurations are set to be removed in v9 and this is no longer used.', + }), + level: 'warning', + documentationUrl: `https://www.elastic.co/guide/en/kibana/current/logs-ui-settings-kb.html#general-logs-ui-settings-kb`, + correctiveActions: { + manualSteps: [ + i18n.translate('xpack.infra.deprecations.sourcesDefaultFieldsMessage.manualSteps1', { + defaultMessage: 'Remove "xpack.infra.sources.default.fields.message" from kibana.yml.', + ignoreTag: true, + }), + ], + }, + }); + } +}; diff --git a/x-pack/plugins/observability_solution/infra/server/index.ts b/x-pack/plugins/observability_solution/infra/server/index.ts index 96ac6dc162c24..c381514900a72 100644 --- a/x-pack/plugins/observability_solution/infra/server/index.ts +++ b/x-pack/plugins/observability_solution/infra/server/index.ts @@ -6,11 +6,9 @@ */ import { PluginInitializerContext } from '@kbn/core/server'; -import { config, InfraConfig } from './plugin'; +export { config, type InfraConfig } from './config'; export type { InfraPluginSetup, InfraPluginStart, InfraRequestHandlerContext } from './types'; -export type { InfraConfig }; -export { config }; export async function plugin(context: PluginInitializerContext) { const { InfraServerPlugin } = await import('./plugin'); diff --git a/x-pack/plugins/observability_solution/infra/server/lib/adapters/framework/kibana_framework_adapter.ts b/x-pack/plugins/observability_solution/infra/server/lib/adapters/framework/kibana_framework_adapter.ts index c16dad5445af4..f245214cfa37a 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/adapters/framework/kibana_framework_adapter.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/adapters/framework/kibana_framework_adapter.ts @@ -13,8 +13,7 @@ import { UI_SETTINGS } from '@kbn/data-plugin/server'; import { TimeseriesVisData } from '@kbn/vis-type-timeseries-plugin/server'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import { TSVBMetricModel } from '@kbn/metrics-data-access-plugin/common'; -import { InfraConfig } from '../../../plugin'; -import type { InfraPluginRequestHandlerContext } from '../../../types'; +import type { InfraConfig, InfraPluginRequestHandlerContext } from '../../../types'; import { CallWithRequestParams, InfraDatabaseGetIndicesAliasResponse, diff --git a/x-pack/plugins/observability_solution/infra/server/plugin.ts b/x-pack/plugins/observability_solution/infra/server/plugin.ts index b8becb916a4e3..6008954b63bde 100644 --- a/x-pack/plugins/observability_solution/infra/server/plugin.ts +++ b/x-pack/plugins/observability_solution/infra/server/plugin.ts @@ -6,13 +6,7 @@ */ import { Server } from '@hapi/hapi'; -import { schema, offeringBasedSchema } from '@kbn/config-schema'; -import { - CoreStart, - Plugin, - PluginConfigDescriptor, - PluginInitializerContext, -} from '@kbn/core/server'; +import { CoreStart, Plugin, PluginInitializerContext } from '@kbn/core/server'; import { handleEsError } from '@kbn/es-ui-shared-plugin/server'; import { i18n } from '@kbn/i18n'; import { Logger } from '@kbn/logging'; @@ -26,7 +20,6 @@ import { import { type AlertsLocatorParams, alertsLocatorID } from '@kbn/observability-plugin/common'; import { mapValues } from 'lodash'; import { LOGS_FEATURE_ID, METRICS_FEATURE_ID } from '../common/constants'; -import { publicConfigKeys } from '../common/plugin_config_types'; import { LOGS_FEATURE, METRICS_FEATURE } from './features'; import { registerRoutes } from './infra_server'; import { InfraServerPluginSetupDeps, InfraServerPluginStartDeps } from './lib/adapters/framework'; @@ -61,77 +54,6 @@ import { UsageCollector } from './usage/usage_collector'; import { mapSourceToLogView } from './utils/map_source_to_log_view'; import { uiSettings } from '../common/ui_settings'; -export const config: PluginConfigDescriptor = { - schema: schema.object({ - enabled: schema.boolean({ defaultValue: true }), - alerting: schema.object({ - inventory_threshold: schema.object({ - group_by_page_size: schema.number({ defaultValue: 5_000 }), - }), - metric_threshold: schema.object({ - group_by_page_size: schema.number({ defaultValue: 10_000 }), - }), - }), - inventory: schema.object({ - compositeSize: schema.number({ defaultValue: 2000 }), - }), - sources: schema.maybe( - schema.object({ - default: schema.maybe( - schema.object({ - fields: schema.maybe( - schema.object({ - message: schema.maybe(schema.arrayOf(schema.string())), - }) - ), - }) - ), - }) - ), - featureFlags: schema.object({ - customThresholdAlertsEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: false }), - serverless: schema.boolean({ defaultValue: false }), - }), - logsUIEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: false }), - }), - metricsExplorerEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: false }), - }), - osqueryEnabled: schema.boolean({ defaultValue: true }), - inventoryThresholdAlertRuleEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: true }), - }), - metricThresholdAlertRuleEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: false }), - }), - logThresholdAlertRuleEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: false }), - }), - alertsAndRulesDropdownEnabled: offeringBasedSchema({ - traditional: schema.boolean({ defaultValue: true }), - serverless: schema.boolean({ defaultValue: true }), - }), - /** - * Depends on optional "profilingDataAccess" and "profiling" - * plugins. Enable both with `xpack.profiling.enabled: true` before - * enabling this feature flag. - */ - profilingEnabled: schema.boolean({ defaultValue: false }), - ruleFormV2Enabled: schema.boolean({ defaultValue: false }), - }), - }), - exposeToBrowser: publicConfigKeys, -}; - -export type { InfraConfig }; - export interface KbnServer extends Server { usage: any; } diff --git a/x-pack/plugins/observability_solution/infra/tsconfig.json b/x-pack/plugins/observability_solution/infra/tsconfig.json index 1e130261d5346..f927926a00df6 100644 --- a/x-pack/plugins/observability_solution/infra/tsconfig.json +++ b/x-pack/plugins/observability_solution/infra/tsconfig.json @@ -117,6 +117,8 @@ "@kbn/entities-schema", "@kbn/zod", "@kbn/observability-utils-server", + "@kbn/core-plugins-server", + "@kbn/config", "@kbn/observability-utils-common" ], "exclude": ["target/**/*"] diff --git a/x-pack/plugins/observability_solution/logs_shared/server/config.ts b/x-pack/plugins/observability_solution/logs_shared/server/config.ts index c144b8422826f..9dff5723e7633 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/config.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/config.ts @@ -26,4 +26,5 @@ export const configSchema = schema.object({ export const config: PluginConfigDescriptor = { schema: configSchema, + deprecations: ({ unused }) => [unused('savedObjects.logView.enabled', { level: 'warning' })], }; diff --git a/x-pack/plugins/observability_solution/logs_shared/server/lib/logs_shared_types.ts b/x-pack/plugins/observability_solution/logs_shared/server/lib/logs_shared_types.ts index d2108bdd6ce9e..4f368c4f64e46 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/lib/logs_shared_types.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/lib/logs_shared_types.ts @@ -23,4 +23,5 @@ export interface LogsSharedBackendLibs extends LogsSharedDomainLibs { getStartServices: LogsSharedPluginStartServicesAccessor; getUsageCollector: () => UsageCollector; logger: Logger; + isServerless: boolean; } diff --git a/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts b/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts index d1f6399104fc2..a0a29cebee9b5 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/plugin.ts @@ -42,7 +42,7 @@ export class LogsSharedPlugin private logViews: LogViewsService; private usageCollector: UsageCollector; - constructor(context: PluginInitializerContext) { + constructor(private readonly context: PluginInitializerContext) { this.config = context.config.get(); this.logger = context.logger.get(); this.usageCollector = {}; @@ -51,11 +51,13 @@ export class LogsSharedPlugin } public setup(core: LogsSharedPluginCoreSetup, plugins: LogsSharedServerPluginSetupDeps) { + const isServerless = this.context.env.packageInfo.buildFlavor === 'serverless'; + const framework = new KibanaFramework(core, plugins); const logViews = this.logViews.setup(); - if (this.config.savedObjects.logView.enabled) { + if (!isServerless) { // Conditionally register log view saved objects core.savedObjects.registerType(logViewSavedObjectType); } else { @@ -78,6 +80,7 @@ export class LogsSharedPlugin getStartServices: () => core.getStartServices(), getUsageCollector: () => this.usageCollector, logger: this.logger, + isServerless, }; // Register server side APIs diff --git a/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/get_log_view.ts b/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/get_log_view.ts index 4e46a06bcfe3d..9370c18243b51 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/get_log_view.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/get_log_view.ts @@ -14,6 +14,7 @@ export const initGetLogViewRoute = ({ config, framework, getStartServices, + isServerless, }: LogsSharedBackendLibs) => { framework .registerVersionedRoute({ @@ -41,7 +42,7 @@ export const initGetLogViewRoute = ({ * - if the log view saved object is correctly registered, perform a lookup for retrieving it * - else, skip the saved object lookup and immediately get the internal log view if exists. */ - const logView = config.savedObjects.logView.enabled + const logView = !isServerless ? await logViewsClient.getLogView(logViewId) : await logViewsClient.getInternalLogView(logViewId); diff --git a/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/index.ts b/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/index.ts index 42c23637fa1b7..4bcaa8d53ad0a 100644 --- a/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/index.ts +++ b/x-pack/plugins/observability_solution/logs_shared/server/routes/log_views/index.ts @@ -12,7 +12,7 @@ export const initLogViewRoutes = (libs: LogsSharedBackendLibs) => { initGetLogViewRoute(libs); // Register the log view update endpoint only when the Saved object is correctly registered - if (libs.config.savedObjects.logView.enabled) { + if (!libs.isServerless) { initPutLogViewRoute(libs); } }; diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts index 2e6ab0aeeaa0f..843f21b48ad47 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/public/plugin.ts @@ -36,13 +36,10 @@ import type { export class ObservabilityLogsExplorerPlugin implements Plugin { - private config: ObservabilityLogsExplorerConfig; private locators?: ObservabilityLogsExplorerLocators; private appStateUpdater = new BehaviorSubject(() => ({})); - constructor(context: PluginInitializerContext) { - this.config = context.config.get(); - } + constructor(context: PluginInitializerContext) {} public setup( core: CoreSetup, @@ -56,9 +53,7 @@ export class ObservabilityLogsExplorerPlugin title: logsExplorerAppTitle, category: DEFAULT_APP_CATEGORIES.observability, euiIconType: 'logoLogging', - visibleIn: this.config.navigation.showAppLink - ? ['globalSearch', 'sideNav'] - : ['globalSearch'], + visibleIn: ['globalSearch'], keywords: ['logs', 'log', 'explorer', 'logs explorer'], updater$: this.appStateUpdater, mount: async (appMountParams: ObservabilityLogsExplorerAppMountParameters) => { diff --git a/x-pack/plugins/observability_solution/observability_logs_explorer/server/config.ts b/x-pack/plugins/observability_solution/observability_logs_explorer/server/config.ts index aa89b9aa273f1..bab368c0eb65c 100644 --- a/x-pack/plugins/observability_solution/observability_logs_explorer/server/config.ts +++ b/x-pack/plugins/observability_solution/observability_logs_explorer/server/config.ts @@ -25,7 +25,7 @@ export const configSchema = schema.object({ export const config: PluginConfigDescriptor = { schema: configSchema, - deprecations: ({ renameFromRoot }) => [ + deprecations: ({ renameFromRoot, unused }) => [ renameFromRoot( 'xpack.discoverLogExplorer.featureFlags.deepLinkVisible', 'xpack.observabilityLogsExplorer.navigation.showAppLink', @@ -41,6 +41,7 @@ export const config: PluginConfigDescriptor = { 'xpack.observabilityLogsExplorer.enabled', { level: 'warning' } ), + unused('navigation.showAppLink', { level: 'warning' }), ], exposeToBrowser: { navigation: { diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/shared/header_action_menu.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/shared/header_action_menu.tsx index 1864b8ced7f8b..22af649a635a5 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/shared/header_action_menu.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/shared/header_action_menu.tsx @@ -22,15 +22,14 @@ interface Props { export function ObservabilityOnboardingHeaderActionMenu({ setHeaderActionMenu, theme$ }: Props) { const { - services: { config }, + services: { context }, } = useKibana(); const location = useLocation(); const normalizedPathname = location.pathname.replace(/\/$/, ''); const isRootPage = normalizedPathname === ''; - const isServerless = config.serverless.enabled; - if (!isServerless && !isRootPage) { + if (!context.isServerless && !isRootPage) { return ( (); - const { - ui: { enabled: isObservabilityOnboardingUiEnabled }, - } = config; const isServerlessBuild = this.ctx.env.packageInfo.buildFlavor === 'serverless'; const isDevEnvironment = this.ctx.env.mode.dev; const pluginSetupDeps = plugins; - // set xpack.observability_onboarding.ui.enabled: true - // and go to /app/observabilityOnboarding - if (isObservabilityOnboardingUiEnabled) { - core.application.register({ - id: PLUGIN_ID, - title: 'Observability Onboarding', - order: 8500, - euiIconType: 'logoObservability', - category: DEFAULT_APP_CATEGORIES.observability, - keywords: [], - async mount(appMountParameters: AppMountParameters) { - // Load application bundle and Get start service - const [{ renderApp }, [coreStart, corePlugins]] = await Promise.all([ - import('./application/app'), - core.getStartServices(), - ]); + core.application.register({ + id: PLUGIN_ID, + title: 'Observability Onboarding', + order: 8500, + euiIconType: 'logoObservability', + category: DEFAULT_APP_CATEGORIES.observability, + keywords: [], + async mount(appMountParameters: AppMountParameters) { + // Load application bundle and Get start service + const [{ renderApp }, [coreStart, corePlugins]] = await Promise.all([ + import('./application/app'), + core.getStartServices(), + ]); - const { createCallApi } = await import('./services/rest/create_call_api'); + const { createCallApi } = await import('./services/rest/create_call_api'); - createCallApi(core); + createCallApi(core); - return renderApp({ - core: coreStart, - deps: pluginSetupDeps, - appMountParameters, - corePlugins: corePlugins as ObservabilityOnboardingPluginStartDeps, - config, - context: { - isDev: isDevEnvironment, - isCloud: Boolean(pluginSetupDeps.cloud?.isCloudEnabled), - isServerless: - Boolean(pluginSetupDeps.cloud?.isServerlessEnabled) || isServerlessBuild, - stackVersion, - cloudServiceProvider: pluginSetupDeps.cloud?.csp, - }, - }); - }, - visibleIn: [], - }); - } + return renderApp({ + core: coreStart, + deps: pluginSetupDeps, + appMountParameters, + corePlugins: corePlugins as ObservabilityOnboardingPluginStartDeps, + config, + context: { + isDev: isDevEnvironment, + isCloud: Boolean(pluginSetupDeps.cloud?.isCloudEnabled), + isServerless: Boolean(pluginSetupDeps.cloud?.isServerlessEnabled) || isServerlessBuild, + stackVersion, + cloudServiceProvider: pluginSetupDeps.cloud?.csp, + }, + }); + }, + visibleIn: [], + }); this.locators = { onboarding: plugins.share.url.locators.create(new ObservabilityOnboardingLocatorDefinition()), diff --git a/x-pack/plugins/observability_solution/observability_onboarding/server/config.ts b/x-pack/plugins/observability_solution/observability_onboarding/server/config.ts new file mode 100644 index 0000000000000..dcbc070e29047 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_onboarding/server/config.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { TypeOf, offeringBasedSchema, schema } from '@kbn/config-schema'; +import { PluginConfigDescriptor } from '@kbn/core-plugins-server'; + +const configSchema = schema.object({ + ui: schema.object({ + enabled: schema.boolean({ defaultValue: true }), + }), + serverless: schema.object({ + enabled: offeringBasedSchema({ + serverless: schema.literal(true), + options: { defaultValue: schema.contextRef('serverless') }, + }), + }), +}); + +export type ObservabilityOnboardingConfig = TypeOf; + +// plugin config +export const config: PluginConfigDescriptor = { + exposeToBrowser: { + ui: true, + serverless: true, + }, + schema: configSchema, + deprecations: ({ unused }) => [ + unused('ui.enabled', { level: 'warning' }), + unused('serverless.enabled', { level: 'warning' }), + ], +}; diff --git a/x-pack/plugins/observability_solution/observability_onboarding/server/index.ts b/x-pack/plugins/observability_solution/observability_onboarding/server/index.ts index a985045d68d7a..b8675eadb3f9a 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/server/index.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/server/index.ts @@ -5,31 +5,9 @@ * 2.0. */ -import { offeringBasedSchema, schema, TypeOf } from '@kbn/config-schema'; -import { PluginConfigDescriptor, PluginInitializerContext } from '@kbn/core/server'; +import { PluginInitializerContext } from '@kbn/core/server'; -const configSchema = schema.object({ - ui: schema.object({ - enabled: schema.boolean({ defaultValue: true }), - }), - serverless: schema.object({ - enabled: offeringBasedSchema({ - serverless: schema.literal(true), - options: { defaultValue: schema.contextRef('serverless') }, - }), - }), -}); - -export type ObservabilityOnboardingConfig = TypeOf; - -// plugin config -export const config: PluginConfigDescriptor = { - exposeToBrowser: { - ui: true, - serverless: true, - }, - schema: configSchema, -}; +export { config, type ObservabilityOnboardingConfig } from './config'; export async function plugin(initializerContext: PluginInitializerContext) { const { ObservabilityOnboardingPlugin } = await import('./plugin'); diff --git a/x-pack/plugins/observability_solution/observability_onboarding/server/plugin.ts b/x-pack/plugins/observability_solution/observability_onboarding/server/plugin.ts index 30aaaf2588388..60b33eb3dd601 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/server/plugin.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/server/plugin.ts @@ -23,9 +23,9 @@ import { ObservabilityOnboardingPluginStart, ObservabilityOnboardingPluginStartDependencies, } from './types'; -import { ObservabilityOnboardingConfig } from '.'; import { observabilityOnboardingFlow } from './saved_objects/observability_onboarding_status'; import { EsLegacyConfigService } from './services/es_legacy_config_service'; +import { ObservabilityOnboardingConfig } from './config'; export class ObservabilityOnboardingPlugin implements diff --git a/x-pack/plugins/observability_solution/observability_onboarding/server/routes/types.ts b/x-pack/plugins/observability_solution/observability_onboarding/server/routes/types.ts index 689ab14739818..1d30cf05ab255 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/server/routes/types.ts +++ b/x-pack/plugins/observability_solution/observability_onboarding/server/routes/types.ts @@ -13,13 +13,13 @@ import { } from '@kbn/core/server'; import * as t from 'io-ts'; import { ObservabilityOnboardingServerRouteRepository } from '.'; -import { ObservabilityOnboardingConfig } from '..'; import { EsLegacyConfigService } from '../services/es_legacy_config_service'; import { ObservabilityOnboardingPluginSetupDependencies, ObservabilityOnboardingPluginStartDependencies, ObservabilityOnboardingRequestHandlerContext, } from '../types'; +import { ObservabilityOnboardingConfig } from '../config'; export type { ObservabilityOnboardingServerRouteRepository }; diff --git a/x-pack/plugins/observability_solution/observability_onboarding/tsconfig.json b/x-pack/plugins/observability_solution/observability_onboarding/tsconfig.json index 878c501a892cc..3893e1d5c6b57 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/tsconfig.json +++ b/x-pack/plugins/observability_solution/observability_onboarding/tsconfig.json @@ -42,7 +42,8 @@ "@kbn/deeplinks-analytics", "@kbn/custom-integrations-plugin", "@kbn/server-route-repository-utils", - "@kbn/core-application-browser" + "@kbn/core-application-browser", + "@kbn/core-plugins-server" ], "exclude": [ "target/**/*" From 7f804b905c9b393a499ad7f46905d69f8bb009a1 Mon Sep 17 00:00:00 2001 From: Joe McElroy Date: Thu, 5 Dec 2024 10:02:11 +0000 Subject: [PATCH 071/141] [Search] [Onboarding] unskip FTR tests (#202818) ## Summary Updates the API Key specific tests to retry by deleting the api keys and reloading and perform test again. ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [ ] 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 - [ ] 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 was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations. - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../functional/page_objects/svl_api_keys.ts | 18 +++++++++++++++++- .../test_suites/search/elasticsearch_start.ts | 17 +++++++++++++++-- .../test_suites/search/search_index_detail.ts | 16 ++++++++++++++-- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/x-pack/test_serverless/functional/page_objects/svl_api_keys.ts b/x-pack/test_serverless/functional/page_objects/svl_api_keys.ts index 2228967f29155..183a489a41e78 100644 --- a/x-pack/test_serverless/functional/page_objects/svl_api_keys.ts +++ b/x-pack/test_serverless/functional/page_objects/svl_api_keys.ts @@ -6,6 +6,7 @@ */ import expect from '@kbn/expect'; +import { SecurityApiKey } from '@elastic/elasticsearch/lib/api/types'; import { FtrProviderContext } from '../ftr_provider_context'; const APIKEY_MASK = '•'.repeat(60); @@ -27,6 +28,10 @@ export function SvlApiKeysProvider({ getService, getPageObjects }: FtrProviderCo await browser.clearSessionStorage(); }, + async expectAPIKeyExists() { + await testSubjects.existOrFail('apiKeyFormAPIKey', { timeout: 1000 }); + }, + async expectAPIKeyAvailable() { await testSubjects.existOrFail('apiKeyFormAPIKey'); await retry.try(async () => { @@ -88,8 +93,19 @@ export function SvlApiKeysProvider({ getService, getPageObjects }: FtrProviderCo }, async deleteAPIKeys() { + const filterInvalid = (key: SecurityApiKey) => !key.invalidated; + const { api_keys: apiKeys } = await es.security.getApiKey(); - await es.security.invalidateApiKey({ ids: apiKeys.map((key) => key.id) }); + + const validKeys = apiKeys.filter(filterInvalid); + + if (validKeys.length === 0) { + return; + } + + await es.security.invalidateApiKey({ + ids: validKeys.map((key) => key.id), + }); }, async expectCreateApiKeyAction() { diff --git a/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts b/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts index ba370871c07ff..da966b21185c5 100644 --- a/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts +++ b/x-pack/test_serverless/functional/test_suites/search/elasticsearch_start.ts @@ -21,13 +21,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const esDeleteAllIndices = getService('esDeleteAllIndices'); const es = getService('es'); const browser = getService('browser'); + const retry = getService('retry'); const deleteAllTestIndices = async () => { await esDeleteAllIndices(['search-*', 'test-*']); }; - // Failing: See https://github.com/elastic/kibana/issues/200020 - describe.skip('Elasticsearch Start [Onboarding Empty State]', function () { + describe('Elasticsearch Start [Onboarding Empty State]', function () { describe('developer', function () { before(async () => { await pageObjects.svlCommonPage.loginWithRole('developer'); @@ -96,7 +96,20 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it('should show the api key in code view', async () => { await pageObjects.svlSearchElasticsearchStartPage.expectToBeOnStartPage(); await pageObjects.svlSearchElasticsearchStartPage.clickCodeViewButton(); + // sometimes the API key exists in the cluster and its lost in sessionStorage + // if fails we retry to delete the API key and refresh the browser + await retry.try( + async () => { + await pageObjects.svlApiKeys.expectAPIKeyExists(); + }, + async () => { + await pageObjects.svlApiKeys.deleteAPIKeys(); + await browser.refresh(); + await pageObjects.svlSearchElasticsearchStartPage.clickCodeViewButton(); + } + ); await pageObjects.svlApiKeys.expectAPIKeyAvailable(); + const apiKeyUI = await pageObjects.svlApiKeys.getAPIKeyFromUI(); const apiKeySession = await pageObjects.svlApiKeys.getAPIKeyFromSessionStorage(); diff --git a/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts b/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts index 7d47bd732746b..0dda7789b6f93 100644 --- a/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts +++ b/x-pack/test_serverless/functional/test_suites/search/search_index_detail.ts @@ -20,6 +20,8 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { const svlSearchNavigation = getService('svlSearchNavigation'); const es = getService('es'); const security = getService('security'); + const browser = getService('browser'); + const retry = getService('retry'); const esDeleteAllIndices = getService('esDeleteAllIndices'); const indexName = 'test-my-index'; @@ -81,11 +83,21 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { }); }); - describe.skip('API key details', () => { - // Flaky test related with deleting API keys + describe('API key details', () => { it('should show api key', async () => { await pageObjects.svlApiKeys.deleteAPIKeys(); await svlSearchNavigation.navigateToIndexDetailPage(indexName); + // sometimes the API key exists in the cluster and its lost in sessionStorage + // if fails we retry to delete the API key and refresh the browser + await retry.try( + async () => { + await pageObjects.svlApiKeys.expectAPIKeyExists(); + }, + async () => { + await pageObjects.svlApiKeys.deleteAPIKeys(); + await browser.refresh(); + } + ); await pageObjects.svlApiKeys.expectAPIKeyAvailable(); const apiKey = await pageObjects.svlApiKeys.getAPIKeyFromUI(); await pageObjects.svlSearchIndexDetailPage.expectAPIKeyToBeVisibleInCodeBlock(apiKey); From cf1e4c55155e0f2df0a8b7e3c008c53d8d0daf84 Mon Sep 17 00:00:00 2001 From: Milosz Marcinkowski <38698566+miloszmarcinkowski@users.noreply.github.com> Date: Thu, 5 Dec 2024 11:08:05 +0100 Subject: [PATCH 072/141] [APM] `Time spent by span type` chart rendering problems (#202755) Closes #202343 ## Summary This PR solves the following issues in `Time spent by span type` chart: - limits percentages between 0% and 100% (converts negative values to 0%), before: Screenshot 2024-12-04 at 15 28 18 after: Screenshot 2024-12-04 at 15 30 25 --- - rounds percentage to 8 decimal points to prevent scientific notation in charts (poor readability) before: Screenshot 2024-12-04 at 14 36 54 after: Screenshot 2024-12-04 at 14 35 39 --- .../routes/transactions/breakdown/index.ts | 10 +- .../__snapshots__/breakdown.spec.snap | 294 +++++++++--------- 2 files changed, 155 insertions(+), 149 deletions(-) diff --git a/x-pack/plugins/observability_solution/apm/server/routes/transactions/breakdown/index.ts b/x-pack/plugins/observability_solution/apm/server/routes/transactions/breakdown/index.ts index 73da84fe4e98e..a57d437b242aa 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/transactions/breakdown/index.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/transactions/breakdown/index.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { flatten, orderBy, last } from 'lodash'; +import { flatten, orderBy, last, clamp, round } from 'lodash'; import { rangeQuery, kqlQuery } from '@kbn/observability-plugin/server'; import { ProcessorEvent } from '@kbn/observability-plugin/common'; import { asPercent } from '../../../../common/utils/formatters'; @@ -145,9 +145,15 @@ export async function getTransactionBreakdown({ const type = bucket.key as string; return bucket.subtypes.buckets.map((subBucket) => { + const percentageRaw = + (subBucket.total_self_time_per_subtype.value || 0) / sumAllSelfTimes; + // limit percentage from 0% to 100% and + // round to 8 decimal points (results in 6 decimal points after converting to percentages) to prevent displaying scientific notation in charts + const percentage = round(clamp(percentageRaw, 0, 1), 8); + return { name: (subBucket.key as string) || type, - percentage: (subBucket.total_self_time_per_subtype.value || 0) / sumAllSelfTimes, + percentage, }; }); }) diff --git a/x-pack/test/apm_api_integration/tests/transactions/__snapshots__/breakdown.spec.snap b/x-pack/test/apm_api_integration/tests/transactions/__snapshots__/breakdown.spec.snap index d8e3d13525cc9..68495907b3c7f 100644 --- a/x-pack/test/apm_api_integration/tests/transactions/__snapshots__/breakdown.spec.snap +++ b/x-pack/test/apm_api_integration/tests/transactions/__snapshots__/breakdown.spec.snap @@ -20,39 +20,39 @@ Object { }, Object { "x": 1627973490000, - "y": 0.0833333333333333, + "y": 0.08333333, }, Object { "x": 1627973520000, - "y": 0.628571428571429, + "y": 0.62857143, }, Object { "x": 1627973550000, - "y": 0.733333333333333, + "y": 0.73333333, }, Object { "x": 1627973580000, - "y": 0.490909090909091, + "y": 0.49090909, }, Object { "x": 1627973610000, - "y": 0.135593220338983, + "y": 0.13559322, }, Object { "x": 1627973640000, - "y": 0.692307692307692, + "y": 0.69230769, }, Object { "x": 1627973670000, - "y": 0.097165991902834, + "y": 0.09716599, }, Object { "x": 1627973700000, - "y": 0.303030303030303, + "y": 0.3030303, }, Object { "x": 1627973730000, - "y": 0.153846153846154, + "y": 0.15384615, }, Object { "x": 1627973760000, @@ -60,11 +60,11 @@ Object { }, Object { "x": 1627973790000, - "y": 0.0857142857142857, + "y": 0.08571429, }, Object { "x": 1627973820000, - "y": 0.155172413793103, + "y": 0.15517241, }, Object { "x": 1627973850000, @@ -76,31 +76,31 @@ Object { }, Object { "x": 1627973910000, - "y": 0.142857142857143, + "y": 0.14285714, }, Object { "x": 1627973940000, - "y": 0.0810810810810811, + "y": 0.08108108, }, Object { "x": 1627973970000, - "y": 0.473684210526316, + "y": 0.47368421, }, Object { "x": 1627974000000, - "y": 0.633333333333333, + "y": 0.63333333, }, Object { "x": 1627974030000, - "y": 0.111111111111111, + "y": 0.11111111, }, Object { "x": 1627974060000, - "y": 0.467741935483871, + "y": 0.46774194, }, Object { "x": 1627974090000, - "y": 0.129496402877698, + "y": 0.1294964, }, Object { "x": 1627974120000, @@ -108,19 +108,19 @@ Object { }, Object { "x": 1627974150000, - "y": 0.30188679245283, + "y": 0.30188679, }, Object { "x": 1627974180000, - "y": 0.464285714285714, + "y": 0.46428571, }, Object { "x": 1627974210000, - "y": 0.123674911660777, + "y": 0.12367491, }, Object { "x": 1627974240000, - "y": 0.384615384615385, + "y": 0.38461538, }, Object { "x": 1627974270000, @@ -128,19 +128,19 @@ Object { }, Object { "x": 1627974300000, - "y": 0.222222222222222, + "y": 0.22222222, }, Object { "x": 1627974330000, - "y": 0.00248447204968944, + "y": 0.00248447, }, Object { "x": 1627974360000, - "y": 0.0645161290322581, + "y": 0.06451613, }, Object { "x": 1627974390000, - "y": 0.569444444444444, + "y": 0.56944444, }, Object { "x": 1627974420000, @@ -152,19 +152,19 @@ Object { }, Object { "x": 1627974480000, - "y": 0.143646408839779, + "y": 0.14364641, }, Object { "x": 1627974510000, - "y": 0.298850574712644, + "y": 0.29885057, }, Object { "x": 1627974540000, - "y": 0.111111111111111, + "y": 0.11111111, }, Object { "x": 1627974570000, - "y": 0.267857142857143, + "y": 0.26785714, }, Object { "x": 1627974600000, @@ -172,11 +172,11 @@ Object { }, Object { "x": 1627974630000, - "y": 0.185185185185185, + "y": 0.18518519, }, Object { "x": 1627974660000, - "y": 0.0973451327433628, + "y": 0.09734513, }, Object { "x": 1627974690000, @@ -184,15 +184,15 @@ Object { }, Object { "x": 1627974720000, - "y": 0.480769230769231, + "y": 0.48076923, }, Object { "x": 1627974750000, - "y": 0.383458646616541, + "y": 0.38345865, }, Object { "x": 1627974780000, - "y": 0.153061224489796, + "y": 0.15306122, }, Object { "x": 1627974810000, @@ -200,23 +200,23 @@ Object { }, Object { "x": 1627974840000, - "y": 0.739130434782609, + "y": 0.73913043, }, Object { "x": 1627974870000, - "y": 0.260869565217391, + "y": 0.26086957, }, Object { "x": 1627974900000, - "y": 0.605633802816901, + "y": 0.6056338, }, Object { "x": 1627974930000, - "y": 0.326923076923077, + "y": 0.32692308, }, Object { "x": 1627974960000, - "y": 0.103448275862069, + "y": 0.10344828, }, Object { "x": 1627974990000, @@ -228,19 +228,19 @@ Object { }, Object { "x": 1627975050000, - "y": 0.114285714285714, + "y": 0.11428571, }, Object { "x": 1627975080000, - "y": 0.238636363636364, + "y": 0.23863636, }, Object { "x": 1627975110000, - "y": 0.684210526315789, + "y": 0.68421053, }, Object { "x": 1627975140000, - "y": 0.368421052631579, + "y": 0.36842105, }, Object { "x": 1627975170000, @@ -248,7 +248,7 @@ Object { }, Object { "x": 1627975200000, - "y": 0.235294117647059, + "y": 0.23529412, }, ], "hideLegend": false, @@ -265,7 +265,7 @@ Object { }, Object { "x": 1627973430000, - "y": 0.790322580645161, + "y": 0.79032258, }, Object { "x": 1627973460000, @@ -273,11 +273,11 @@ Object { }, Object { "x": 1627973490000, - "y": 0.876543209876543, + "y": 0.87654321, }, Object { "x": 1627973520000, - "y": 0.114285714285714, + "y": 0.11428571, }, Object { "x": 1627973550000, @@ -285,11 +285,11 @@ Object { }, Object { "x": 1627973580000, - "y": 0.309090909090909, + "y": 0.30909091, }, Object { "x": 1627973610000, - "y": 0.864406779661017, + "y": 0.86440678, }, Object { "x": 1627973640000, @@ -297,15 +297,15 @@ Object { }, Object { "x": 1627973670000, - "y": 0.862348178137652, + "y": 0.86234818, }, Object { "x": 1627973700000, - "y": 0.636363636363636, + "y": 0.63636364, }, Object { "x": 1627973730000, - "y": 0.846153846153846, + "y": 0.84615385, }, Object { "x": 1627973760000, @@ -313,11 +313,11 @@ Object { }, Object { "x": 1627973790000, - "y": 0.914285714285714, + "y": 0.91428571, }, Object { "x": 1627973820000, - "y": 0.844827586206897, + "y": 0.84482759, }, Object { "x": 1627973850000, @@ -329,11 +329,11 @@ Object { }, Object { "x": 1627973910000, - "y": 0.857142857142857, + "y": 0.85714286, }, Object { "x": 1627973940000, - "y": 0.918918918918919, + "y": 0.91891892, }, Object { "x": 1627973970000, @@ -345,15 +345,15 @@ Object { }, Object { "x": 1627974030000, - "y": 0.872222222222222, + "y": 0.87222222, }, Object { "x": 1627974060000, - "y": 0.290322580645161, + "y": 0.29032258, }, Object { "x": 1627974090000, - "y": 0.848920863309353, + "y": 0.84892086, }, Object { "x": 1627974120000, @@ -361,19 +361,19 @@ Object { }, Object { "x": 1627974150000, - "y": 0.613207547169811, + "y": 0.61320755, }, Object { "x": 1627974180000, - "y": 0.339285714285714, + "y": 0.33928571, }, Object { "x": 1627974210000, - "y": 0.787985865724382, + "y": 0.78798587, }, Object { "x": 1627974240000, - "y": 0.557692307692308, + "y": 0.55769231, }, Object { "x": 1627974270000, @@ -381,15 +381,15 @@ Object { }, Object { "x": 1627974300000, - "y": 0.685990338164251, + "y": 0.68599034, }, Object { "x": 1627974330000, - "y": 0.995807453416149, + "y": 0.99580745, }, Object { "x": 1627974360000, - "y": 0.935483870967742, + "y": 0.93548387, }, Object { "x": 1627974390000, @@ -405,15 +405,15 @@ Object { }, Object { "x": 1627974480000, - "y": 0.831491712707182, + "y": 0.83149171, }, Object { "x": 1627974510000, - "y": 0.505747126436782, + "y": 0.50574713, }, Object { "x": 1627974540000, - "y": 0.888888888888889, + "y": 0.88888889, }, Object { "x": 1627974570000, @@ -425,11 +425,11 @@ Object { }, Object { "x": 1627974630000, - "y": 0.71957671957672, + "y": 0.71957672, }, Object { "x": 1627974660000, - "y": 0.867256637168142, + "y": 0.86725664, }, Object { "x": 1627974690000, @@ -437,15 +437,15 @@ Object { }, Object { "x": 1627974720000, - "y": 0.288461538461538, + "y": 0.28846154, }, Object { "x": 1627974750000, - "y": 0.406015037593985, + "y": 0.40601504, }, Object { "x": 1627974780000, - "y": 0.775510204081633, + "y": 0.7755102, }, Object { "x": 1627974810000, @@ -457,7 +457,7 @@ Object { }, Object { "x": 1627974870000, - "y": 0.623188405797101, + "y": 0.62318841, }, Object { "x": 1627974900000, @@ -465,11 +465,11 @@ Object { }, Object { "x": 1627974930000, - "y": 0.423076923076923, + "y": 0.42307692, }, Object { "x": 1627974960000, - "y": 0.896551724137931, + "y": 0.89655172, }, Object { "x": 1627974990000, @@ -481,11 +481,11 @@ Object { }, Object { "x": 1627975050000, - "y": 0.885714285714286, + "y": 0.88571429, }, Object { "x": 1627975080000, - "y": 0.681818181818182, + "y": 0.68181818, }, Object { "x": 1627975110000, @@ -493,7 +493,7 @@ Object { }, Object { "x": 1627975140000, - "y": 0.456140350877193, + "y": 0.45614035, }, Object { "x": 1627975170000, @@ -501,7 +501,7 @@ Object { }, Object { "x": 1627975200000, - "y": 0.541176470588235, + "y": 0.54117647, }, ], "hideLegend": false, @@ -518,7 +518,7 @@ Object { }, Object { "x": 1627973430000, - "y": 0.0806451612903226, + "y": 0.08064516, }, Object { "x": 1627973460000, @@ -526,19 +526,19 @@ Object { }, Object { "x": 1627973490000, - "y": 0.0277777777777778, + "y": 0.02777778, }, Object { "x": 1627973520000, - "y": 0.171428571428571, + "y": 0.17142857, }, Object { "x": 1627973550000, - "y": 0.266666666666667, + "y": 0.26666667, }, Object { "x": 1627973580000, - "y": 0.181818181818182, + "y": 0.18181818, }, Object { "x": 1627973610000, @@ -546,15 +546,15 @@ Object { }, Object { "x": 1627973640000, - "y": 0.307692307692308, + "y": 0.30769231, }, Object { "x": 1627973670000, - "y": 0.0364372469635627, + "y": 0.03643725, }, Object { "x": 1627973700000, - "y": 0.0454545454545455, + "y": 0.04545455, }, Object { "x": 1627973730000, @@ -562,7 +562,7 @@ Object { }, Object { "x": 1627973760000, - "y": 0.0416666666666667, + "y": 0.04166667, }, Object { "x": 1627973790000, @@ -590,7 +590,7 @@ Object { }, Object { "x": 1627973970000, - "y": 0.526315789473684, + "y": 0.52631579, }, Object { "x": 1627974000000, @@ -598,15 +598,15 @@ Object { }, Object { "x": 1627974030000, - "y": 0.0166666666666667, + "y": 0.01666667, }, Object { "x": 1627974060000, - "y": 0.129032258064516, + "y": 0.12903226, }, Object { "x": 1627974090000, - "y": 0.0143884892086331, + "y": 0.01438849, }, Object { "x": 1627974120000, @@ -614,19 +614,19 @@ Object { }, Object { "x": 1627974150000, - "y": 0.0471698113207547, + "y": 0.04716981, }, Object { "x": 1627974180000, - "y": 0.160714285714286, + "y": 0.16071429, }, Object { "x": 1627974210000, - "y": 0.0565371024734982, + "y": 0.0565371, }, Object { "x": 1627974240000, - "y": 0.0384615384615385, + "y": 0.03846154, }, Object { "x": 1627974270000, @@ -634,11 +634,11 @@ Object { }, Object { "x": 1627974300000, - "y": 0.0579710144927536, + "y": 0.05797101, }, Object { "x": 1627974330000, - "y": 0.00108695652173913, + "y": 0.00108696, }, Object { "x": 1627974360000, @@ -646,7 +646,7 @@ Object { }, Object { "x": 1627974390000, - "y": 0.263888888888889, + "y": 0.26388889, }, Object { "x": 1627974420000, @@ -658,11 +658,11 @@ Object { }, Object { "x": 1627974480000, - "y": 0.0193370165745856, + "y": 0.01933702, }, Object { "x": 1627974510000, - "y": 0.183908045977011, + "y": 0.18390805, }, Object { "x": 1627974540000, @@ -670,7 +670,7 @@ Object { }, Object { "x": 1627974570000, - "y": 0.0357142857142857, + "y": 0.03571429, }, Object { "x": 1627974600000, @@ -678,11 +678,11 @@ Object { }, Object { "x": 1627974630000, - "y": 0.0793650793650794, + "y": 0.07936508, }, Object { "x": 1627974660000, - "y": 0.0265486725663717, + "y": 0.02654867, }, Object { "x": 1627974690000, @@ -690,15 +690,15 @@ Object { }, Object { "x": 1627974720000, - "y": 0.192307692307692, + "y": 0.19230769, }, Object { "x": 1627974750000, - "y": 0.150375939849624, + "y": 0.15037594, }, Object { "x": 1627974780000, - "y": 0.0561224489795918, + "y": 0.05612245, }, Object { "x": 1627974810000, @@ -706,15 +706,15 @@ Object { }, Object { "x": 1627974840000, - "y": 0.217391304347826, + "y": 0.2173913, }, Object { "x": 1627974870000, - "y": 0.115942028985507, + "y": 0.11594203, }, Object { "x": 1627974900000, - "y": 0.380281690140845, + "y": 0.38028169, }, Object { "x": 1627974930000, @@ -738,15 +738,15 @@ Object { }, Object { "x": 1627975080000, - "y": 0.0738636363636364, + "y": 0.07386364, }, Object { "x": 1627975110000, - "y": 0.157894736842105, + "y": 0.15789474, }, Object { "x": 1627975140000, - "y": 0.175438596491228, + "y": 0.1754386, }, Object { "x": 1627975170000, @@ -754,7 +754,7 @@ Object { }, Object { "x": 1627975200000, - "y": 0.211764705882353, + "y": 0.21176471, }, ], "hideLegend": false, @@ -771,7 +771,7 @@ Object { }, Object { "x": 1627973430000, - "y": 0.00403225806451613, + "y": 0.00403226, }, Object { "x": 1627973460000, @@ -779,11 +779,11 @@ Object { }, Object { "x": 1627973490000, - "y": 0.0123456790123457, + "y": 0.01234568, }, Object { "x": 1627973520000, - "y": 0.0857142857142857, + "y": 0.08571429, }, Object { "x": 1627973550000, @@ -791,7 +791,7 @@ Object { }, Object { "x": 1627973580000, - "y": 0.0181818181818182, + "y": 0.01818182, }, Object { "x": 1627973610000, @@ -803,11 +803,11 @@ Object { }, Object { "x": 1627973670000, - "y": 0.00404858299595142, + "y": 0.00404858, }, Object { "x": 1627973700000, - "y": 0.0151515151515152, + "y": 0.01515152, }, Object { "x": 1627973730000, @@ -815,7 +815,7 @@ Object { }, Object { "x": 1627973760000, - "y": 0.00520833333333333, + "y": 0.00520833, }, Object { "x": 1627973790000, @@ -847,7 +847,7 @@ Object { }, Object { "x": 1627974000000, - "y": 0.0166666666666667, + "y": 0.01666667, }, Object { "x": 1627974030000, @@ -855,11 +855,11 @@ Object { }, Object { "x": 1627974060000, - "y": 0.112903225806452, + "y": 0.11290323, }, Object { "x": 1627974090000, - "y": 0.00719424460431655, + "y": 0.00719424, }, Object { "x": 1627974120000, @@ -867,19 +867,19 @@ Object { }, Object { "x": 1627974150000, - "y": 0.0377358490566038, + "y": 0.03773585, }, Object { "x": 1627974180000, - "y": 0.0357142857142857, + "y": 0.03571429, }, Object { "x": 1627974210000, - "y": 0.0318021201413428, + "y": 0.03180212, }, Object { "x": 1627974240000, - "y": 0.0192307692307692, + "y": 0.01923077, }, Object { "x": 1627974270000, @@ -887,11 +887,11 @@ Object { }, Object { "x": 1627974300000, - "y": 0.0338164251207729, + "y": 0.03381643, }, Object { "x": 1627974330000, - "y": 0.00062111801242236, + "y": 0.00062112, }, Object { "x": 1627974360000, @@ -899,7 +899,7 @@ Object { }, Object { "x": 1627974390000, - "y": 0.0416666666666667, + "y": 0.04166667, }, Object { "x": 1627974420000, @@ -911,11 +911,11 @@ Object { }, Object { "x": 1627974480000, - "y": 0.00552486187845304, + "y": 0.00552486, }, Object { "x": 1627974510000, - "y": 0.0114942528735632, + "y": 0.01149425, }, Object { "x": 1627974540000, @@ -923,7 +923,7 @@ Object { }, Object { "x": 1627974570000, - "y": 0.0714285714285714, + "y": 0.07142857, }, Object { "x": 1627974600000, @@ -931,11 +931,11 @@ Object { }, Object { "x": 1627974630000, - "y": 0.0158730158730159, + "y": 0.01587302, }, Object { "x": 1627974660000, - "y": 0.00884955752212389, + "y": 0.00884956, }, Object { "x": 1627974690000, @@ -943,15 +943,15 @@ Object { }, Object { "x": 1627974720000, - "y": 0.0384615384615385, + "y": 0.03846154, }, Object { "x": 1627974750000, - "y": 0.0601503759398496, + "y": 0.06015038, }, Object { "x": 1627974780000, - "y": 0.0153061224489796, + "y": 0.01530612, }, Object { "x": 1627974810000, @@ -959,7 +959,7 @@ Object { }, Object { "x": 1627974840000, - "y": 0.0434782608695652, + "y": 0.04347826, }, Object { "x": 1627974870000, @@ -967,7 +967,7 @@ Object { }, Object { "x": 1627974900000, - "y": 0.0140845070422535, + "y": 0.01408451, }, Object { "x": 1627974930000, @@ -991,11 +991,11 @@ Object { }, Object { "x": 1627975080000, - "y": 0.00568181818181818, + "y": 0.00568182, }, Object { "x": 1627975110000, - "y": 0.157894736842105, + "y": 0.15789474, }, Object { "x": 1627975140000, @@ -1007,7 +1007,7 @@ Object { }, Object { "x": 1627975200000, - "y": 0.0117647058823529, + "y": 0.01176471, }, ], "hideLegend": false, From 667652e19b78584031c3e72793e40ffccb50509c Mon Sep 17 00:00:00 2001 From: Marco Antonio Ghiani Date: Thu, 5 Dec 2024 11:49:52 +0100 Subject: [PATCH 073/141] [Logs] Deprecate advanced settings for v9.0.0 (#201102) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 📓 Summary Closes #200900 As part of the readiness requirements to upgrade Kibana to v9.0.0, this work deprecates some advanced settings that will be removed. Screenshot 2024-11-21 at 11 15 25 Co-authored-by: Marco Antonio Ghiani --- .../logs_explorer/common/ui_settings.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/x-pack/plugins/observability_solution/logs_explorer/common/ui_settings.ts b/x-pack/plugins/observability_solution/logs_explorer/common/ui_settings.ts index 65983c3993488..cc9f7f76a3765 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/common/ui_settings.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/common/ui_settings.ts @@ -25,6 +25,13 @@ export const uiSettings: Record = { defaultMessage: 'A list of base patterns to match and explore data views in Logs Explorer. Remote clusters will be automatically matched for the provided base patterns.', }), + deprecation: { + message: i18n.translate('xpack.logsExplorer.allowedDataViewsDeprecationWarning', { + defaultMessage: + 'Logs Explorer is deprecated, and this setting will be removed in Kibana 9.0.', + }), + docLinksKey: 'generalSettings', + }, type: 'array', schema: schema.arrayOf(schema.string()), requiresPageReload: true, From 1c12a5723c001fa1ad5636df5ec465a4635f3cb4 Mon Sep 17 00:00:00 2001 From: Antonio Date: Thu, 5 Dec 2024 12:20:37 +0100 Subject: [PATCH 074/141] [ResponseOps][Rules] Hide the "Role visibility" dropdown in the new rule form in serverless (#200727) Fixes #199642 ## Summary ~~This PR hides the role visibility dropdown in the new rule form when in serverless.~~ This PR hides the role visibility dropdown in the new rule form **when only one consumer is available**. ## How to test 1. Run Kibana security serverless and confirm the rules in stack management do not have the role visibility dropdown. 2. Please also make sure that the drop-down still shows when needed(outside of serverless). --- .../rule_definition/rule_definition.test.tsx | 28 +++++++++++++++++++ .../src/rule_definition/rule_definition.tsx | 19 +++++++------ 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/packages/response-ops/rule_form/src/rule_definition/rule_definition.test.tsx b/packages/response-ops/rule_form/src/rule_definition/rule_definition.test.tsx index ca01bbc484570..9ee39ca93f1be 100644 --- a/packages/response-ops/rule_form/src/rule_definition/rule_definition.test.tsx +++ b/packages/response-ops/rule_form/src/rule_definition/rule_definition.test.tsx @@ -236,6 +236,34 @@ describe('Rule Definition', () => { expect(screen.queryByTestId('ruleConsumerSelection')).not.toBeInTheDocument(); }); + test('Hides consumer selection if there are irrelevant consumers and only 1 consumer to select', () => { + useRuleFormState.mockReturnValue({ + plugins, + formData: { + id: 'test-id', + params: {}, + schedule: { + interval: '1m', + }, + alertDelay: { + active: 5, + }, + notifyWhen: null, + consumer: 'stackAlerts', + ruleTypeId: '.es-query', + }, + selectedRuleType: ruleType, + selectedRuleTypeModel: ruleModel, + availableRuleTypes: [ruleType], + canShowConsumerSelect: true, + validConsumers: ['logs', 'observability'], + }); + + render(); + + expect(screen.queryByTestId('ruleConsumerSelection')).not.toBeInTheDocument(); + }); + test('Hides consumer selection if valid consumers contain observability', () => { useRuleFormState.mockReturnValue({ plugins, diff --git a/packages/response-ops/rule_form/src/rule_definition/rule_definition.tsx b/packages/response-ops/rule_form/src/rule_definition/rule_definition.tsx index eaa608ab42434..5cedd0d117527 100644 --- a/packages/response-ops/rule_form/src/rule_definition/rule_definition.tsx +++ b/packages/response-ops/rule_form/src/rule_definition/rule_definition.tsx @@ -30,7 +30,6 @@ import { RuleSettingsFlappingTitleTooltip, } from '@kbn/alerts-ui-shared/lib'; import { EuiThemeProvider } from '@kbn/kibana-react-plugin/common'; -import { AlertConsumers } from '@kbn/rule-data-utils'; import React, { Suspense, useCallback, useEffect, useMemo, useState } from 'react'; import { ALERTING_FEATURE_ID, MULTI_CONSUMER_RULE_TYPE_IDS } from '../constants'; import { IS_RULE_SPECIFIC_FLAPPING_ENABLED } from '../constants/rule_flapping'; @@ -41,6 +40,7 @@ import { ALERT_DELAY_HELP_TEXT, ALERT_DELAY_TITLE, ALERT_FLAPPING_DETECTION_DESCRIPTION, + FEATURE_NAME_MAP, ALERT_FLAPPING_DETECTION_TITLE, DOC_LINK_TITLE, LOADING_RULE_TYPE_PARAMS_TITLE, @@ -116,15 +116,18 @@ export const RuleDefinition = () => { if (!canShowConsumerSelection) { return false; } - if (!authorizedConsumers.length) { - return false; - } - if ( - authorizedConsumers.length <= 1 || - authorizedConsumers.includes(AlertConsumers.OBSERVABILITY) - ) { + + /* + * This will filter out values like 'alerts' and 'observability' that will not be displayed + * in the drop down. It will allow us to hide the consumer select when there is only one + * selectable value. + */ + const authorizedValidConsumers = authorizedConsumers.filter((c) => c in FEATURE_NAME_MAP); + + if (authorizedValidConsumers.length <= 1) { return false; } + return !!(ruleTypeId && MULTI_CONSUMER_RULE_TYPE_IDS.includes(ruleTypeId)); }, [ruleTypeId, authorizedConsumers, canShowConsumerSelection]); From 729c6bacf7a6a5ac04b5be9ec9b9039cc56ba1c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Luis=20Gonz=C3=A1lez?= Date: Thu, 5 Dec 2024 12:32:33 +0100 Subject: [PATCH 075/141] [Search] Web crawler name consistency (#202738) ## Summary This PR fixes the areas where we display the Web Crawler naming bearing in mind these agreements : - We should be capitalizing when referring to the product name: Elastic Web Crawler / Web Crawler /Elastic Open Web Crawler - We can use lower case when referring to the feature or concept of web crawler( crawler in short): "Use the web crawler to ..." ESS: ![CleanShot 2024-12-03 at 15 19 19@2x](https://github.com/user-attachments/assets/d5cba886-09b3-4c34-b6e5-565cb67b9e08) ES3: ![CleanShot 2024-12-03 at 15 19 56@2x](https://github.com/user-attachments/assets/2a6b6a8a-697c-4001-96d8-c826b6769836) Notes: Also fixing buttons that take users to the Open Web Crawler repo to open the links in a new tab and don't lose the product focus. --- .../components/connectors/connectors.tsx | 4 ++-- .../components/connectors/crawler_empty_state.tsx | 1 + .../components/new_index/new_search_index_template.tsx | 2 +- .../applications/shared/layout/classic_nav_helpers.test.ts | 2 +- .../public/applications/shared/layout/nav.test.tsx | 4 ++-- x-pack/plugins/enterprise_search/public/plugin.ts | 2 +- .../search_navigation/public/classic_navigation.test.ts | 2 +- x-pack/plugins/serverless_search/common/i18n_string.ts | 2 +- .../components/web_crawlers/empty_web_crawlers_prompt.tsx | 1 + .../application/components/web_crawlers_elastic_managed.tsx | 2 +- .../public/application/components/web_crawlers_overview.tsx | 2 +- x-pack/test/functional_search/tests/classic_navigation.ts | 4 ++-- x-pack/test/functional_search/tests/solution_navigation.ts | 4 ++-- .../functional/test_suites/search/navigation.ts | 2 +- 14 files changed, 18 insertions(+), 16 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/connectors.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/connectors.tsx index ed6ff07c0cafd..47f2226fe976e 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/connectors.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/connectors.tsx @@ -53,7 +53,7 @@ export const connectorsBreadcrumbs = [ export const crawlersBreadcrumbs = [ i18n.translate('xpack.enterpriseSearch.content.crawlers.breadcrumb', { - defaultMessage: 'Web crawlers', + defaultMessage: 'Web Crawlers', }), ]; @@ -93,7 +93,7 @@ export const Connectors: React.FC = ({ isCrawler }) => { defaultMessage: 'Elasticsearch connectors', }) : i18n.translate('xpack.enterpriseSearch.crawlers.title', { - defaultMessage: 'Elasticsearch web crawlers', + defaultMessage: 'Elastic Web Crawler', }), rightSideGroupProps: { gutterSize: 's', diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/crawler_empty_state.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/crawler_empty_state.tsx index 6be21dd8c63a7..2dc97fb86c04f 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/crawler_empty_state.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/crawler_empty_state.tsx @@ -49,6 +49,7 @@ export const CrawlerEmptyState: React.FC = () => { fill iconType={GithubIcon} href={'https://github.com/elastic/crawler'} + target="_blank" > {i18n.translate( 'xpack.enterpriseSearch.crawlerEmptyState.openSourceCrawlerButtonLabel', diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_template.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_template.tsx index 25baabb388575..211738b43f25d 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_template.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/new_index/new_search_index_template.tsx @@ -289,7 +289,7 @@ export const NewSearchIndexTemplate: React.FC = ({ {i18n.translate( 'xpack.enterpriseSearch.content.newIndex.newSearchIndexTemplate.learnMoreCrawler.linkText', { - defaultMessage: 'Learn more about the Elastic web crawler', + defaultMessage: 'Learn more about the Elastic Web Crawler', } )} diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/classic_nav_helpers.test.ts b/x-pack/plugins/enterprise_search/public/applications/shared/layout/classic_nav_helpers.test.ts index d43d14aba2235..80e846716e59b 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/classic_nav_helpers.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/classic_nav_helpers.test.ts @@ -37,7 +37,7 @@ describe('generateSideNavItems', () => { }, 'enterpriseSearchContent:webCrawlers': { id: 'enterpriseSearchContent:webCrawlers', - title: 'Web crawlers', + title: 'Web Crawlers', url: '/app/enterprise_search/content/crawlers', }, } as unknown as Record; diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx index a6cbf56691735..fed85bad23353 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx @@ -62,7 +62,7 @@ const baseNavItems = [ href: '/app/enterprise_search/content/crawlers', id: 'crawlers', items: undefined, - name: 'Web crawlers', + name: 'Web Crawlers', }, ], name: 'Content', @@ -184,7 +184,7 @@ const mockNavLinks = [ }, { id: 'enterpriseSearchContent:webCrawlers', - title: 'Web crawlers', + title: 'Web Crawlers', url: '/app/enterprise_search/content/crawlers', }, { diff --git a/x-pack/plugins/enterprise_search/public/plugin.ts b/x-pack/plugins/enterprise_search/public/plugin.ts index 4d357956f6bb5..a413ae5f2067d 100644 --- a/x-pack/plugins/enterprise_search/public/plugin.ts +++ b/x-pack/plugins/enterprise_search/public/plugin.ts @@ -131,7 +131,7 @@ const contentLinks: AppDeepLink[] = [ id: 'webCrawlers', path: `/${CRAWLERS_PATH}`, title: i18n.translate('xpack.enterpriseSearch.navigation.contentWebcrawlersLinkLabel', { - defaultMessage: 'Web crawlers', + defaultMessage: 'Web Crawlers', }), }, ]; diff --git a/x-pack/plugins/search_solution/search_navigation/public/classic_navigation.test.ts b/x-pack/plugins/search_solution/search_navigation/public/classic_navigation.test.ts index 1b17296f54c73..45c6e4c02ace4 100644 --- a/x-pack/plugins/search_solution/search_navigation/public/classic_navigation.test.ts +++ b/x-pack/plugins/search_solution/search_navigation/public/classic_navigation.test.ts @@ -30,7 +30,7 @@ describe('classicNavigationFactory', function () { }, { id: 'enterpriseSearchContent:webCrawlers', - title: 'Web crawlers', + title: 'Web Crawlers', url: '/app/enterprise_search/content/crawlers', }, ]; diff --git a/x-pack/plugins/serverless_search/common/i18n_string.ts b/x-pack/plugins/serverless_search/common/i18n_string.ts index 32ec0cf8eb957..d77998bc8cc53 100644 --- a/x-pack/plugins/serverless_search/common/i18n_string.ts +++ b/x-pack/plugins/serverless_search/common/i18n_string.ts @@ -68,7 +68,7 @@ export const CONNECTOR_LABEL: string = i18n.translate('xpack.serverlessSearch.co export const WEB_CRAWLERS_LABEL: string = i18n.translate( 'xpack.serverlessSearch.webCrawlersLabel', { - defaultMessage: 'Web crawlers', + defaultMessage: 'Web Crawlers', } ); diff --git a/x-pack/plugins/serverless_search/public/application/components/web_crawlers/empty_web_crawlers_prompt.tsx b/x-pack/plugins/serverless_search/public/application/components/web_crawlers/empty_web_crawlers_prompt.tsx index 8170ed6da3134..20c05f86747a8 100644 --- a/x-pack/plugins/serverless_search/public/application/components/web_crawlers/empty_web_crawlers_prompt.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/web_crawlers/empty_web_crawlers_prompt.tsx @@ -230,6 +230,7 @@ export const EmptyWebCrawlersPrompt: React.FC = () => { fill iconType={githubIcon} href={'https://github.com/elastic/crawler'} + target="_blank" > {i18n.translate('xpack.serverlessSearch.webCrawlersEmpty.selfManagedButton', { defaultMessage: 'Self-managed web crawler', diff --git a/x-pack/plugins/serverless_search/public/application/components/web_crawlers_elastic_managed.tsx b/x-pack/plugins/serverless_search/public/application/components/web_crawlers_elastic_managed.tsx index 8ac5a0c59dd14..0cf3445f0a5b8 100644 --- a/x-pack/plugins/serverless_search/public/application/components/web_crawlers_elastic_managed.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/web_crawlers_elastic_managed.tsx @@ -27,7 +27,7 @@ export const WebCrawlersElasticManaged = () => { { Playground diff --git a/x-pack/test/functional_search/tests/solution_navigation.ts b/x-pack/test/functional_search/tests/solution_navigation.ts index b64367b11675c..89cee21a81d66 100644 --- a/x-pack/test/functional_search/tests/solution_navigation.ts +++ b/x-pack/test/functional_search/tests/solution_navigation.ts @@ -54,7 +54,7 @@ export default function searchSolutionNavigation({ await solutionNavigation.sidenav.expectLinkExists({ text: 'Dashboards' }); await solutionNavigation.sidenav.expectLinkExists({ text: 'Indices' }); await solutionNavigation.sidenav.expectLinkExists({ text: 'Connectors' }); - await solutionNavigation.sidenav.expectLinkExists({ text: 'Web crawlers' }); + await solutionNavigation.sidenav.expectLinkExists({ text: 'Web Crawlers' }); await solutionNavigation.sidenav.expectLinkExists({ text: 'Playground' }); await solutionNavigation.sidenav.expectLinkExists({ text: 'Search applications' }); await solutionNavigation.sidenav.expectLinkExists({ text: 'Behavioral Analytics' }); @@ -147,7 +147,7 @@ export default function searchSolutionNavigation({ deepLinkId: 'enterpriseSearchContent:webCrawlers', }); await solutionNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'Content' }); - await solutionNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'Web crawlers' }); + await solutionNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'Web Crawlers' }); await solutionNavigation.breadcrumbs.expectBreadcrumbExists({ deepLinkId: 'enterpriseSearchContent:webCrawlers', }); diff --git a/x-pack/test_serverless/functional/test_suites/search/navigation.ts b/x-pack/test_serverless/functional/test_suites/search/navigation.ts index 74d1c59cbc8e5..abf4b0e2eef69 100644 --- a/x-pack/test_serverless/functional/test_suites/search/navigation.ts +++ b/x-pack/test_serverless/functional/test_suites/search/navigation.ts @@ -241,7 +241,7 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { await solutionNavigation.sidenav.expectLinkExists({ text: 'Data' }); await solutionNavigation.sidenav.expectLinkExists({ text: 'Index Management' }); await solutionNavigation.sidenav.expectLinkExists({ text: 'Connectors' }); - await solutionNavigation.sidenav.expectLinkExists({ text: 'Web crawlers' }); + await solutionNavigation.sidenav.expectLinkExists({ text: 'Web Crawlers' }); await solutionNavigation.sidenav.expectLinkExists({ text: 'Build' }); await solutionNavigation.sidenav.expectLinkExists({ text: 'Dev Tools' }); await solutionNavigation.sidenav.expectLinkExists({ text: 'Playground' }); From 91b4710c61d629c76c8d55da389cb46d6b65b0a4 Mon Sep 17 00:00:00 2001 From: youhonglian Date: Thu, 5 Dec 2024 19:54:34 +0800 Subject: [PATCH 076/141] [Upgrade Assistant] Add confirmation modal before migrating system indices (#200117) --- .../migrate_system_indices.test.tsx | 42 +++++++++++++++ .../migrate_system_indices.tsx | 52 ++++++++++++++++++- 2 files changed, 92 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/upgrade_assistant/__jest__/client_integration/overview/migrate_system_indices/migrate_system_indices.test.tsx b/x-pack/plugins/upgrade_assistant/__jest__/client_integration/overview/migrate_system_indices/migrate_system_indices.test.tsx index ae3e184f9c96b..eee988e2ebb13 100644 --- a/x-pack/plugins/upgrade_assistant/__jest__/client_integration/overview/migrate_system_indices/migrate_system_indices.test.tsx +++ b/x-pack/plugins/upgrade_assistant/__jest__/client_integration/overview/migrate_system_indices/migrate_system_indices.test.tsx @@ -107,6 +107,38 @@ describe('Overview - Migrate system indices', () => { expect(exists('viewSystemIndicesStateButton')).toBe(true); }); + test('handles confirmModal submission', async () => { + httpRequestsMockHelpers.setLoadSystemIndicesMigrationStatus({ + migration_status: 'MIGRATION_NEEDED', + }); + + testBed = await setupOverviewPage(httpSetup); + + const { exists, component, find } = testBed; + + component.update(); + + expect(exists('startSystemIndicesMigrationButton')).toBe(true); + await act(async () => { + find('startSystemIndicesMigrationButton').simulate('click'); + }); + component.update(); + + expect(exists('migrationConfirmModal')).toBe(true); + + const modal = document.body.querySelector('[data-test-subj="migrationConfirmModal"]'); + const confirmButton: HTMLButtonElement | null = modal!.querySelector( + '[data-test-subj="confirmModalConfirmButton"]' + ); + + await act(async () => { + confirmButton!.click(); + }); + component.update(); + + expect(exists('migrationConfirmModal')).toBe(false); + }); + test('Handles errors when migrating', async () => { httpRequestsMockHelpers.setLoadSystemIndicesMigrationStatus({ migration_status: 'MIGRATION_NEEDED', @@ -126,6 +158,16 @@ describe('Overview - Migrate system indices', () => { component.update(); + const modal = document.body.querySelector('[data-test-subj="migrationConfirmModal"]'); + const confirmButton: HTMLButtonElement | null = modal!.querySelector( + '[data-test-subj="confirmModalConfirmButton"]' + ); + + await act(async () => { + confirmButton!.click(); + }); + component.update(); + // Error is displayed expect(exists('startSystemIndicesMigrationCalloutError')).toBe(true); // CTA is enabled diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/overview/migrate_system_indices/migrate_system_indices.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/overview/migrate_system_indices/migrate_system_indices.tsx index 47ca25bda31ac..3d2599e26bde2 100644 --- a/x-pack/plugins/upgrade_assistant/public/application/components/overview/migrate_system_indices/migrate_system_indices.tsx +++ b/x-pack/plugins/upgrade_assistant/public/application/components/overview/migrate_system_indices/migrate_system_indices.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { FunctionComponent, useEffect } from 'react'; +import React, { FunctionComponent, useEffect, useState } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -20,6 +20,7 @@ import { EuiFlexItem, EuiCode, EuiLink, + EuiConfirmModal, } from '@elastic/eui'; import type { EuiStepProps } from '@elastic/eui/src/components/steps/step'; @@ -123,10 +124,55 @@ const i18nTexts = { }, }; +const ConfirmModal: React.FC<{ + onCancel: () => void; + onConfirm: () => void; +}> = ({ onCancel, onConfirm }) => ( + + {i18n.translate('xpack.upgradeAssistant.overview.systemIndices.confirmModal.description', { + defaultMessage: 'Migrating system indices may lead to downtime while they are reindexed.', + })} + +); + const MigrateSystemIndicesStep: FunctionComponent = ({ setIsComplete }) => { const { beginSystemIndicesMigration, startMigrationStatus, migrationStatus, setShowFlyout } = useMigrateSystemIndices(); + const [isModalVisible, setIsModalVisible] = useState(false); + + const openMigrationModal = () => { + setIsModalVisible(true); + }; + const onCancel = () => { + setIsModalVisible(false); + }; + + const confirmMigrationAction = () => { + beginSystemIndicesMigration(); + setIsModalVisible(false); + }; + useEffect(() => { setIsComplete(migrationStatus.data?.migration_status === 'NO_MIGRATION_NEEDED'); // Depending upon setIsComplete would create an infinite loop. @@ -206,12 +252,14 @@ const MigrateSystemIndicesStep: FunctionComponent = ({ setIsComplete }) = )} + {isModalVisible && } + {isMigrating ? i18nTexts.inProgressButtonLabel : i18nTexts.startButtonLabel} From 5f2041f14d570b73bfd009c0d5d89f91ecafde9b Mon Sep 17 00:00:00 2001 From: Kevin Lacabane Date: Thu, 5 Dec 2024 12:57:12 +0100 Subject: [PATCH 077/141] [eem] metadata as keyword (#202611) Cast identity fields and metadata fields as keyword to prevent ambiguous mappings error ### Testing - setup data ``` PUT service-name-as-keyword { "mappings": { "dynamic": false, "properties": { "service.name": { "type": "keyword" } } } } POST service-name-as-keyword/_doc { "service.name": "as-keyword" } PUT service-name-as-text { "mappings": { "dynamic": false, "properties": { "service.name": { "type": "text" } } } } POST service-name-as-text/_doc { "service.name": "as-text" } ``` - data loads successfully in `/app/entity_manager` ![Screenshot 2024-12-03 at 11 50 10](https://github.com/user-attachments/assets/12d6cbd8-c075-475f-b140-9158e93158ff) _new query_ ``` POST _query { "query": """FROM service-name-as* | WHERE service.name::keyword IS NOT NULL | STATS BY service.name::keyword | RENAME `service.name::keyword` AS service.name | EVAL entity.type = "service", entity.id = service.name, entity.display_name = entity.id | SORT entity.id ASC | LIMIT 10""" } ``` - previous query fails with ambiguous mappings error ``` POST _query { "query": """FROM service-name-as* | WHERE service.name IS NOT NULL | STATS BY service.name | EVAL entity.type = "service", entity.id = service.name, entity.display_name = entity.id | SORT entity.id ASC | LIMIT 10""" } ``` --- .../server/lib/v2/queries/index.test.ts | 5 +++-- .../entity_manager/server/lib/v2/queries/index.ts | 15 +++++++++++---- .../entity_manager/server/lib/v2/queries/utils.ts | 4 ++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts index 7485b19a2c7c0..e77be7d4172ca 100644 --- a/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts @@ -29,9 +29,10 @@ describe('getEntityInstancesQuery', () => { expect(query).toEqual( 'FROM logs-*, metrics-* | ' + - 'WHERE service.name IS NOT NULL | ' + + 'WHERE service.name::keyword IS NOT NULL | ' + 'WHERE custom_timestamp_field >= "2024-11-20T19:00:00.000Z" AND custom_timestamp_field <= "2024-11-20T20:00:00.000Z" | ' + - 'STATS host.name = VALUES(host.name), entity.last_seen_timestamp = MAX(custom_timestamp_field), service.id = MAX(service.id) BY service.name | ' + + 'STATS host.name = VALUES(host.name::keyword), entity.last_seen_timestamp = MAX(custom_timestamp_field), service.id = MAX(service.id::keyword) BY service.name::keyword | ' + + 'RENAME `service.name::keyword` AS service.name | ' + 'EVAL entity.type = "service", entity.id = service.name, entity.display_name = COALESCE(service.id, entity.id) | ' + 'SORT entity.id DESC | ' + 'LIMIT 5' diff --git a/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts index 7926b67849f5d..43c73fe7debad 100644 --- a/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { asKeyword } from './utils'; import { EntitySourceDefinition, SortBy } from '../types'; const sourceCommand = ({ source }: { source: EntitySourceDefinition }) => { @@ -30,7 +31,7 @@ const whereCommand = ({ end: string; }) => { const filters = [ - source.identity_fields.map((field) => `${field} IS NOT NULL`).join(' AND '), + source.identity_fields.map((field) => `${asKeyword(field)} IS NOT NULL`).join(' AND '), ...source.filters, ]; @@ -46,7 +47,7 @@ const whereCommand = ({ const statsCommand = ({ source }: { source: EntitySourceDefinition }) => { const aggs = source.metadata_fields .filter((field) => !source.identity_fields.some((idField) => idField === field)) - .map((field) => `${field} = VALUES(${field})`); + .map((field) => `${field} = VALUES(${asKeyword(field)})`); if (source.timestamp_field) { aggs.push(`entity.last_seen_timestamp = MAX(${source.timestamp_field})`); @@ -55,10 +56,15 @@ const statsCommand = ({ source }: { source: EntitySourceDefinition }) => { if (source.display_name) { // ideally we want the latest value but there's no command yet // so we use MAX for now - aggs.push(`${source.display_name} = MAX(${source.display_name})`); + aggs.push(`${source.display_name} = MAX(${asKeyword(source.display_name)})`); } - return `STATS ${aggs.join(', ')} BY ${source.identity_fields.join(', ')}`; + return `STATS ${aggs.join(', ')} BY ${source.identity_fields.map(asKeyword).join(', ')}`; +}; + +const renameCommand = ({ source }: { source: EntitySourceDefinition }) => { + const operations = source.identity_fields.map((field) => `\`${asKeyword(field)}\` AS ${field}`); + return `RENAME ${operations.join(', ')}`; }; const evalCommand = ({ source }: { source: EntitySourceDefinition }) => { @@ -107,6 +113,7 @@ export function getEntityInstancesQuery({ sourceCommand({ source }), whereCommand({ source, start, end }), statsCommand({ source }), + renameCommand({ source }), evalCommand({ source }), sortCommand({ source, sort }), `LIMIT ${limit}`, diff --git a/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts index 1d20d3caea0dc..5d1ebf3001434 100644 --- a/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts @@ -65,3 +65,7 @@ export function mergeEntitiesList( return Object.values(instances); } + +export function asKeyword(field: string) { + return `${field}::keyword`; +} From 6d082b77dabdb1b1c68556db74845f80128636e0 Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Thu, 5 Dec 2024 13:04:01 +0100 Subject: [PATCH 078/141] [Discover] Support "Inspect" in saved search embeddables (#202947) - Closes https://github.com/elastic/kibana/issues/202301 ## Summary This PR enables "Inspect" option for saved search Dashboard panels. Screenshot 2024-12-04 at 16 02 33 Screenshot 2024-12-04 at 16 02 43 Screenshot 2024-12-04 at 16 03 03 ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../embeddable/__mocks__/get_mocked_api.ts | 3 ++- .../embeddable/get_search_embeddable_factory.tsx | 1 + .../public/embeddable/initialize_fetch.test.ts | 1 + .../public/embeddable/initialize_fetch.ts | 16 +++++++++------- .../initialize_search_embeddable_api.tsx | 4 +++- src/plugins/discover/public/embeddable/types.ts | 5 ++++- .../plugins/translations/translations/fr-FR.json | 1 - .../plugins/translations/translations/ja-JP.json | 1 - .../plugins/translations/translations/zh-CN.json | 1 - 9 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/plugins/discover/public/embeddable/__mocks__/get_mocked_api.ts b/src/plugins/discover/public/embeddable/__mocks__/get_mocked_api.ts index fdc9cba8a5bfa..592cf3d80faef 100644 --- a/src/plugins/discover/public/embeddable/__mocks__/get_mocked_api.ts +++ b/src/plugins/discover/public/embeddable/__mocks__/get_mocked_api.ts @@ -8,7 +8,7 @@ */ import { BehaviorSubject } from 'rxjs'; - +import type { Adapters } from '@kbn/inspector-plugin/common'; import { SearchSource } from '@kbn/data-plugin/common'; import type { DataView } from '@kbn/data-views-plugin/common'; import { DataTableRecord } from '@kbn/discover-utils'; @@ -58,6 +58,7 @@ export const getMockedSearchApi = ({ rows: new BehaviorSubject([]), totalHitCount: new BehaviorSubject(0), columnsMeta: new BehaviorSubject | undefined>(undefined), + inspectorAdapters: new BehaviorSubject({}), }, }; }; diff --git a/src/plugins/discover/public/embeddable/get_search_embeddable_factory.tsx b/src/plugins/discover/public/embeddable/get_search_embeddable_factory.tsx index 4117a36a4e048..c1b5cf9f7695f 100644 --- a/src/plugins/discover/public/embeddable/get_search_embeddable_factory.tsx +++ b/src/plugins/discover/public/embeddable/get_search_embeddable_factory.tsx @@ -196,6 +196,7 @@ export const getSearchEmbeddableFactory = ({ savedObjectId: savedObjectId$.getValue(), discoverServices, }), + getInspectorAdapters: () => searchEmbeddable.stateManager.inspectorAdapters.getValue(), }, { ...titleComparators, diff --git a/src/plugins/discover/public/embeddable/initialize_fetch.test.ts b/src/plugins/discover/public/embeddable/initialize_fetch.test.ts index 6fa66115da6e0..061a934dfa2b5 100644 --- a/src/plugins/discover/public/embeddable/initialize_fetch.test.ts +++ b/src/plugins/discover/public/embeddable/initialize_fetch.test.ts @@ -69,6 +69,7 @@ describe('initialize fetch', () => { ].map((hit) => buildDataTableRecord(hit, dataViewMock)) ); expect(stateManager.totalHitCount.getValue()).toEqual(2); + expect(stateManager.inspectorAdapters.getValue().requests).toBeDefined(); }); it('should catch and emit error', async () => { diff --git a/src/plugins/discover/public/embeddable/initialize_fetch.ts b/src/plugins/discover/public/embeddable/initialize_fetch.ts index b502ea94bd371..9ef2a3c167272 100644 --- a/src/plugins/discover/public/embeddable/initialize_fetch.ts +++ b/src/plugins/discover/public/embeddable/initialize_fetch.ts @@ -90,7 +90,7 @@ export function initializeFetch({ stateManager: SearchEmbeddableStateManager; discoverServices: DiscoverServices; }) { - const requestAdapter = new RequestAdapter(); + const inspectorAdapters = { requests: new RequestAdapter() }; let abortController: AbortController | undefined; const fetchSubscription = combineLatest([fetch$(api), api.savedSearch$, api.dataViews]) @@ -127,7 +127,7 @@ export function initializeFetch({ const searchSourceQuery = savedSearch.searchSource.getField('query'); // Log request to inspector - requestAdapter.reset(); + inspectorAdapters.requests.reset(); try { api.dataLoading.next(true); @@ -156,7 +156,7 @@ export function initializeFetch({ filters: fetchContext.filters, dataView, abortSignal: currentAbortController.signal, - inspectorAdapters: discoverServices.inspector, + inspectorAdapters, data: discoverServices.data, expressions: discoverServices.expressions, profilesManager: discoverServices.profilesManager, @@ -181,9 +181,9 @@ export function initializeFetch({ abortSignal: currentAbortController.signal, sessionId: searchSessionId, inspector: { - adapter: requestAdapter, - title: i18n.translate('discover.embeddable.inspectorRequestDataTitle', { - defaultMessage: 'Data', + adapter: inspectorAdapters.requests, + title: i18n.translate('discover.embeddable.inspectorTableRequestTitle', { + defaultMessage: 'Table', }), description: i18n.translate('discover.embeddable.inspectorRequestDescription', { defaultMessage: @@ -195,7 +195,7 @@ export function initializeFetch({ }) ); const interceptedWarnings: SearchResponseWarning[] = []; - discoverServices.data.search.showWarnings(requestAdapter, (warning) => { + discoverServices.data.search.showWarnings(inspectorAdapters.requests, (warning) => { interceptedWarnings.push(warning); return true; // suppress the default behaviour }); @@ -225,6 +225,8 @@ export function initializeFetch({ stateManager.rows.next(next.rows ?? []); stateManager.totalHitCount.next(next.hitCount); + stateManager.inspectorAdapters.next(inspectorAdapters); + api.fetchWarnings$.next(next.warnings ?? []); api.fetchContext$.next(next.fetchContext); if (Object.hasOwn(next, 'columnsMeta')) { diff --git a/src/plugins/discover/public/embeddable/initialize_search_embeddable_api.tsx b/src/plugins/discover/public/embeddable/initialize_search_embeddable_api.tsx index 7b6f20927d347..f5ff51930096f 100644 --- a/src/plugins/discover/public/embeddable/initialize_search_embeddable_api.tsx +++ b/src/plugins/discover/public/embeddable/initialize_search_embeddable_api.tsx @@ -10,7 +10,7 @@ import { pick } from 'lodash'; import deepEqual from 'react-fast-compare'; import { BehaviorSubject, combineLatest, map, Observable, skip } from 'rxjs'; - +import type { Adapters } from '@kbn/inspector-plugin/common'; import { ISearchSource, SerializedSearchSourceFields } from '@kbn/data-plugin/common'; import { DataView } from '@kbn/data-views-plugin/common'; import { DataTableRecord } from '@kbn/discover-utils/types'; @@ -116,6 +116,7 @@ export const initializeSearchEmbeddableApi = async ( const rows$ = new BehaviorSubject([]); const columnsMeta$ = new BehaviorSubject(undefined); const totalHitCount$ = new BehaviorSubject(undefined); + const inspectorAdapters$ = new BehaviorSubject({}); /** * The state manager is used to modify the state of the saved search - this should never be @@ -134,6 +135,7 @@ export const initializeSearchEmbeddableApi = async ( totalHitCount: totalHitCount$, viewMode: savedSearchViewMode$, density: density$, + inspectorAdapters: inspectorAdapters$, }; /** The saved search should be the source of truth for all state */ diff --git a/src/plugins/discover/public/embeddable/types.ts b/src/plugins/discover/public/embeddable/types.ts index 64cf5a390da3a..94d0b10cc3f64 100644 --- a/src/plugins/discover/public/embeddable/types.ts +++ b/src/plugins/discover/public/embeddable/types.ts @@ -9,6 +9,7 @@ import { DataTableRecord } from '@kbn/discover-utils/types'; import type { DefaultEmbeddableApi } from '@kbn/embeddable-plugin/public'; +import { HasInspectorAdapters } from '@kbn/inspector-plugin/public'; import { EmbeddableApiContext, HasEditCapabilities, @@ -47,6 +48,7 @@ export type SearchEmbeddableState = Pick< rows: DataTableRecord[]; columnsMeta: DataTableColumnsMeta | undefined; totalHitCount: number | undefined; + inspectorAdapters: Record; }; export type SearchEmbeddableStateManager = { @@ -55,7 +57,7 @@ export type SearchEmbeddableStateManager = { export type SearchEmbeddableSerializedAttributes = Omit< SearchEmbeddableState, - 'rows' | 'columnsMeta' | 'totalHitCount' | 'searchSource' + 'rows' | 'columnsMeta' | 'totalHitCount' | 'searchSource' | 'inspectorAdapters' > & Pick; @@ -98,6 +100,7 @@ export type SearchEmbeddableApi = DefaultEmbeddableApi< PublishesWritableUnifiedSearch & HasInPlaceLibraryTransforms & HasTimeRange & + HasInspectorAdapters & Partial; export interface PublishesSavedSearch { diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 56a49131ffc45..9477e029f8ce5 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -2600,7 +2600,6 @@ "discover.documentsAriaLabel": "Documents", "discover.docViews.logsOverview.title": "Aperçu du log", "discover.dropZoneTableLabel": "Abandonner la zone pour ajouter un champ en tant que colonne dans la table", - "discover.embeddable.inspectorRequestDataTitle": "Données", "discover.embeddable.inspectorRequestDescription": "Cette requête interroge Elasticsearch afin de récupérer les données pour la recherche.", "discover.embeddable.search.dataViewError": "Vue de données {indexPatternId} manquante", "discover.embeddable.search.displayName": "rechercher", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 0daefc15b9396..84ce5792687d2 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2599,7 +2599,6 @@ "discover.documentsAriaLabel": "ドキュメント", "discover.docViews.logsOverview.title": "ログ概要", "discover.dropZoneTableLabel": "フィールドを列として表に追加するには、ゾーンをドロップします", - "discover.embeddable.inspectorRequestDataTitle": "データ", "discover.embeddable.inspectorRequestDescription": "このリクエストはElasticsearchにクエリーをかけ、検索データを取得します。", "discover.embeddable.search.dataViewError": "データビュー{indexPatternId}が見つかりません", "discover.embeddable.search.displayName": "検索", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 724923fbb204a..872b69fce5e63 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2590,7 +2590,6 @@ "discover.documentsAriaLabel": "文档", "discover.docViews.logsOverview.title": "日志概览", "discover.dropZoneTableLabel": "放置区域以将字段作为列添加到表中", - "discover.embeddable.inspectorRequestDataTitle": "数据", "discover.embeddable.inspectorRequestDescription": "此请求将查询 Elasticsearch 以获取搜索的数据。", "discover.embeddable.search.dataViewError": "缺少数据视图 {indexPatternId}", "discover.embeddable.search.displayName": "搜索", From 7edecbbf87cc5c90bf3bec9262d67853dc3e05a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Thu, 5 Dec 2024 13:16:34 +0100 Subject: [PATCH 079/141] [CI autocommits] Add telemetry_check --fix (#203065) --- .buildkite/scripts/steps/checks/telemetry.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.buildkite/scripts/steps/checks/telemetry.sh b/.buildkite/scripts/steps/checks/telemetry.sh index 073f1fbaaff02..a767ba2a003cb 100755 --- a/.buildkite/scripts/steps/checks/telemetry.sh +++ b/.buildkite/scripts/steps/checks/telemetry.sh @@ -5,4 +5,10 @@ set -euo pipefail source .buildkite/scripts/common/util.sh echo --- Check Telemetry Schema -node scripts/telemetry_check + +if is_pr && ! is_auto_commit_disabled; then + node scripts/telemetry_check --fix + check_for_changed_files "node scripts/telemetry_check" true +else + node scripts/telemetry_check +fi From fcf8c0af1d0aa07fba2617db3071abc19034dc39 Mon Sep 17 00:00:00 2001 From: "elastic-renovate-prod[bot]" <174716857+elastic-renovate-prod[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 06:28:54 -0600 Subject: [PATCH 080/141] Update dependency @elastic/request-converter to ^8.17.0 (main) (#202954) --- package.json | 2 +- yarn.lock | 38 +++++--------------------------------- 2 files changed, 6 insertions(+), 34 deletions(-) diff --git a/package.json b/package.json index c35b4daccb349..fea0e9dc0bd4f 100644 --- a/package.json +++ b/package.json @@ -124,7 +124,7 @@ "@elastic/numeral": "^2.5.1", "@elastic/react-search-ui": "^1.20.2", "@elastic/react-search-ui-views": "^1.20.2", - "@elastic/request-converter": "^8.16.2", + "@elastic/request-converter": "^8.17.0", "@elastic/request-crypto": "^2.0.3", "@elastic/search-ui": "^1.20.2", "@elastic/search-ui-app-search-connector": "^1.20.2", diff --git a/yarn.lock b/yarn.lock index b936d99ebe74a..2113fb5435659 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2403,12 +2403,11 @@ "@elastic/react-search-ui-views" "1.20.2" "@elastic/search-ui" "1.20.2" -"@elastic/request-converter@^8.16.2": - version "8.16.2" - resolved "https://registry.yarnpkg.com/@elastic/request-converter/-/request-converter-8.16.2.tgz#e82c5c794adf8da37795cb8656e2f0334460cb08" - integrity sha512-bljPrXbXkImBglTz5N8Rrpmzc64ahpZxOkBIKFBX1mnU3kv/JDeMjsv1rvfHXrkuhtQQ4kRRZqfwmqzJIwzlag== +"@elastic/request-converter@^8.17.0": + version "8.17.0" + resolved "https://registry.yarnpkg.com/@elastic/request-converter/-/request-converter-8.17.0.tgz#d2ef8f99f5a3e6c03a51859ad03e0e8a0d450032" + integrity sha512-f5WmQBbTdaDw9KrhVTuHeYbu0kulZfRUN9cNdFgCD78CRAVa353K1iqH5imikZ7NLIltN9itm5q5yyLvbHhs+w== dependencies: - child-process-promise "^2.2.1" commander "^12.1.0" find-my-way-ts "^0.1.2" handlebars "^4.7.8" @@ -15104,15 +15103,6 @@ cheerio@^1.0.0-rc.12, cheerio@^1.0.0-rc.3: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" -child-process-promise@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/child-process-promise/-/child-process-promise-2.2.1.tgz#4730a11ef610fad450b8f223c79d31d7bdad8074" - integrity sha512-Fi4aNdqBsr0mv+jgWxcZ/7rAIC2mgihrptyVI4foh/rrjY/3BNjfP9+oaiFx/fzim+1ZyCNBae0DlyfQhSugog== - dependencies: - cross-spawn "^4.0.2" - node-version "^1.0.0" - promise-polyfill "^6.0.1" - chokidar@3.5.3, chokidar@^2.1.2, chokidar@^2.1.8, chokidar@^3.4.0, chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.1, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -15994,14 +15984,6 @@ cronstrue@^1.51.0: resolved "https://registry.yarnpkg.com/cronstrue/-/cronstrue-1.51.0.tgz#7a63153d61d940344049037628da38a60784c8e2" integrity sha512-fSRAz/MV0TRjeNZKAsovmH/MSsly7+8np4XsfsrjOOz7sjxLrE9SmedRYAs3nPAtLLC5UsMpvenjXYRz463bMA== -cross-spawn@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" - integrity sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA== - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -23582,7 +23564,7 @@ lru-cache@^10.2.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== -lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.1.5: +lru-cache@^4.0.0, lru-cache@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -25121,11 +25103,6 @@ node-source-walk@^6.0.0, node-source-walk@^6.0.1, node-source-walk@^6.0.2: dependencies: "@babel/parser" "^7.21.8" -node-version@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d" - integrity sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ== - nodemailer@^6.9.15: version "6.9.15" resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.15.tgz#57b79dc522be27e0e47ac16cc860aa0673e62e04" @@ -26955,11 +26932,6 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise-polyfill@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057" - integrity sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ== - promise-polyfill@^8.1.3: version "8.1.3" resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116" From 4086045b04f60ca566b24cbe79586ae73e2678ed Mon Sep 17 00:00:00 2001 From: Viduni Wickramarachchi Date: Thu, 5 Dec 2024 07:38:33 -0500 Subject: [PATCH 081/141] [Obs AI Assistant] Update AI Assistant icon for Serverless (#202861) ## Summary ### Problem The Obs AI Assistant icon doesn't look as expected in serverless top navigation. ### Solution Update button CSS for Obs AI Assistant top nav icon for serverless. No changes to the classic navigation. ### Checklist - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- .../public/components/nav_control/index.tsx | 59 +++++++++++++------ .../nav_control/lazy_nav_control.tsx | 3 + .../public/plugin.tsx | 4 ++ 3 files changed, 47 insertions(+), 19 deletions(-) diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/index.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/index.tsx index b6095ac595cea..fd198c42fda08 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/index.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/nav_control/index.tsx @@ -6,7 +6,7 @@ */ import React, { useEffect, useRef, useState } from 'react'; import { AssistantAvatar, useAbortableAsync } from '@kbn/observability-ai-assistant-plugin/public'; -import { EuiButton, EuiLoadingSpinner, EuiToolTip } from '@elastic/eui'; +import { EuiButton, EuiButtonEmpty, EuiLoadingSpinner, EuiToolTip } from '@elastic/eui'; import { css } from '@emotion/react'; import { v4 } from 'uuid'; import useObservable from 'react-use/lib/useObservable'; @@ -24,12 +24,14 @@ interface NavControlWithProviderDeps { appService: AIAssistantAppService; coreStart: CoreStart; pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies; + isServerless?: boolean; } export const NavControlWithProvider = ({ appService, coreStart, pluginsStart, + isServerless, }: NavControlWithProviderDeps) => { return ( - + ); }; -export function NavControl() { +export function NavControl({ isServerless }: { isServerless?: boolean }) { const service = useAIAssistantAppService(); const { @@ -140,22 +142,41 @@ export function NavControl() { return ( <> - { - service.conversations.openNewConversation({ - messages: [], - }); - }} - color="primary" - size="s" - fullWidth={false} - minWidth={0} - > - {chatService.loading ? : } - + {isServerless ? ( + { + service.conversations.openNewConversation({ + messages: [], + }); + }} + color="primary" + size="s" + > + {chatService.loading ? : } + + ) : ( + { + service.conversations.openNewConversation({ + messages: [], + }); + }} + color="primary" + size="s" + fullWidth={false} + minWidth={0} + > + {chatService.loading ? : } + + )} {chatService.value ? ( 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 index adef91ceea53e..9a6fd2f30d918 100644 --- 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 @@ -20,12 +20,14 @@ interface NavControlInitiatorProps { appService: AIAssistantAppService; coreStart: CoreStart; pluginsStart: ObservabilityAIAssistantAppPluginStartDependencies; + isServerless?: boolean; } export const NavControlInitiator = ({ appService, coreStart, pluginsStart, + isServerless, }: NavControlInitiatorProps) => { const { isVisible } = useIsNavControlVisible({ coreStart, pluginsStart }); @@ -38,6 +40,7 @@ export const NavControlInitiator = ({ appService={appService} coreStart={coreStart} pluginsStart={pluginsStart} + isServerless={isServerless} /> ); }; 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 index 1904eebffb2a8..cd1285b0017ce 100644 --- 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 @@ -41,10 +41,13 @@ export class ObservabilityAIAssistantAppPlugin { logger: Logger; appService: AIAssistantAppService | undefined; + isServerless: boolean; constructor(context: PluginInitializerContext) { this.logger = context.logger.get(); + this.isServerless = context.env.packageInfo.buildFlavor === 'serverless'; } + setup( coreSetup: CoreSetup, _: ObservabilityAIAssistantAppPluginSetupDependencies @@ -111,6 +114,7 @@ export class ObservabilityAIAssistantAppPlugin appService={appService} coreStart={coreStart} pluginsStart={pluginsStart} + isServerless={this.isServerless} />, element, () => {} From 0b038cc53919fc7c5b3a442173a2eafb8037368d Mon Sep 17 00:00:00 2001 From: Sergi Massaneda Date: Thu, 5 Dec 2024 13:53:50 +0100 Subject: [PATCH 082/141] [SecuritySolution] Fixes flaky test (#203069) ## Summary fixes: https://github.com/elastic/kibana/issues/202147 Fixes flakyness on: `x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts` --- .../hooks/use_expanded_card.test.ts | 44 +++++++------------ 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts index 65ecbe06f26c5..0c053b5ea0b69 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_expanded_card.test.ts @@ -6,12 +6,9 @@ */ import { renderHook, act } from '@testing-library/react-hooks'; -import { useExpandedCard } from './use_expanded_card'; -import { HEIGHT_ANIMATION_DURATION } from '../onboarding_card_panel.styles'; -import type { OnboardingCardId } from '../../../constants'; import { waitFor } from '@testing-library/react'; - -const scrollTimeout = HEIGHT_ANIMATION_DURATION + 50; +import type { OnboardingCardId } from '../../../constants'; +import { useExpandedCard } from './use_expanded_card'; const mockSetCardDetail = jest.fn(); jest.mock('../../hooks/use_url_detail', () => ({ @@ -28,6 +25,7 @@ describe('useExpandedCard Hook', () => { const mockCardId = 'card-1' as OnboardingCardId; const mockScrollTo = jest.fn(); global.window.scrollTo = mockScrollTo; + jest.useFakeTimers(); const mockGetElementById = jest.fn().mockReturnValue({ focus: jest.fn(), @@ -39,21 +37,17 @@ describe('useExpandedCard Hook', () => { jest.clearAllMocks(); }); - // FLAKY: https://github.com/elastic/kibana/issues/202147 - describe.skip('when the page is completely loaded', () => { + describe('when the page is completely loaded', () => { beforeEach(() => { renderHook(useExpandedCard); }); it('should scroll to the expanded card id from the hash', async () => { // Ensure that scroll and focus were triggered - await waitFor( - () => { - expect(mockGetElementById).toHaveBeenCalledWith(mockCardId); - expect(mockScrollTo).toHaveBeenCalledWith({ top: 60, behavior: 'smooth' }); - }, - { timeout: scrollTimeout } - ); + await waitFor(() => { + expect(mockGetElementById).toHaveBeenCalledWith(mockCardId); + expect(mockScrollTo).toHaveBeenCalledWith({ top: 60, behavior: 'smooth' }); + }); }); }); @@ -79,13 +73,10 @@ describe('useExpandedCard Hook', () => { it('should not scroll', async () => { // Ensure that scroll and focus were triggered - await waitFor( - () => { - expect(mockGetElementById).not.toHaveBeenCalled(); - expect(mockScrollTo).not.toHaveBeenCalled(); - }, - { timeout: scrollTimeout } - ); + await waitFor(() => { + expect(mockGetElementById).not.toHaveBeenCalled(); + expect(mockScrollTo).not.toHaveBeenCalled(); + }); }); }); @@ -103,13 +94,10 @@ describe('useExpandedCard Hook', () => { it('should scroll', async () => { // Ensure that scroll and focus were triggered - await waitFor( - () => { - expect(mockGetElementById).toHaveBeenCalledWith(mockCardId); - expect(mockScrollTo).toHaveBeenCalledWith({ top: 160, behavior: 'smooth' }); - }, - { timeout: scrollTimeout } - ); + await waitFor(() => { + expect(mockGetElementById).toHaveBeenCalledWith(mockCardId); + expect(mockScrollTo).toHaveBeenCalledWith({ top: 160, behavior: 'smooth' }); + }); }); }); }); From e265907a49d7281b23fe94e4a548f2095bc540da Mon Sep 17 00:00:00 2001 From: Dmitrii Shevchenko Date: Thu, 5 Dec 2024 14:25:35 +0100 Subject: [PATCH 083/141] [Security Solution] Add rule upgrade review cache invalidation (#202969) **Resolves: https://github.com/elastic/kibana/issues/202779** ## Summary Implemented proper cache invalidation after rule CRUD operations to prevent displaying stale data in rule upgrade flyouts. See the linked issue for more details. ### How to Test 1. Ensure rule customization is enabled 2. Navigate to the Rule Updates page 3. Locate any rule with updates 4. Make changes to the rule: - Edit the rule via the Rule Editing page - Use bulk actions - Delete the rule 5. Return to the Rule Updates page - All introduced changes should be reflected: - Modifications should be visible - If the rule was deleted, it should no longer appear on the page --- .../rule_management/api/hooks/use_bulk_action_mutation.ts | 1 + .../rule_management/api/hooks/use_update_rule_mutation.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_bulk_action_mutation.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_bulk_action_mutation.ts index 7d8f42adad31b..376b26684d4a5 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_bulk_action_mutation.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_bulk_action_mutation.ts @@ -101,6 +101,7 @@ export const useBulkActionMutation = ( invalidateFetchRuleByIdQuery(); invalidateFetchRuleManagementFilters(); invalidateFetchCoverageOverviewQuery(); + invalidateFetchPrebuiltRulesUpgradeReviewQuery(); break; } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts index 5eedf122a6ac6..812b97b669378 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/api/hooks/use_update_rule_mutation.ts @@ -17,6 +17,7 @@ import { useInvalidateFindRulesQuery } from './use_find_rules_query'; import { useUpdateRuleByIdCache } from './use_fetch_rule_by_id_query'; import { useInvalidateFetchRuleManagementFiltersQuery } from './use_fetch_rule_management_filters_query'; import { useInvalidateFetchCoverageOverviewQuery } from './use_fetch_coverage_overview_query'; +import { useInvalidateFetchPrebuiltRulesUpgradeReviewQuery } from './prebuilt_rules/use_fetch_prebuilt_rules_upgrade_review_query'; export const UPDATE_RULE_MUTATION_KEY = ['PUT', DETECTION_ENGINE_RULES_URL]; @@ -26,6 +27,7 @@ export const useUpdateRuleMutation = ( const invalidateFindRulesQuery = useInvalidateFindRulesQuery(); const invalidateFetchRuleManagementFilters = useInvalidateFetchRuleManagementFiltersQuery(); const invalidateFetchCoverageOverviewQuery = useInvalidateFetchCoverageOverviewQuery(); + const invalidatePrebuiltRulesUpdateReview = useInvalidateFetchPrebuiltRulesUpgradeReviewQuery(); const updateRuleCache = useUpdateRuleByIdCache(); return useMutation( @@ -37,6 +39,7 @@ export const useUpdateRuleMutation = ( invalidateFindRulesQuery(); invalidateFetchRuleManagementFilters(); invalidateFetchCoverageOverviewQuery(); + invalidatePrebuiltRulesUpdateReview(); const [response] = args; From d20862fd7f8ec360d325dabc7e1e96b0b04bb658 Mon Sep 17 00:00:00 2001 From: Gerard Soldevila Date: Thu, 5 Dec 2024 14:54:58 +0100 Subject: [PATCH 084/141] Sustainable Kibana Architecture: Move modules owned by `@elastic/docs` (#202416) ## Summary This PR aims at relocating some of the Kibana modules (plugins and packages) into a new folder structure, according to the _Sustainable Kibana Architecture_ initiative. We kindly ask you to: * Review the moved files, as some of them contain relative paths that have been updated. * Review the updated files, as some of them contain references that have been updated. * Think of potential impact of the move, including tooling and configuration files that can be pointing to the relocated modules. E.g.: * customised eslint rules * docs pointing to source code * We kindly ask you to: * Search for the `packages[\/\\]` and `plugins[\/\\]` patterns in the source code (Babel and Eslint config files), and update them appropriately. * Manually review .buildkite/scripts/pipelines/pull_request/pipeline.ts to ensure that any CI pipeline customizations continue to be correctly applied after the changed path names * Review all of the updated files, specially the `.ts` and `.js` files listed in the sections below. #### 1 package(s) are going to be relocated: | Id | Target folder | | -- | ------------- | | `@kbn/doc-links` | `src/platform/packages/shared/kbn-doc-links` |
    Updated references ``` ./docs/upgrade-notes.asciidoc ./package.json ./packages/kbn-repo-packages/package-map.json ./packages/kbn-ts-projects/config-paths.json ./src/core/tsconfig.type_check.json ./src/platform/packages/shared/kbn-doc-links/jest.config.js ./src/plugins/ai_assistant_management/selection/tsconfig.type_check.json ./tsconfig.base.json ./tsconfig.base.type_check.json ./tsconfig.refs.json ./x-pack/plugins/alerting/tsconfig.type_check.json ./x-pack/plugins/search_connectors/tsconfig.type_check.json ./x-pack/plugins/search_inference_endpoints/tsconfig.type_check.json ./x-pack/plugins/search_playground/tsconfig.type_check.json ./x-pack/plugins/security_solution/tsconfig.type_check.json ./x-pack/plugins/serverless_search/tsconfig.type_check.json ./x-pack/plugins/threat_intelligence/tsconfig.type_check.json ./yarn.lock ```
    Updated relative paths ``` src/platform/packages/shared/kbn-doc-links/jest.config.js:12 src/platform/packages/shared/kbn-doc-links/tsconfig.json:2 src/platform/packages/shared/kbn-doc-links/tsconfig.type_check.json:2 ```
    Script errors ``` ```
    --- .github/CODEOWNERS | 2 +- docs/upgrade-notes.asciidoc | 4 ++-- package.json | 2 +- .../platform/packages/shared}/kbn-doc-links/README.md | 0 .../platform/packages/shared}/kbn-doc-links/index.ts | 0 .../platform/packages/shared}/kbn-doc-links/jest.config.js | 4 ++-- .../platform/packages/shared}/kbn-doc-links/kibana.jsonc | 0 .../platform/packages/shared}/kbn-doc-links/package.json | 0 .../packages/shared}/kbn-doc-links/src/get_doc_links.test.ts | 0 .../packages/shared}/kbn-doc-links/src/get_doc_links.ts | 0 .../packages/shared}/kbn-doc-links/src/get_doc_meta.test.ts | 0 .../packages/shared}/kbn-doc-links/src/get_doc_meta.ts | 0 .../platform/packages/shared}/kbn-doc-links/src/types.ts | 0 .../platform/packages/shared}/kbn-doc-links/tsconfig.json | 2 +- tsconfig.base.json | 4 ++-- yarn.lock | 2 +- 16 files changed, 10 insertions(+), 10 deletions(-) rename {packages => src/platform/packages/shared}/kbn-doc-links/README.md (100%) rename {packages => src/platform/packages/shared}/kbn-doc-links/index.ts (100%) rename {packages => src/platform/packages/shared}/kbn-doc-links/jest.config.js (84%) rename {packages => src/platform/packages/shared}/kbn-doc-links/kibana.jsonc (100%) rename {packages => src/platform/packages/shared}/kbn-doc-links/package.json (100%) rename {packages => src/platform/packages/shared}/kbn-doc-links/src/get_doc_links.test.ts (100%) rename {packages => src/platform/packages/shared}/kbn-doc-links/src/get_doc_links.ts (100%) rename {packages => src/platform/packages/shared}/kbn-doc-links/src/get_doc_meta.test.ts (100%) rename {packages => src/platform/packages/shared}/kbn-doc-links/src/get_doc_meta.ts (100%) rename {packages => src/platform/packages/shared}/kbn-doc-links/src/types.ts (100%) rename {packages => src/platform/packages/shared}/kbn-doc-links/tsconfig.json (81%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 2f64a12a39581..1bf4354a52401 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -337,7 +337,6 @@ packages/kbn-dev-proc-runner @elastic/kibana-operations packages/kbn-dev-utils @elastic/kibana-operations packages/kbn-discover-contextual-components @elastic/obs-ux-logs-team @elastic/kibana-data-discovery packages/kbn-discover-utils @elastic/kibana-data-discovery -packages/kbn-doc-links @elastic/docs packages/kbn-docs-utils @elastic/kibana-operations packages/kbn-dom-drag-drop @elastic/kibana-visualizations @elastic/kibana-data-discovery packages/kbn-ebt-tools @elastic/kibana-core @@ -623,6 +622,7 @@ packages/shared-ux/storybook/config @elastic/appex-sharedux packages/shared-ux/storybook/mock @elastic/appex-sharedux packages/shared-ux/table_persist @elastic/appex-sharedux src/core @elastic/kibana-core +src/platform/packages/shared/kbn-doc-links @elastic/docs src/plugins/advanced_settings @elastic/appex-sharedux @elastic/kibana-management src/plugins/ai_assistant_management/selection @elastic/obs-ai-assistant src/plugins/bfetch @elastic/appex-sharedux diff --git a/docs/upgrade-notes.asciidoc b/docs/upgrade-notes.asciidoc index 236d768b16d4e..effe1308408cc 100644 --- a/docs/upgrade-notes.asciidoc +++ b/docs/upgrade-notes.asciidoc @@ -23,8 +23,8 @@ ADD INSTRUCTIONS FOR USERS LOOKING TO UPGRADE. HOW CAN THEY WORK AROUND THIS? 1. Copy and edit the template in the right section of this file. Most recent entries should be at the top of the section, search for sections using the text "[float]". 2. Edit the anchor ID [[REPO-PR]] of the template with proper values. 3. Don't hardcode the link to the new entry. Instead, make it available through the doc link service files: - - https://github.com/elastic/kibana/blob/main/packages/kbn-doc-links/src/get_doc_links.ts - - https://github.com/elastic/kibana/blob/main/packages/kbn-doc-links/src/types.ts + - https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts + - https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-doc-links/src/types.ts The entry in the main links file should look like this: diff --git a/package.json b/package.json index fea0e9dc0bd4f..05f10169d5e81 100644 --- a/package.json +++ b/package.json @@ -460,7 +460,7 @@ "@kbn/discover-plugin": "link:src/plugins/discover", "@kbn/discover-shared-plugin": "link:src/plugins/discover_shared", "@kbn/discover-utils": "link:packages/kbn-discover-utils", - "@kbn/doc-links": "link:packages/kbn-doc-links", + "@kbn/doc-links": "link:src/platform/packages/shared/kbn-doc-links", "@kbn/dom-drag-drop": "link:packages/kbn-dom-drag-drop", "@kbn/ebt-tools": "link:packages/kbn-ebt-tools", "@kbn/ecs-data-quality-dashboard": "link:x-pack/packages/security-solution/ecs_data_quality_dashboard", diff --git a/packages/kbn-doc-links/README.md b/src/platform/packages/shared/kbn-doc-links/README.md similarity index 100% rename from packages/kbn-doc-links/README.md rename to src/platform/packages/shared/kbn-doc-links/README.md diff --git a/packages/kbn-doc-links/index.ts b/src/platform/packages/shared/kbn-doc-links/index.ts similarity index 100% rename from packages/kbn-doc-links/index.ts rename to src/platform/packages/shared/kbn-doc-links/index.ts diff --git a/packages/kbn-doc-links/jest.config.js b/src/platform/packages/shared/kbn-doc-links/jest.config.js similarity index 84% rename from packages/kbn-doc-links/jest.config.js rename to src/platform/packages/shared/kbn-doc-links/jest.config.js index c2430a3758092..2e9989c26f744 100644 --- a/packages/kbn-doc-links/jest.config.js +++ b/src/platform/packages/shared/kbn-doc-links/jest.config.js @@ -9,6 +9,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../..', - roots: ['/packages/kbn-doc-links'], + rootDir: '../../../../..', + roots: ['/src/platform/packages/shared/kbn-doc-links'], }; diff --git a/packages/kbn-doc-links/kibana.jsonc b/src/platform/packages/shared/kbn-doc-links/kibana.jsonc similarity index 100% rename from packages/kbn-doc-links/kibana.jsonc rename to src/platform/packages/shared/kbn-doc-links/kibana.jsonc diff --git a/packages/kbn-doc-links/package.json b/src/platform/packages/shared/kbn-doc-links/package.json similarity index 100% rename from packages/kbn-doc-links/package.json rename to src/platform/packages/shared/kbn-doc-links/package.json diff --git a/packages/kbn-doc-links/src/get_doc_links.test.ts b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.test.ts similarity index 100% rename from packages/kbn-doc-links/src/get_doc_links.test.ts rename to src/platform/packages/shared/kbn-doc-links/src/get_doc_links.test.ts diff --git a/packages/kbn-doc-links/src/get_doc_links.ts b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts similarity index 100% rename from packages/kbn-doc-links/src/get_doc_links.ts rename to src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts diff --git a/packages/kbn-doc-links/src/get_doc_meta.test.ts b/src/platform/packages/shared/kbn-doc-links/src/get_doc_meta.test.ts similarity index 100% rename from packages/kbn-doc-links/src/get_doc_meta.test.ts rename to src/platform/packages/shared/kbn-doc-links/src/get_doc_meta.test.ts diff --git a/packages/kbn-doc-links/src/get_doc_meta.ts b/src/platform/packages/shared/kbn-doc-links/src/get_doc_meta.ts similarity index 100% rename from packages/kbn-doc-links/src/get_doc_meta.ts rename to src/platform/packages/shared/kbn-doc-links/src/get_doc_meta.ts diff --git a/packages/kbn-doc-links/src/types.ts b/src/platform/packages/shared/kbn-doc-links/src/types.ts similarity index 100% rename from packages/kbn-doc-links/src/types.ts rename to src/platform/packages/shared/kbn-doc-links/src/types.ts diff --git a/packages/kbn-doc-links/tsconfig.json b/src/platform/packages/shared/kbn-doc-links/tsconfig.json similarity index 81% rename from packages/kbn-doc-links/tsconfig.json rename to src/platform/packages/shared/kbn-doc-links/tsconfig.json index df789404c43f2..9cd6452185ddf 100644 --- a/packages/kbn-doc-links/tsconfig.json +++ b/src/platform/packages/shared/kbn-doc-links/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/tsconfig.base.json b/tsconfig.base.json index c73ebc1e6b599..85eaafc729e61 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -786,8 +786,8 @@ "@kbn/discover-shared-plugin/*": ["src/plugins/discover_shared/*"], "@kbn/discover-utils": ["packages/kbn-discover-utils"], "@kbn/discover-utils/*": ["packages/kbn-discover-utils/*"], - "@kbn/doc-links": ["packages/kbn-doc-links"], - "@kbn/doc-links/*": ["packages/kbn-doc-links/*"], + "@kbn/doc-links": ["src/platform/packages/shared/kbn-doc-links"], + "@kbn/doc-links/*": ["src/platform/packages/shared/kbn-doc-links/*"], "@kbn/docs-utils": ["packages/kbn-docs-utils"], "@kbn/docs-utils/*": ["packages/kbn-docs-utils/*"], "@kbn/dom-drag-drop": ["packages/kbn-dom-drag-drop"], diff --git a/yarn.lock b/yarn.lock index 2113fb5435659..31b75569d8c6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5388,7 +5388,7 @@ version "0.0.0" uid "" -"@kbn/doc-links@link:packages/kbn-doc-links": +"@kbn/doc-links@link:src/platform/packages/shared/kbn-doc-links": version "0.0.0" uid "" From a9839384084935da116f88167ab52a5ea5563c1c Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Thu, 5 Dec 2024 06:58:36 -0700 Subject: [PATCH 085/141] =?UTF-8?q?=F0=9F=8C=8A=20Add=20type=20safety=20to?= =?UTF-8?q?=20Painless=20conditions=20(#202603)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 🍒 Summary This PR closes https://github.com/elastic/streams-program/issues/18 by adding some basic type checking to the painless output for the Stream conditions. The new code will check to ensure that none of the fields used in the condition are `Map` objects. Then it wraps the if statement in a `try/catch`. ### Condition ```Typescript { and: [ { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, { or: [ { field: 'log.level', operator: 'eq' as const, value: 'error' }, { field: 'log.level', operator: 'eq' as const, value: 'ERROR' }, ], }, ], } ``` ### Before ``` (ctx.log?.logger !== null && ctx.log?.logger == "nginx_proxy") && ((ctx.log?.level !== null && ctx.log?.level == "error") || (ctx.log?.level !== null && ctx.log?.level == "ERROR")) ``` ### After ``` if (ctx.log?.logger instanceof Map || ctx.log?.level instanceof Map) { return false; } try { if ((ctx.log?.logger !== null && ctx.log?.logger == "nginx_proxy") && ((ctx.log?.level !== null && ctx.log?.level == "error") || (ctx.log?.level !== null && ctx.log?.level == "ERROR"))) { return true; } return false; } catch (Exception e) { return false; } ``` --- .../helpers/condition_to_painless.test.ts | 242 ++++++++++++------ .../streams/helpers/condition_to_painless.ts | 102 ++++++-- .../api_integration/apis/streams/full_flow.ts | 131 ++++++++++ 3 files changed, 376 insertions(+), 99 deletions(-) diff --git a/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.test.ts b/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.test.ts index db0a5eaea8efd..6927b85d5aed8 100644 --- a/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.test.ts +++ b/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.test.ts @@ -5,44 +5,53 @@ * 2.0. */ -import { conditionToPainless } from './condition_to_painless'; +import { conditionToPainless, conditionToStatement } from './condition_to_painless'; const operatorConditionAndResults = [ { condition: { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, - result: '(ctx.log?.logger !== null && ctx.log?.logger == "nginx_proxy")', + result: + '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy"))', }, { condition: { field: 'log.logger', operator: 'neq' as const, value: 'nginx_proxy' }, - result: '(ctx.log?.logger !== null && ctx.log?.logger != "nginx_proxy")', + result: + '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() != "nginx_proxy") || ctx.log?.logger != "nginx_proxy"))', }, { condition: { field: 'http.response.status_code', operator: 'lt' as const, value: 500 }, - result: '(ctx.http?.response?.status_code !== null && ctx.http?.response?.status_code < 500)', + result: + '(ctx.http?.response?.status_code !== null && ((ctx.http?.response?.status_code instanceof String && Float.parseFloat(ctx.http?.response?.status_code) < 500) || ctx.http?.response?.status_code < 500))', }, { condition: { field: 'http.response.status_code', operator: 'lte' as const, value: 500 }, - result: '(ctx.http?.response?.status_code !== null && ctx.http?.response?.status_code <= 500)', + result: + '(ctx.http?.response?.status_code !== null && ((ctx.http?.response?.status_code instanceof String && Float.parseFloat(ctx.http?.response?.status_code) <= 500) || ctx.http?.response?.status_code <= 500))', }, { condition: { field: 'http.response.status_code', operator: 'gt' as const, value: 500 }, - result: '(ctx.http?.response?.status_code !== null && ctx.http?.response?.status_code > 500)', + result: + '(ctx.http?.response?.status_code !== null && ((ctx.http?.response?.status_code instanceof String && Float.parseFloat(ctx.http?.response?.status_code) > 500) || ctx.http?.response?.status_code > 500))', }, { condition: { field: 'http.response.status_code', operator: 'gte' as const, value: 500 }, - result: '(ctx.http?.response?.status_code !== null && ctx.http?.response?.status_code >= 500)', + result: + '(ctx.http?.response?.status_code !== null && ((ctx.http?.response?.status_code instanceof String && Float.parseFloat(ctx.http?.response?.status_code) >= 500) || ctx.http?.response?.status_code >= 500))', }, { condition: { field: 'log.logger', operator: 'startsWith' as const, value: 'nginx' }, - result: '(ctx.log?.logger !== null && ctx.log?.logger.startsWith("nginx"))', + result: + '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString().startsWith("nginx")) || ctx.log?.logger.startsWith("nginx")))', }, { condition: { field: 'log.logger', operator: 'endsWith' as const, value: 'proxy' }, - result: '(ctx.log?.logger !== null && ctx.log?.logger.endsWith("proxy"))', + result: + '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString().endsWith("proxy")) || ctx.log?.logger.endsWith("proxy")))', }, { condition: { field: 'log.logger', operator: 'contains' as const, value: 'proxy' }, - result: '(ctx.log?.logger !== null && ctx.log?.logger.contains("proxy"))', + result: + '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString().contains("proxy")) || ctx.log?.logger.contains("proxy")))', }, { condition: { field: 'log.logger', operator: 'exists' as const }, @@ -55,87 +64,152 @@ const operatorConditionAndResults = [ ]; describe('conditionToPainless', () => { - describe('operators', () => { - operatorConditionAndResults.forEach((setup) => { - test(`${setup.condition.operator}`, () => { - expect(conditionToPainless(setup.condition)).toEqual(setup.result); + describe('conditionToStatement', () => { + describe('operators', () => { + operatorConditionAndResults.forEach((setup) => { + test(`${setup.condition.operator}`, () => { + expect(conditionToStatement(setup.condition)).toEqual(setup.result); + }); }); - }); - }); - describe('and', () => { - test('simple', () => { - const condition = { - and: [ - { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, - { field: 'log.level', operator: 'eq' as const, value: 'error' }, - ], - }; - expect( - expect(conditionToPainless(condition)).toEqual( - '(ctx.log?.logger !== null && ctx.log?.logger == "nginx_proxy") && (ctx.log?.level !== null && ctx.log?.level == "error")' - ) - ); + test('ensure number comparasion works with string values', () => { + const condition = { + field: 'http.response.status_code', + operator: 'gt' as const, + value: '500', + }; + expect(conditionToStatement(condition)).toEqual( + '(ctx.http?.response?.status_code !== null && ((ctx.http?.response?.status_code instanceof String && Float.parseFloat(ctx.http?.response?.status_code) > 500) || ctx.http?.response?.status_code > 500))' + ); + }); + test('ensure string comparasion works with number values', () => { + const condition = { + field: 'message', + operator: 'contains' as const, + value: 500, + }; + expect(conditionToStatement(condition)).toEqual( + '(ctx.message !== null && ((ctx.message instanceof Number && ctx.message.toString().contains("500")) || ctx.message.contains("500")))' + ); + }); }); - }); - describe('or', () => { - test('simple', () => { - const condition = { - or: [ - { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, - { field: 'log.level', operator: 'eq' as const, value: 'error' }, - ], - }; - expect( - expect(conditionToPainless(condition)).toEqual( - '(ctx.log?.logger !== null && ctx.log?.logger == "nginx_proxy") || (ctx.log?.level !== null && ctx.log?.level == "error")' - ) - ); + describe('and', () => { + test('simple', () => { + const condition = { + and: [ + { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, + { field: 'log.level', operator: 'eq' as const, value: 'error' }, + ], + }; + expect( + expect(conditionToStatement(condition)).toEqual( + '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy")) && (ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "error") || ctx.log?.level == "error"))' + ) + ); + }); }); - }); - describe('nested', () => { - test('and with a filter and or with 2 filters', () => { - const condition = { - and: [ - { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, - { - or: [ - { field: 'log.level', operator: 'eq' as const, value: 'error' }, - { field: 'log.level', operator: 'eq' as const, value: 'ERROR' }, - ], - }, - ], - }; - expect( - expect(conditionToPainless(condition)).toEqual( - '(ctx.log?.logger !== null && ctx.log?.logger == "nginx_proxy") && ((ctx.log?.level !== null && ctx.log?.level == "error") || (ctx.log?.level !== null && ctx.log?.level == "ERROR"))' - ) - ); + describe('or', () => { + test('simple', () => { + const condition = { + or: [ + { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, + { field: 'log.level', operator: 'eq' as const, value: 'error' }, + ], + }; + expect( + expect(conditionToStatement(condition)).toEqual( + '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy")) || (ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "error") || ctx.log?.level == "error"))' + ) + ); + }); }); - test('and with 2 or with filters', () => { - const condition = { - and: [ - { - or: [ - { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, - { field: 'service.name', operator: 'eq' as const, value: 'nginx' }, - ], - }, - { - or: [ - { field: 'log.level', operator: 'eq' as const, value: 'error' }, - { field: 'log.level', operator: 'eq' as const, value: 'ERROR' }, - ], - }, - ], - }; - expect( - expect(conditionToPainless(condition)).toEqual( - '((ctx.log?.logger !== null && ctx.log?.logger == "nginx_proxy") || (ctx.service?.name !== null && ctx.service?.name == "nginx")) && ((ctx.log?.level !== null && ctx.log?.level == "error") || (ctx.log?.level !== null && ctx.log?.level == "ERROR"))' - ) - ); + + describe('nested', () => { + test('and with a filter and or with 2 filters', () => { + const condition = { + and: [ + { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, + { + or: [ + { field: 'log.level', operator: 'eq' as const, value: 'error' }, + { field: 'log.level', operator: 'eq' as const, value: 'ERROR' }, + ], + }, + ], + }; + expect( + expect(conditionToStatement(condition)).toEqual( + '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy")) && ((ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "error") || ctx.log?.level == "error")) || (ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "ERROR") || ctx.log?.level == "ERROR")))' + ) + ); + }); + test('and with 2 or with filters', () => { + const condition = { + and: [ + { + or: [ + { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, + { field: 'service.name', operator: 'eq' as const, value: 'nginx' }, + ], + }, + { + or: [ + { field: 'log.level', operator: 'eq' as const, value: 'error' }, + { field: 'log.level', operator: 'eq' as const, value: 'ERROR' }, + ], + }, + ], + }; + expect( + expect(conditionToStatement(condition)).toEqual( + '((ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy")) || (ctx.service?.name !== null && ((ctx.service?.name instanceof Number && ctx.service?.name.toString() == "nginx") || ctx.service?.name == "nginx"))) && ((ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "error") || ctx.log?.level == "error")) || (ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "ERROR") || ctx.log?.level == "ERROR")))' + ) + ); + }); }); }); + + test('wrapped with type checks for uinary conditions', () => { + const condition = { field: 'log', operator: 'exists' as const }; + expect(conditionToPainless(condition)).toEqual(`try { + if (ctx.log !== null) { + return true; + } + return false; +} catch (Exception e) { + return false; +} +`); + }); + + test('wrapped with typechecks and try/catch', () => { + const condition = { + and: [ + { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, + { + or: [ + { field: 'log.level', operator: 'eq' as const, value: 'error' }, + { field: 'log.level', operator: 'eq' as const, value: 'ERROR' }, + ], + }, + ], + }; + expect( + expect(conditionToPainless(condition)) + .toEqual(`if (ctx.log?.logger instanceof Map || ctx.log?.level instanceof Map) { + return false; +} +try { + if ((ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy")) && ((ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "error") || ctx.log?.level == "error")) || (ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "ERROR") || ctx.log?.level == "ERROR")))) { + return true; + } + return false; +} catch (Exception e) { + return false; +} +`) + ); + }); }); diff --git a/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.ts b/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.ts index 1894ebaa6226d..4da9b3beffae5 100644 --- a/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.ts +++ b/x-pack/plugins/streams/server/lib/streams/helpers/condition_to_painless.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { isBoolean, isString } from 'lodash'; +import { isBoolean, isString, uniq } from 'lodash'; import { BinaryFilterCondition, Condition, @@ -14,8 +14,11 @@ import { } from '../../../../common/types'; import { isAndCondition, isFilterCondition, isOrCondition } from './condition_guards'; -function safePainlessField(condition: FilterCondition) { - return `ctx.${condition.field.split('.').join('?.')}`; +function safePainlessField(conditionOrField: FilterCondition | string) { + if (isFilterCondition(conditionOrField)) { + return `ctx.${conditionOrField.field.split('.').join('?.')}`; + } + return `ctx.${conditionOrField.split('.').join('?.')}`; } function encodeValue(value: string | number | boolean) { @@ -31,23 +34,59 @@ function encodeValue(value: string | number | boolean) { function binaryToPainless(condition: BinaryFilterCondition) { switch (condition.operator) { case 'neq': - return `${safePainlessField(condition)} != ${encodeValue(condition.value)}`; + return `((${safePainlessField(condition)} instanceof Number && ${safePainlessField( + condition + )}.toString() != ${encodeValue(String(condition.value))}) || ${safePainlessField( + condition + )} != ${encodeValue(String(condition.value))})`; case 'lt': - return `${safePainlessField(condition)} < ${encodeValue(condition.value)}`; + return `((${safePainlessField( + condition + )} instanceof String && Float.parseFloat(${safePainlessField(condition)}) < ${encodeValue( + Number(condition.value) + )}) || ${safePainlessField(condition)} < ${encodeValue(Number(condition.value))})`; case 'lte': - return `${safePainlessField(condition)} <= ${encodeValue(condition.value)}`; + return `((${safePainlessField( + condition + )} instanceof String && Float.parseFloat(${safePainlessField(condition)}) <= ${encodeValue( + Number(condition.value) + )}) || ${safePainlessField(condition)} <= ${encodeValue(Number(condition.value))})`; case 'gt': - return `${safePainlessField(condition)} > ${encodeValue(condition.value)}`; + return `((${safePainlessField( + condition + )} instanceof String && Float.parseFloat(${safePainlessField(condition)}) > ${encodeValue( + Number(condition.value) + )}) || ${safePainlessField(condition)} > ${encodeValue(Number(condition.value))})`; case 'gte': - return `${safePainlessField(condition)} >= ${encodeValue(condition.value)}`; + return `((${safePainlessField( + condition + )} instanceof String && Float.parseFloat(${safePainlessField(condition)}) >= ${encodeValue( + Number(condition.value) + )}) || ${safePainlessField(condition)} >= ${encodeValue(Number(condition.value))})`; case 'startsWith': - return `${safePainlessField(condition)}.startsWith(${encodeValue(condition.value)})`; + return `((${safePainlessField(condition)} instanceof Number && ${safePainlessField( + condition + )}.toString().startsWith(${encodeValue(String(condition.value))})) || ${safePainlessField( + condition + )}.startsWith(${encodeValue(String(condition.value))}))`; case 'endsWith': - return `${safePainlessField(condition)}.endsWith(${encodeValue(condition.value)})`; + return `((${safePainlessField(condition)} instanceof Number && ${safePainlessField( + condition + )}.toString().endsWith(${encodeValue(String(condition.value))})) || ${safePainlessField( + condition + )}.endsWith(${encodeValue(String(condition.value))}))`; case 'contains': - return `${safePainlessField(condition)}.contains(${encodeValue(condition.value)})`; + return `((${safePainlessField(condition)} instanceof Number && ${safePainlessField( + condition + )}.toString().contains(${encodeValue(String(condition.value))})) || ${safePainlessField( + condition + )}.contains(${encodeValue(String(condition.value))}))`; default: - return `${safePainlessField(condition)} == ${encodeValue(condition.value)}`; + return `((${safePainlessField(condition)} instanceof Number && ${safePainlessField( + condition + )}.toString() == ${encodeValue(String(condition.value))}) || ${safePainlessField( + condition + )} == ${encodeValue(String(condition.value))})`; } } @@ -64,7 +103,18 @@ function isUnaryFilterCondition(subject: FilterCondition): subject is UnaryFilte return !('value' in subject); } -export function conditionToPainless(condition: Condition, nested = false): string { +function extractAllFields(condition: Condition, fields: string[] = []): string[] { + if (isFilterCondition(condition) && !isUnaryFilterCondition(condition)) { + return uniq([...fields, condition.field]); + } else if (isAndCondition(condition)) { + return uniq(condition.and.map((cond) => extractAllFields(cond, fields)).flat()); + } else if (isOrCondition(condition)) { + return uniq(condition.or.map((cond) => extractAllFields(cond, fields)).flat()); + } + return uniq(fields); +} + +export function conditionToStatement(condition: Condition, nested = false): string { if (isFilterCondition(condition)) { if (isUnaryFilterCondition(condition)) { return unaryToPainless(condition); @@ -72,12 +122,34 @@ export function conditionToPainless(condition: Condition, nested = false): strin return `(${safePainlessField(condition)} !== null && ${binaryToPainless(condition)})`; } if (isAndCondition(condition)) { - const and = condition.and.map((filter) => conditionToPainless(filter, true)).join(' && '); + const and = condition.and.map((filter) => conditionToStatement(filter, true)).join(' && '); return nested ? `(${and})` : and; } if (isOrCondition(condition)) { - const or = condition.or.map((filter) => conditionToPainless(filter, true)).join(' || '); + const or = condition.or.map((filter) => conditionToStatement(filter, true)).join(' || '); return nested ? `(${or})` : or; } return 'false'; } + +export function conditionToPainless(condition: Condition): string { + const fields = extractAllFields(condition); + let fieldCheck = ''; + if (fields.length !== 0) { + fieldCheck = `if (${fields + .map((field) => `${safePainlessField(field)} instanceof Map`) + .join(' || ')}) { + return false; +} +`; + } + return `${fieldCheck}try { + if (${conditionToStatement(condition)}) { + return true; + } + return false; +} catch (Exception e) { + return false; +} +`; +} diff --git a/x-pack/test/api_integration/apis/streams/full_flow.ts b/x-pack/test/api_integration/apis/streams/full_flow.ts index 03c0cc9e0e219..aad931ab11816 100644 --- a/x-pack/test/api_integration/apis/streams/full_flow.ts +++ b/x-pack/test/api_integration/apis/streams/full_flow.ts @@ -135,6 +135,137 @@ export default function ({ getService }: FtrProviderContext) { log: { level: 'info', logger: 'nginx' }, }); }); + + it('Fork logs to logs.nginx.error with invalid condition', async () => { + const body = { + stream: { + id: 'logs.nginx.error', + fields: [], + processing: [], + }, + condition: { field: 'log', operator: 'eq', value: 'error' }, + }; + const response = await forkStream(supertest, 'logs.nginx', body); + expect(response).to.have.property('acknowledged', true); + }); + + it('Index an Nginx error log message, should goto logs.nginx.error but fails', async () => { + const doc = { + '@timestamp': '2024-01-01T00:00:20.000Z', + message: JSON.stringify({ + 'log.level': 'error', + 'log.logger': 'nginx', + message: 'test', + }), + }; + const response = await indexDocument(esClient, 'logs', doc); + expect(response.result).to.eql('created'); + + await waitForDocumentInIndex({ + esClient, + indexName: 'logs.nginx', + retryService, + logger, + docCountTarget: 2, + }); + + const result = await fetchDocument(esClient, 'logs.nginx', response._id); + expect(result._index).to.match(/^\.ds\-logs.nginx-.*/); + expect(result._source).to.eql({ + '@timestamp': '2024-01-01T00:00:20.000Z', + message: 'test', + log: { level: 'error', logger: 'nginx' }, + }); + }); + + it('Fork logs to logs.number-test', async () => { + const body = { + stream: { + id: 'logs.number-test', + fields: [], + processing: [], + }, + condition: { field: 'code', operator: 'gte', value: '500' }, + }; + const response = await forkStream(supertest, 'logs', body); + expect(response).to.have.property('acknowledged', true); + }); + + it('Index documents with numbers and strings for logs.number-test condition', async () => { + const doc1 = { + '@timestamp': '2024-01-01T00:00:20.000Z', + message: JSON.stringify({ + code: '500', + message: 'test', + }), + }; + const doc2 = { + '@timestamp': '2024-01-01T00:00:20.000Z', + message: JSON.stringify({ + code: 500, + message: 'test', + }), + }; + const response1 = await indexDocument(esClient, 'logs', doc1); + expect(response1.result).to.eql('created'); + const response2 = await indexDocument(esClient, 'logs', doc2); + expect(response2.result).to.eql('created'); + + await waitForDocumentInIndex({ + esClient, + indexName: 'logs.number-test', + retryService, + logger, + docCountTarget: 2, + retries: 20, + }); + }); + + it('Fork logs to logs.string-test', async () => { + const body = { + stream: { + id: 'logs.string-test', + fields: [], + processing: [], + }, + condition: { + or: [ + { field: 'message', operator: 'contains', value: '500' }, + { field: 'message', operator: 'contains', value: 400 }, + ], + }, + }; + const response = await forkStream(supertest, 'logs', body); + expect(response).to.have.property('acknowledged', true); + }); + + it('Index documents with numbers and strings for logs.string-test condition', async () => { + const doc1 = { + '@timestamp': '2024-01-01T00:00:20.000Z', + message: JSON.stringify({ + message: 'status_code: 500', + }), + }; + const doc2 = { + '@timestamp': '2024-01-01T00:00:20.000Z', + message: JSON.stringify({ + message: 'status_code: 400', + }), + }; + const response1 = await indexDocument(esClient, 'logs', doc1); + expect(response1.result).to.eql('created'); + const response2 = await indexDocument(esClient, 'logs', doc2); + expect(response2.result).to.eql('created'); + + await waitForDocumentInIndex({ + esClient, + indexName: 'logs.string-test', + retryService, + logger, + docCountTarget: 2, + retries: 20, + }); + }); }); }); } From cfa34302b649f1f5b37b3bc99c887f302243eca8 Mon Sep 17 00:00:00 2001 From: Nicolas Chaulet Date: Thu, 5 Dec 2024 09:13:53 -0500 Subject: [PATCH 086/141] [Fleet] Handle when an agent policy is removed from the current space (#202991) --- .../e2e/space_awareness/policies.cy.ts | 20 +++++++++++++++++++ .../components/settings/index.tsx | 19 +++++++++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/x-pack/plugins/fleet/cypress/e2e/space_awareness/policies.cy.ts b/x-pack/plugins/fleet/cypress/e2e/space_awareness/policies.cy.ts index 8975de388248c..010f147882482 100644 --- a/x-pack/plugins/fleet/cypress/e2e/space_awareness/policies.cy.ts +++ b/x-pack/plugins/fleet/cypress/e2e/space_awareness/policies.cy.ts @@ -28,6 +28,7 @@ describe('Space aware policies creation', { testIsolation: false }, () => { beforeEach(() => { cy.intercept('GET', /\/api\/fleet\/agent_policies/).as('getAgentPolicies'); + cy.intercept('PUT', /\/api\/fleet\/agent_policies\/.*/).as('putAgentPolicy'); cy.intercept('GET', /\/internal\/fleet\/agent_policies_spaces/).as('getAgentPoliciesSpaces'); }); @@ -59,6 +60,7 @@ describe('Space aware policies creation', { testIsolation: false }, () => { cy.getBySel(AGENT_POLICY_DETAILS_PAGE.SPACE_SELECTOR_COMBOBOX).click().type('default{enter}'); cy.getBySel(AGENT_POLICY_DETAILS_PAGE.SAVE_BUTTON).click(); + cy.wait('@putAgentPolicy'); }); it('the policy should be visible in the test space', () => { @@ -72,4 +74,22 @@ describe('Space aware policies creation', { testIsolation: false }, () => { cy.wait('@getAgentPolicies'); cy.getBySel(AGENT_POLICIES_TABLE).contains(POLICY_NAME); }); + + it('should redirect to the agent policies list when removing the current space from a policy', () => { + cy.visit('/s/test/app/fleet/policies'); + cy.getBySel(AGENT_POLICIES_TABLE).contains(POLICY_NAME).click(); + + cy.getBySel(AGENT_POLICY_DETAILS_PAGE.SETTINGS_TAB).click(); + cy.wait('@getAgentPoliciesSpaces'); + + cy.get('[title="Remove Test from selection in this group"]').click(); + + cy.getBySel(AGENT_POLICY_DETAILS_PAGE.SAVE_BUTTON).click(); + cy.wait('@putAgentPolicy'); + + cy.wait('@getAgentPolicies'); + cy.location('pathname').should('eq', '/s/test/app/fleet/policies'); + + cy.getBySel(AGENT_POLICIES_TABLE).contains(NO_AGENT_POLICIES); + }); }); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx index e0ea955cf5afe..50baac84ff4a0 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agent_policy/details_page/components/settings/index.tsx @@ -18,9 +18,10 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { useHistory } from 'react-router-dom'; import { useSpaceSettingsContext } from '../../../../../../../hooks/use_space_settings_context'; - import type { AgentPolicy } from '../../../../../types'; import { useStartServices, @@ -30,6 +31,8 @@ import { sendGetAgentStatus, useAgentPolicyRefresh, useBreadcrumbs, + useFleetStatus, + useLink, } from '../../../../../hooks'; import { AgentPolicyForm, @@ -79,14 +82,17 @@ export const SettingsView = memo<{ agentPolicy: AgentPolicy }>( ({ agentPolicy: originalAgentPolicy }) => { useBreadcrumbs('policy_details', { policyName: originalAgentPolicy.name }); const { notifications } = useStartServices(); + const { spaceId } = useFleetStatus(); const { agents: { enabled: isFleetEnabled }, } = useConfig(); + const { getPath } = useLink(); const hasAllAgentPoliciesPrivileges = useAuthz().fleet.allAgentPolicies; const refreshAgentPolicy = useAgentPolicyRefresh(); const [agentPolicy, setAgentPolicy] = useState({ ...originalAgentPolicy, }); + const history = useHistory(); const spaceSettings = useSpaceSettingsContext(); const [isLoading, setIsLoading] = useState(false); @@ -121,8 +127,15 @@ export const SettingsView = memo<{ agentPolicy: AgentPolicy }>( values: { name: agentPolicy.name }, }) ); - refreshAgentPolicy(); - setHasChanges(false); + if ( + agentPolicy.space_ids && + !agentPolicy.space_ids.includes(spaceId ?? DEFAULT_SPACE_ID) + ) { + history.replace(getPath('policies_list')); + } else { + refreshAgentPolicy(); + setHasChanges(false); + } } else { notifications.toasts.addDanger( error From a22c8b850f4effb0936efbebbc7d924bb4aedede Mon Sep 17 00:00:00 2001 From: Rickyanto Ang Date: Thu, 5 Dec 2024 06:35:42 -0800 Subject: [PATCH 087/141] [Cloud Security][Bug] Fix for Page Crashing (#203028) ## Summary This PR is for quick fix to address issue with Page crashing when user clicks on user name or host name on preview flyout for Alerts Contextual Flyout --- .../cloud_security_posture/components/alerts/alerts_preview.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/security_solution/public/cloud_security_posture/components/alerts/alerts_preview.tsx b/x-pack/plugins/security_solution/public/cloud_security_posture/components/alerts/alerts_preview.tsx index 8edd0b7981936..8592ed61abe33 100644 --- a/x-pack/plugins/security_solution/public/cloud_security_posture/components/alerts/alerts_preview.tsx +++ b/x-pack/plugins/security_solution/public/cloud_security_posture/components/alerts/alerts_preview.tsx @@ -93,7 +93,7 @@ export const AlertsPreview = ({ const { goToEntityInsightTab } = useNavigateEntityInsight({ field, value, - queryIdExtension: 'ALERTS_PREVIEW', + queryIdExtension: isPreviewMode ? 'ALERTS_PREVIEW_TRUE' : 'ALERTS_PREVIEW_FALSE', subTab: CspInsightLeftPanelSubTab.ALERTS, }); const link = useMemo( From d5b28547a6c80206a849de5654b5907b0f87567d Mon Sep 17 00:00:00 2001 From: Artem Shelkovnikov Date: Thu, 5 Dec 2024 15:44:16 +0100 Subject: [PATCH 088/141] Add prompt for connector configuration being in editable mode (#202463) ### Closes https://github.com/elastic/search-team/issues/8547 ## Summary User creates connectors following a set of steps. During configuration step they are able to open configuration form and then click "Next" - configuration will not be saved and user will not be prompted about it. This change adds a prompt for this step - if the configuration is in editable state, the prompt will be shown. It does not check that the form was edited, however, and it's on purpose. I'm open to changing it to only prompt if any value changed, but I feel that it's important to prompt even if no values were entered, just to confirm with the user that they want to move on without specifying any values. https://github.com/user-attachments/assets/af768d6d-282d-4f67-a1d0-c54bcf1cb2d0 ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [ ] 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 - [ ] 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 was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations. - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../configuration/connector_configuration.tsx | 11 ++++++ .../create_connector/configuration_step.tsx | 39 ++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/packages/kbn-search-connectors/components/configuration/connector_configuration.tsx b/packages/kbn-search-connectors/components/configuration/connector_configuration.tsx index cd80b2489012e..8adc6ac2e38c4 100644 --- a/packages/kbn-search-connectors/components/configuration/connector_configuration.tsx +++ b/packages/kbn-search-connectors/components/configuration/connector_configuration.tsx @@ -47,6 +47,7 @@ interface ConnectorConfigurationProps { isLoading: boolean; saveConfig: (configuration: Record) => void; saveAndSync?: (configuration: Record) => void; + onEditStateChange?: (isEdit: boolean) => void; stackManagementLink?: string; subscriptionLink?: string; children?: React.ReactNode; @@ -94,6 +95,7 @@ export const ConnectorConfigurationComponent: FC< isLoading, saveConfig, saveAndSync, + onEditStateChange, subscriptionLink, stackManagementLink, }) => { @@ -110,6 +112,15 @@ export const ConnectorConfigurationComponent: FC< ); const [isEditing, setIsEditing] = useState(false); + useEffect( + function propogateEditState() { + if (onEditStateChange) { + onEditStateChange(isEditing); + } + }, + [isEditing, onEditStateChange] + ); + useEffect(() => { if (!isDeepEqual(configuration, configurationRef.current)) { configurationRef.current = configuration; diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/create_connector/configuration_step.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/create_connector/configuration_step.tsx index 9749c49ea4d68..f8bff23aa56a1 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/create_connector/configuration_step.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connectors/create_connector/configuration_step.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import { useActions, useValues } from 'kea'; @@ -21,6 +21,7 @@ import { } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; import { ConnectorConfigurationComponent, ConnectorStatus } from '@kbn/search-connectors'; @@ -40,6 +41,8 @@ export const ConfigurationStep: React.FC = ({ title, set const { connector } = useValues(ConnectorViewLogic); const { updateConnectorConfiguration } = useActions(ConnectorViewLogic); const { setFormDirty } = useActions(NewConnectorLogic); + const { overlays } = useKibana().services; + const [isFormEditing, setIsFormEditing] = useState(false); const { status } = useValues(ConnectorConfigurationApiLogic); const isSyncing = false; @@ -77,6 +80,7 @@ export const ConfigurationStep: React.FC = ({ title, set connectorId: connector.id, }); }} + onEditStateChange={setIsFormEditing} /> {isSyncing && ( @@ -111,7 +115,38 @@ export const ConfigurationStep: React.FC = ({ title, set { + onClick={async () => { + if (isFormEditing) { + const confirmResponse = await overlays?.openConfirm( + i18n.translate('xpack.enterpriseSearch.configureConnector.unsavedPrompt.body', { + defaultMessage: + 'You are still editing connector configuration, are you sure you want to continue without saving? You can complete the setup later in the connector configuration page, but this guided flow offers more help.', + }), + { + title: i18n.translate( + 'xpack.enterpriseSearch.configureConnector.unsavedPrompt.title', + { + defaultMessage: 'Connector configuration is not saved', + } + ), + cancelButtonText: i18n.translate( + 'xpack.enterpriseSearch.configureConnector.unsavedPrompt.cancel', + { + defaultMessage: 'Continue setup', + } + ), + confirmButtonText: i18n.translate( + 'xpack.enterpriseSearch.configureConnector.unsavedPrompt.confirm', + { + defaultMessage: 'Leave the page', + } + ), + } + ); + if (!confirmResponse) { + return; + } + } setFormDirty(false); setCurrentStep('finish'); }} From b5a8063c3a1480050e7bf7310e9cc0e209643931 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Thu, 5 Dec 2024 15:47:32 +0100 Subject: [PATCH 089/141] [UA] Ensure that old indices are detected for reindexing (#203082) ## Summary We need to handle the following response shape from `GET _migration/deprecations` ```jsonc "myindex": [ { "level": "critical", "message": "Old index with a compatibility version < 8.0", // specifically this message "url": "https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-9.0.html", "details": "This index has version: 7.17.25", "resolve_during_rolling_upgrade": false } ] ``` Screenshot 2024-12-05 at 12 44 59 ## To reviewers These changes were developed/tested on `8.x` and must be backported. Related * https://github.com/elastic/kibana/issues/202669 * https://github.com/elastic/elasticsearch/issues/118062 --- .../lib/__fixtures__/fake_deprecations.json | 9 +++++++++ .../__snapshots__/index.test.ts.snap | 15 ++++++++++++++- .../get_corrective_actions.ts | 10 +++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/upgrade_assistant/server/lib/__fixtures__/fake_deprecations.json b/x-pack/plugins/upgrade_assistant/server/lib/__fixtures__/fake_deprecations.json index f53e4176096cc..953223902159d 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/__fixtures__/fake_deprecations.json +++ b/x-pack/plugins/upgrade_assistant/server/lib/__fixtures__/fake_deprecations.json @@ -147,6 +147,15 @@ "details": "[[type: tweet, field: liked]]", "resolve_during_rolling_upgrade": false } + ], + "myindex": [ + { + "level": "critical", + "message": "Old index with a compatibility version < 8.0", + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-9.0.html", + "details": "This index has version: 7.17.25", + "resolve_during_rolling_upgrade": false + } ] }, "data_streams": { diff --git a/x-pack/plugins/upgrade_assistant/server/lib/es_deprecations_status/__snapshots__/index.test.ts.snap b/x-pack/plugins/upgrade_assistant/server/lib/es_deprecations_status/__snapshots__/index.test.ts.snap index b0d5d99a37497..7f6b7826da8a8 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/es_deprecations_status/__snapshots__/index.test.ts.snap +++ b/x-pack/plugins/upgrade_assistant/server/lib/es_deprecations_status/__snapshots__/index.test.ts.snap @@ -158,6 +158,19 @@ Object { "type": "index_settings", "url": "https://www.elastic.co/guide/en/elasticsearch/reference/6.0/breaking_60_mappings_changes.html#_coercion_of_boolean_fields", }, + Object { + "correctiveAction": Object { + "blockerForReindexing": undefined, + "type": "reindex", + }, + "details": "This index has version: 7.17.25", + "index": "myindex", + "isCritical": true, + "message": "Old index with a compatibility version < 8.0", + "resolveDuringUpgrade": false, + "type": "index_settings", + "url": "https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-9.0.html", + }, Object { "correctiveAction": undefined, "details": "This data stream has backing indices that were created before Elasticsearch 8.0.0", @@ -169,6 +182,6 @@ Object { "url": "https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-9.0.html", }, ], - "totalCriticalDeprecations": 5, + "totalCriticalDeprecations": 6, } `; diff --git a/x-pack/plugins/upgrade_assistant/server/lib/es_deprecations_status/get_corrective_actions.ts b/x-pack/plugins/upgrade_assistant/server/lib/es_deprecations_status/get_corrective_actions.ts index be696acb18095..d971625c818ea 100644 --- a/x-pack/plugins/upgrade_assistant/server/lib/es_deprecations_status/get_corrective_actions.ts +++ b/x-pack/plugins/upgrade_assistant/server/lib/es_deprecations_status/get_corrective_actions.ts @@ -20,6 +20,12 @@ type EsMetadata = Actions & { [key: string]: string; }; +// TODO(jloleysens): Replace these regexes once this issue is addressed https://github.com/elastic/elasticsearch/issues/118062 +const ES_INDEX_MESSAGES_REQIURING_REINDEX = [ + /Index created before/, + /index with a compatibility version \ action.action_type === 'remove_settings' && typeof indexName === 'undefined' ); - const requiresReindexAction = /Index created before/.test(message); + const requiresReindexAction = ES_INDEX_MESSAGES_REQIURING_REINDEX.some((regexp) => + regexp.test(message) + ); const requiresIndexSettingsAction = Boolean(indexSettingDeprecation); const requiresClusterSettingsAction = Boolean(clusterSettingDeprecation); const requiresMlAction = /[Mm]odel snapshot/.test(message); From fad7f547905d9b9c96fba14bfb066b81f2677384 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Thu, 5 Dec 2024 08:26:41 -0700 Subject: [PATCH 090/141] Preparation for High Contrast Mode, Core/SharedUX domains (#202606) ## Summary **Reviewers: Please test the code paths affected by this PR. See the "Risks" section below.** Part of work for enabling "high contrast mode" in Kibana. See https://github.com/elastic/kibana/issues/176219. **Background:** Kibana will soon have a user profile setting to allow users to enable "high contrast mode." This setting will activate a flag with `` that causes EUI components to render with higher contrast visual elements. Consumer plugins and packages need to be updated selected places where `` is wrapped, to pass the `UserProfileService` service dependency from the CoreStart contract. **NOTE:** **EUI currently does not yet support the high-contrast mode flag**, but support for that is expected to come in around 2 weeks. These first PRs are simply preparing the code by wiring up the `UserProvideService`. ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [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] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) ### Risks Does this PR introduce any risks? For example, consider risks like hard to test bugs, performance regression, potential of data loss. Describe the risk, its severity, and mitigation for each identified risk. Invite stakeholders and evaluate how to proceed before merging. - [ ] [medium/high] The implementor of this change did not manually test the affected code paths and relied on type-checking and functional tests to drive the changes. Code owners for this PR need to manually test the affected code paths. - [ ] [medium] The `UserProfileService` dependency comes from the CoreStart contract. If acquiring the service causes synchronous code to become asynchronous, check for race conditions or errors in rendering React components. Code owners for this PR need to manually test the affected code paths. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- examples/developer_examples/public/app.tsx | 2 + examples/developer_examples/public/plugin.ts | 4 +- examples/routing_example/public/services.ts | 6 +- .../public/hello_world_action.tsx | 2 +- .../public/hello_world_example.tsx | 2 +- .../cloud/connection_details/kibana/global.ts | 1 + .../kibana/open_connection_details.tsx | 1 + .../content_editor/src/services.tsx | 2 + .../content_editor/tsconfig.json | 1 + .../table_list_view_table/src/services.tsx | 3 +- .../src/core_app.ts | 8 +- .../src/errors/public_base_url.test.tsx | 9 +- .../src/errors/public_base_url.tsx | 2 + .../core-apps-browser-internal/tsconfig.json | 4 +- .../src/chrome_service.test.tsx | 2 + .../tsconfig.json | 1 + .../src/notifications_service.ts | 20 +--- .../__snapshots__/error_toast.test.tsx.snap | 10 ++ .../toasts_service.test.tsx.snap | 10 ++ .../src/toasts/error_toast.test.tsx | 3 + .../src/toasts/error_toast.tsx | 7 +- .../src/toasts/toasts_api.test.ts | 4 + .../src/toasts/toasts_api.tsx | 39 +++---- .../src/toasts/toasts_service.test.tsx | 6 + .../src/toasts/toasts_service.tsx | 8 +- .../tsconfig.json | 4 +- .../src/banners/banners_service.test.ts | 2 + .../src/banners/banners_service.tsx | 2 + .../src/banners/user_banner_service.test.ts | 3 + .../src/banners/user_banner_service.tsx | 2 + .../flyout_service.test.tsx.snap | 30 +++++ .../src/flyout/flyout_service.test.tsx | 3 + .../src/flyout/flyout_service.tsx | 17 ++- .../__snapshots__/modal_service.test.tsx.snap | 110 ++++++++++++++++++ .../src/modal/modal_service.test.tsx | 3 + .../src/modal/modal_service.tsx | 8 +- .../src/overlay_service.ts | 16 ++- .../tsconfig.json | 2 + .../src/rendering_service.test.tsx | 5 +- .../src/rendering_service.tsx | 2 + .../tsconfig.json | 4 +- .../src/core_system.test.ts | 2 + .../src/core_system.ts | 4 + .../src/core_theme_provider.test.tsx | 10 +- .../src/core_theme_provider.tsx | 7 +- .../core-theme-browser-internal/tsconfig.json | 2 + .../src/user_profile_service.mock.ts | 5 +- .../panel_actions/get_csv_panel_action.tsx | 15 +-- .../public/share/share_context_menu/index.ts | 1 + packages/kbn-storybook/src/lib/decorators.tsx | 5 +- .../kibana_context/root/eui_provider.test.tsx | 16 ++- .../kibana_context/root/eui_provider.tsx | 13 ++- .../root/root_provider.test.tsx | 8 +- .../react/kibana_context/root/tsconfig.json | 2 + .../theme/theme_provider.test.tsx | 9 +- .../kibana_context/theme/theme_provider.tsx | 14 ++- .../react/kibana_context/theme/tsconfig.json | 2 + .../react/kibana_context/theme/with_theme.tsx | 9 +- .../kibana_mount/to_mount_point.test.tsx | 11 +- .../react/kibana_mount/to_mount_point.tsx | 2 +- packages/react/kibana_mount/tsconfig.json | 1 + .../home/public/application/application.tsx | 2 +- src/plugins/kibana_react/public/theme.tsx | 23 +++- .../kibana_react/public/util/index.tsx | 6 +- src/plugins/kibana_react/tsconfig.json | 1 + .../public/history/redirect_when_missing.tsx | 5 +- .../theme/kibana_theme_provider.test.tsx | 6 +- .../public/theme/kibana_theme_provider.tsx | 9 +- src/plugins/kibana_utils/tsconfig.json | 2 + .../saved_objects/public/kibana_services.ts | 1 + .../show_saved_object_save_modal.tsx | 4 +- src/plugins/saved_objects/public/types.ts | 2 +- .../public/services/share_menu_manager.tsx | 18 ++- .../url_service/redirect/components/page.tsx | 8 +- .../url_service/redirect/redirect_manager.ts | 3 +- src/plugins/share/tsconfig.json | 1 + src/plugins/telemetry/public/mocks.ts | 2 + ...render_opt_in_status_notice_banner.test.ts | 3 + .../render_opt_in_status_notice_banner.tsx | 3 +- .../telemetry_notifications.ts | 7 +- src/plugins/telemetry/tsconfig.json | 1 + .../public/context_menu/open_context_menu.tsx | 9 +- src/plugins/ui_actions/public/plugin.ts | 3 +- src/plugins/ui_actions/public/services.ts | 10 +- .../tests/test_samples/hello_world_action.tsx | 2 +- .../public/application.tsx | 2 + .../core_plugin_helpmenu/tsconfig.json | 3 +- .../public/app/http_context.ts | 2 + .../screenshotting_example/public/plugin.tsx | 4 +- .../global_search_bar/public/plugin.tsx | 4 +- .../licensing/public/expired_banner.tsx | 2 +- x-pack/plugins/reporting/public/plugin.ts | 15 +-- x-pack/plugins/reporting/public/types.ts | 1 + .../saved_objects_tagging/public/types.ts | 2 +- x-pack/plugins/serverless/public/plugin.tsx | 4 +- 95 files changed, 514 insertions(+), 164 deletions(-) diff --git a/examples/developer_examples/public/app.tsx b/examples/developer_examples/public/app.tsx index 0f0c0e4429356..0e915eeccf1ec 100644 --- a/examples/developer_examples/public/app.tsx +++ b/examples/developer_examples/public/app.tsx @@ -28,6 +28,7 @@ import { AppMountParameters, I18nStart, ThemeServiceStart, + UserProfileService, } from '@kbn/core/public'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { ExampleDefinition } from './types'; @@ -36,6 +37,7 @@ interface StartServices { analytics: Pick; i18n: I18nStart; theme: Pick; + userProfile: UserProfileService; } interface Props { diff --git a/examples/developer_examples/public/plugin.ts b/examples/developer_examples/public/plugin.ts index b7f676ad9a71a..478da722775a5 100644 --- a/examples/developer_examples/public/plugin.ts +++ b/examples/developer_examples/public/plugin.ts @@ -28,10 +28,10 @@ export class DeveloperExamplesPlugin implements Plugin coreStart.application.navigateToApp(appId), getUrlForApp: (appId: string) => coreStart.application.getUrlForApp(appId), diff --git a/examples/routing_example/public/services.ts b/examples/routing_example/public/services.ts index 7ec7d408c1b6b..ac6bfbc5f1690 100644 --- a/examples/routing_example/public/services.ts +++ b/examples/routing_example/public/services.ts @@ -12,6 +12,7 @@ import type { CoreStart, I18nStart, ThemeServiceStart, + UserProfileService, } from '@kbn/core/public'; import type { IHttpFetchError } from '@kbn/core-http-browser'; import { @@ -25,6 +26,7 @@ interface StartServices { analytics: Pick; i18n: I18nStart; theme: Pick; + userProfile: UserProfileService; } export interface Services { @@ -37,8 +39,8 @@ export interface Services { } export function getServices(core: CoreStart): Services { - const { analytics, i18n, theme } = core; - const startServices = { analytics, i18n, theme }; + const { analytics, i18n, theme, userProfile } = core; + const startServices = { analytics, i18n, theme, userProfile }; return { startServices, diff --git a/examples/ui_action_examples/public/hello_world_action.tsx b/examples/ui_action_examples/public/hello_world_action.tsx index 7597ec75a2fe0..52a808ed48641 100644 --- a/examples/ui_action_examples/public/hello_world_action.tsx +++ b/examples/ui_action_examples/public/hello_world_action.tsx @@ -14,7 +14,7 @@ import { toMountPoint } from '@kbn/react-kibana-mount'; export const ACTION_HELLO_WORLD = 'ACTION_HELLO_WORLD'; -type StartServices = Pick; +type StartServices = Pick; export const createHelloWorldActionDefinition = ( getStartServices: () => Promise diff --git a/examples/ui_actions_explorer/public/hello_world_example.tsx b/examples/ui_actions_explorer/public/hello_world_example.tsx index bcf4ed7e24fe5..33b201e83adcf 100644 --- a/examples/ui_actions_explorer/public/hello_world_example.tsx +++ b/examples/ui_actions_explorer/public/hello_world_example.tsx @@ -19,7 +19,7 @@ const DYNAMIC_ACTION_ID = `${ACTION_HELLO_WORLD}-Waldo`; interface Props { uiActionsStartService: UiActionsStart; - startServices: Pick; + startServices: Pick; } export const HelloWorldExample = ({ uiActionsStartService, startServices }: Props) => { diff --git a/packages/cloud/connection_details/kibana/global.ts b/packages/cloud/connection_details/kibana/global.ts index 40c883bc06375..5bd205c7bf459 100644 --- a/packages/cloud/connection_details/kibana/global.ts +++ b/packages/cloud/connection_details/kibana/global.ts @@ -21,6 +21,7 @@ export interface ConnectionDetailsGlobalDependencies { http: CoreStart['http']; application: CoreStart['application']; overlays: CoreStart['overlays']; + userProfile: CoreStart['userProfile']; }; plugins: { cloud?: CloudStart; diff --git a/packages/cloud/connection_details/kibana/open_connection_details.tsx b/packages/cloud/connection_details/kibana/open_connection_details.tsx index 8d231e2645ab0..f055a8ddaf70f 100644 --- a/packages/cloud/connection_details/kibana/open_connection_details.tsx +++ b/packages/cloud/connection_details/kibana/open_connection_details.tsx @@ -21,6 +21,7 @@ export interface OpenConnectionDetailsParams { i18n: CoreStart['i18n']; analytics?: CoreStart['analytics']; theme: CoreStart['theme']; + userProfile: CoreStart['userProfile']; }; }; } diff --git a/packages/content-management/content_editor/src/services.tsx b/packages/content-management/content_editor/src/services.tsx index ee0e66b10300c..7170940665188 100644 --- a/packages/content-management/content_editor/src/services.tsx +++ b/packages/content-management/content_editor/src/services.tsx @@ -20,6 +20,7 @@ import type { I18nStart } from '@kbn/core-i18n-browser'; import type { MountPoint, OverlayRef } from '@kbn/core-mount-utils-browser'; import type { OverlayFlyoutOpenOptions } from '@kbn/core-overlays-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import { toMountPoint } from '@kbn/react-kibana-mount'; type NotifyFn = (title: JSX.Element, text?: string) => void; @@ -68,6 +69,7 @@ interface ContentEditorStartServices { analytics: Pick; i18n: I18nStart; theme: Pick; + userProfile: UserProfileService; } /** diff --git a/packages/content-management/content_editor/tsconfig.json b/packages/content-management/content_editor/tsconfig.json index 565535ec85b3e..832da409a06fd 100644 --- a/packages/content-management/content_editor/tsconfig.json +++ b/packages/content-management/content_editor/tsconfig.json @@ -30,6 +30,7 @@ "@kbn/test-jest-helpers", "@kbn/react-kibana-mount", "@kbn/content-management-user-profiles", + "@kbn/core-user-profile-browser", ], "exclude": [ "target/**/*" diff --git a/packages/content-management/table_list_view_table/src/services.tsx b/packages/content-management/table_list_view_table/src/services.tsx index ab6e875789278..a8c3d3cc9f60b 100644 --- a/packages/content-management/table_list_view_table/src/services.tsx +++ b/packages/content-management/table_list_view_table/src/services.tsx @@ -24,7 +24,7 @@ import type { I18nStart } from '@kbn/core-i18n-browser'; import type { MountPoint, OverlayRef } from '@kbn/core-mount-utils-browser'; import type { OverlayFlyoutOpenOptions } from '@kbn/core-overlays-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; -import type { UserProfileServiceStart } from '@kbn/core-user-profile-browser'; +import type { UserProfileService, UserProfileServiceStart } from '@kbn/core-user-profile-browser'; import type { FormattedRelative } from '@kbn/i18n-react'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { RedirectAppLinksKibanaProvider } from '@kbn/shared-ux-link-redirect-app'; @@ -100,6 +100,7 @@ interface TableListViewStartServices { analytics: Pick; i18n: I18nStart; theme: Pick; + userProfile: UserProfileService; } /** diff --git a/packages/core/apps/core-apps-browser-internal/src/core_app.ts b/packages/core/apps/core-apps-browser-internal/src/core_app.ts index 419efaef039fe..87f921133421b 100644 --- a/packages/core/apps/core-apps-browser-internal/src/core_app.ts +++ b/packages/core/apps/core-apps-browser-internal/src/core_app.ts @@ -22,6 +22,7 @@ import type { import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import { renderApp as renderStatusApp } from './status'; import { renderApp as renderErrorApp, @@ -45,6 +46,7 @@ export interface CoreAppsServiceStartDeps { analytics: AnalyticsServiceStart; i18n: I18nStart; theme: ThemeServiceStart; + userProfile: UserProfileService; } export class CoreAppsService { @@ -86,9 +88,7 @@ export class CoreAppsService { http, notifications, uiSettings, - analytics, - i18n, - theme, + ...startDeps }: CoreAppsServiceStartDeps) { if (!application.history) { return; @@ -101,7 +101,7 @@ export class CoreAppsService { uiSettings, }); - setupPublicBaseUrlConfigWarning({ docLinks, http, notifications, analytics, i18n, theme }); + setupPublicBaseUrlConfigWarning({ docLinks, http, notifications, ...startDeps }); } public stop() { diff --git a/packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.test.tsx b/packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.test.tsx index 58743f339accc..20159d54116a4 100644 --- a/packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.test.tsx +++ b/packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.test.tsx @@ -13,6 +13,7 @@ import { httpServiceMock } from '@kbn/core-http-browser-mocks'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; import { notificationServiceMock } from '@kbn/core-notifications-browser-mocks'; import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import { setupPublicBaseUrlConfigWarning } from './public_base_url'; @@ -22,12 +23,8 @@ describe('publicBaseUrl warning', () => { const i18nStart = i18nServiceMock.createStartContract(); const analytics = analyticsServiceMock.createAnalyticsServiceStart(); const theme = themeServiceMock.createStartContract(); - const startServices = { - notifications, - analytics, - i18n: i18nStart, - theme, - }; + const userProfile = userProfileServiceMock.createStart(); + const startServices = { notifications, analytics, i18n: i18nStart, theme, userProfile }; const addWarningToastSpy = jest.spyOn(notifications.toasts, 'addWarning'); beforeEach(() => { diff --git a/packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.tsx b/packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.tsx index 758c85ed04816..a0b8baf8e815c 100644 --- a/packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.tsx +++ b/packages/core/apps/core-apps-browser-internal/src/errors/public_base_url.tsx @@ -16,6 +16,7 @@ import type { DocLinksStart } from '@kbn/core-doc-links-browser'; import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import type { InternalHttpStart } from '@kbn/core-http-browser-internal'; import type { NotificationsStart } from '@kbn/core-notifications-browser'; import { mountReactNode } from '@kbn/core-mount-utils-browser-internal'; @@ -35,6 +36,7 @@ interface Deps { analytics: AnalyticsServiceStart; i18n: I18nStart; theme: ThemeServiceStart; + userProfile: UserProfileService; } export const setupPublicBaseUrlConfigWarning = ({ diff --git a/packages/core/apps/core-apps-browser-internal/tsconfig.json b/packages/core/apps/core-apps-browser-internal/tsconfig.json index 9902b12732760..499f4b975f6d8 100644 --- a/packages/core/apps/core-apps-browser-internal/tsconfig.json +++ b/packages/core/apps/core-apps-browser-internal/tsconfig.json @@ -40,7 +40,9 @@ "@kbn/react-kibana-context-render", "@kbn/core-analytics-browser-mocks", "@kbn/core-i18n-browser-mocks", - "@kbn/core-theme-browser-mocks" + "@kbn/core-theme-browser-mocks", + "@kbn/core-user-profile-browser", + "@kbn/core-user-profile-browser-mocks" ], "exclude": [ "target/**/*" diff --git a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx index 4994302c2e756..ade55365409cb 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.test.tsx @@ -24,6 +24,7 @@ import { customBrandingServiceMock } from '@kbn/core-custom-branding-browser-moc import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import { getAppInfo } from '@kbn/core-application-browser-internal'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { findTestSubject } from '@kbn/test-jest-helpers'; @@ -55,6 +56,7 @@ function defaultStartDeps(availableApps?: App[], currentAppId?: string) { analytics: analyticsServiceMock.createAnalyticsServiceStart(), i18n: i18nServiceMock.createStartContract(), theme: themeServiceMock.createStartContract(), + userProfile: userProfileServiceMock.createStart(), application: applicationServiceMock.createInternalStartContract(currentAppId), docLinks: docLinksServiceMock.createStartContract(), http: httpServiceMock.createStartContract(), diff --git a/packages/core/chrome/core-chrome-browser-internal/tsconfig.json b/packages/core/chrome/core-chrome-browser-internal/tsconfig.json index d4512b515f640..ca9e5d5576ad9 100644 --- a/packages/core/chrome/core-chrome-browser-internal/tsconfig.json +++ b/packages/core/chrome/core-chrome-browser-internal/tsconfig.json @@ -55,6 +55,7 @@ "@kbn/core-theme-browser-mocks", "@kbn/react-kibana-context-render", "@kbn/recently-accessed", + "@kbn/core-user-profile-browser-mocks", ], "exclude": [ "target/**/*", diff --git a/packages/core/notifications/core-notifications-browser-internal/src/notifications_service.ts b/packages/core/notifications/core-notifications-browser-internal/src/notifications_service.ts index 280dd9887b995..a9abdcedede5f 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/notifications_service.ts +++ b/packages/core/notifications/core-notifications-browser-internal/src/notifications_service.ts @@ -12,6 +12,7 @@ import { i18n } from '@kbn/i18n'; import { Subscription } from 'rxjs'; import type { AnalyticsServiceStart, AnalyticsServiceSetup } from '@kbn/core-analytics-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import type { OverlayStart } from '@kbn/core-overlays-browser'; @@ -29,6 +30,7 @@ export interface StartDeps { i18n: I18nStart; overlays: OverlayStart; theme: ThemeServiceStart; + userProfile: UserProfileService; analytics: AnalyticsServiceStart; targetDomElement: HTMLElement; } @@ -62,36 +64,26 @@ export class NotificationsService { return notificationSetup; } - public start({ - analytics, - i18n: i18nDep, - overlays, - theme, - targetDomElement, - }: StartDeps): NotificationsStart { + public start({ overlays, targetDomElement, ...startDeps }: StartDeps): NotificationsStart { this.targetDomElement = targetDomElement; const toastsContainer = document.createElement('div'); targetDomElement.appendChild(toastsContainer); - const eventReporter = new EventReporter({ analytics }); + const eventReporter = new EventReporter({ analytics: startDeps.analytics }); return { toasts: this.toasts.start({ eventReporter, - i18n: i18nDep, overlays, - analytics, - theme, targetDomElement: toastsContainer, + ...startDeps, }), showErrorDialog: ({ title, error }) => showErrorDialog({ title, error, openModal: overlays.openModal, - analytics, - i18n: i18nDep, - theme, + ...startDeps, }), }; } diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/error_toast.test.tsx.snap b/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/error_toast.test.tsx.snap index cb82dd49db745..73b165848162e 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/error_toast.test.tsx.snap +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/__snapshots__/error_toast.test.tsx.snap @@ -29,6 +29,16 @@ exports[`renders matching snapshot 1`] = ` }, } } + userProfile={ + Object { + "bulkGet": [MockFunction], + "getCurrent": [MockFunction], + "getUserProfile$": [MockFunction], + "partialUpdate": [MockFunction], + "suggest": [MockFunction], + "update": [MockFunction], + } + } >

    (openModal = jest.fn())); @@ -39,6 +41,7 @@ function render(props: ErrorToastProps = {}) { analytics={mockAnalytics} i18n={mockI18n} theme={mockTheme} + userProfile={mockUserProfile} /> ); } diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/error_toast.tsx b/packages/core/notifications/core-notifications-browser-internal/src/toasts/error_toast.tsx index c8c914f2ef9d7..2805fc2bc14a8 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/toasts/error_toast.tsx +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/error_toast.tsx @@ -25,11 +25,13 @@ import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { OverlayStart } from '@kbn/core-overlays-browser'; import { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; interface StartServices { analytics: AnalyticsServiceStart; i18n: I18nStart; + userProfile: UserProfileService; theme: ThemeServiceStart; } @@ -62,7 +64,10 @@ export function showErrorDialog({ error, openModal, ...startServices -}: Pick) { +}: Pick< + ErrorToastProps, + 'error' | 'title' | 'openModal' | 'analytics' | 'i18n' | 'userProfile' | 'theme' +>) { let text = ''; if (isRequestError(error)) { diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_api.test.ts b/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_api.test.ts index 503bdb63578da..253c6376eb9b1 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_api.test.ts +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_api.test.ts @@ -12,8 +12,10 @@ import { firstValueFrom } from 'rxjs'; import { ToastsApi } from './toasts_api'; import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; +import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; async function getCurrentToasts(toasts: ToastsApi) { return await firstValueFrom(toasts.get$()); @@ -45,8 +47,10 @@ function toastDeps() { function startDeps() { return { overlays: {} as any, + analytics: analyticsServiceMock.createAnalyticsServiceStart(), i18n: i18nServiceMock.createStartContract(), theme: themeServiceMock.createStartContract(), + userProfile: userProfileServiceMock.createStart(), }; } diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_api.tsx b/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_api.tsx index 7d6ab2f93b88f..ece936f0cf6ce 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_api.tsx +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_api.tsx @@ -24,7 +24,8 @@ import type { ToastInputFields, ToastOptions, } from '@kbn/core-notifications-browser'; -import { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import { ErrorToast } from './error_toast'; const normalizeToast = (toastOrTitle: ToastInput): ToastInputFields => { @@ -36,6 +37,14 @@ const normalizeToast = (toastOrTitle: ToastInput): ToastInputFields => { return omitBy(toastOrTitle, isUndefined); }; +interface StartDeps { + analytics: AnalyticsServiceStart; + overlays: OverlayStart; + i18n: I18nStart; + theme: ThemeServiceStart; + userProfile: UserProfileService; +} + /** * Methods for adding and removing global toast messages. * @public @@ -45,28 +54,15 @@ export class ToastsApi implements IToasts { private idCounter = 0; private uiSettings: IUiSettingsClient; - private overlays?: OverlayStart; - private analytics?: AnalyticsServiceStart; - private i18n?: I18nStart; - private theme?: ThemeServiceStart; + private startDeps?: StartDeps; constructor(deps: { uiSettings: IUiSettingsClient }) { this.uiSettings = deps.uiSettings; } /** @internal */ - public start({ - overlays, - i18n, - theme, - }: { - overlays: OverlayStart; - i18n: I18nStart; - theme: ThemeServiceStart; - }) { - this.overlays = overlays; - this.i18n = i18n; - this.theme = theme; + public start(startDeps: StartDeps) { + this.startDeps = startDeps; } /** Observable of the toast messages to show to the user. */ @@ -190,9 +186,7 @@ export class ToastsApi implements IToasts { error={error} title={options.title} toastMessage={message} - analytics={this.analytics!} - i18n={this.i18n!} - theme={this.theme!} + {...this.startDeps!} /> ), ...options, @@ -202,12 +196,13 @@ export class ToastsApi implements IToasts { private openModal( ...args: Parameters ): ReturnType { - if (!this.overlays) { + const { overlays } = this.startDeps ?? {}; + if (!overlays) { // This case should never happen because no rendering should be occurring // before the ToastService is started. throw new Error(`Modal opened before ToastService was started.`); } - return this.overlays.openModal(...args); + return overlays.openModal(...args); } } diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_service.test.tsx b/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_service.test.tsx index 4fa2d6f27db73..d350b9b8d62ca 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_service.test.tsx +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_service.test.tsx @@ -13,6 +13,7 @@ import { ToastsService } from './toasts_service'; import { ToastsApi } from './toasts_api'; import { overlayServiceMock } from '@kbn/core-overlays-browser-mocks'; import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; import { EventReporter } from './telemetry'; @@ -25,6 +26,7 @@ const mockI18n: any = { const mockOverlays = overlayServiceMock.createStartContract(); const mockTheme = themeServiceMock.createStartContract(); +const mockUserProfile = userProfileServiceMock.createStart(); const mockAnalytics = analyticsServiceMock.createAnalyticsServiceStart(); const eventReporter = new EventReporter({ analytics: mockAnalytics }); @@ -51,6 +53,7 @@ describe('#start()', () => { analytics: mockAnalytics, i18n: mockI18n, theme: mockTheme, + userProfile: mockUserProfile, targetDomElement, overlays: mockOverlays, eventReporter, @@ -70,6 +73,7 @@ describe('#start()', () => { analytics: mockAnalytics, i18n: mockI18n, theme: mockTheme, + userProfile: mockUserProfile, targetDomElement, overlays: mockOverlays, eventReporter, @@ -89,6 +93,7 @@ describe('#stop()', () => { analytics: mockAnalytics, i18n: mockI18n, theme: mockTheme, + userProfile: mockUserProfile, targetDomElement, overlays: mockOverlays, eventReporter, @@ -115,6 +120,7 @@ describe('#stop()', () => { analytics: mockAnalytics, i18n: mockI18n, theme: mockTheme, + userProfile: mockUserProfile, targetDomElement, overlays: mockOverlays, eventReporter, diff --git a/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_service.tsx b/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_service.tsx index 44166df388c4c..c37313e9613c1 100644 --- a/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_service.tsx +++ b/packages/core/notifications/core-notifications-browser-internal/src/toasts/toasts_service.tsx @@ -12,6 +12,7 @@ import { render, unmountComponentAtNode } from 'react-dom'; import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import type { OverlayStart } from '@kbn/core-overlays-browser'; @@ -29,6 +30,7 @@ interface StartDeps { i18n: I18nStart; overlays: OverlayStart; theme: ThemeServiceStart; + userProfile: UserProfileService; eventReporter: EventReporter; targetDomElement: HTMLElement; } @@ -42,12 +44,12 @@ export class ToastsService { return this.api!; } - public start({ eventReporter, analytics, i18n, overlays, theme, targetDomElement }: StartDeps) { - this.api!.start({ overlays, i18n, theme }); + public start({ eventReporter, overlays, targetDomElement, ...startDeps }: StartDeps) { + this.api!.start({ overlays, ...startDeps }); this.targetDomElement = targetDomElement; render( - + this.api!.remove(toastId)} toasts$={this.api!.get$()} diff --git a/packages/core/notifications/core-notifications-browser-internal/tsconfig.json b/packages/core/notifications/core-notifications-browser-internal/tsconfig.json index c3582c1b8925b..0aa4081925399 100644 --- a/packages/core/notifications/core-notifications-browser-internal/tsconfig.json +++ b/packages/core/notifications/core-notifications-browser-internal/tsconfig.json @@ -30,7 +30,9 @@ "@kbn/core-mount-utils-browser", "@kbn/react-kibana-context-render", "@kbn/core-analytics-browser", - "@kbn/core-analytics-browser-mocks" + "@kbn/core-analytics-browser-mocks", + "@kbn/core-user-profile-browser", + "@kbn/core-user-profile-browser-mocks" ], "exclude": [ "target/**/*", diff --git a/packages/core/overlays/core-overlays-browser-internal/src/banners/banners_service.test.ts b/packages/core/overlays/core-overlays-browser-internal/src/banners/banners_service.test.ts index 40174b5dcff42..d54902ed8ad9d 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/banners/banners_service.test.ts +++ b/packages/core/overlays/core-overlays-browser-internal/src/banners/banners_service.test.ts @@ -13,6 +13,7 @@ import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; describe('OverlayBannersService', () => { let service: InternalOverlayBannersStart; @@ -22,6 +23,7 @@ describe('OverlayBannersService', () => { i18n: i18nServiceMock.createStartContract(), theme: themeServiceMock.createStartContract(), uiSettings: uiSettingsServiceMock.createStartContract(), + userProfile: userProfileServiceMock.createStart(), }); }); diff --git a/packages/core/overlays/core-overlays-browser-internal/src/banners/banners_service.tsx b/packages/core/overlays/core-overlays-browser-internal/src/banners/banners_service.tsx index 31a43407ba8be..5147d49e897c7 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/banners/banners_service.tsx +++ b/packages/core/overlays/core-overlays-browser-internal/src/banners/banners_service.tsx @@ -14,6 +14,7 @@ import { map } from 'rxjs'; import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import type { MountPoint } from '@kbn/core-mount-utils-browser'; import type { OverlayBannersStart } from '@kbn/core-overlays-browser'; @@ -25,6 +26,7 @@ interface StartServices { analytics: AnalyticsServiceStart; i18n: I18nStart; theme: ThemeServiceStart; + userProfile: UserProfileService; } interface StartDeps extends StartServices { diff --git a/packages/core/overlays/core-overlays-browser-internal/src/banners/user_banner_service.test.ts b/packages/core/overlays/core-overlays-browser-internal/src/banners/user_banner_service.test.ts index 9297e645a033f..a9023f025d4ba 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/banners/user_banner_service.test.ts +++ b/packages/core/overlays/core-overlays-browser-internal/src/banners/user_banner_service.test.ts @@ -13,6 +13,7 @@ import { overlayBannersServiceMock } from './banners_service.test.mocks'; import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import { Subject } from 'rxjs'; describe('OverlayBannersService', () => { @@ -20,6 +21,7 @@ describe('OverlayBannersService', () => { let service: UserBannerService; let uiSettings: ReturnType; let banners: ReturnType; + let userProfile: ReturnType; const startService = (content?: string) => { bannerContent = content; @@ -40,6 +42,7 @@ describe('OverlayBannersService', () => { i18n: i18nServiceMock.createStartContract(), theme: themeServiceMock.createStartContract(), uiSettings, + userProfile, }); }; diff --git a/packages/core/overlays/core-overlays-browser-internal/src/banners/user_banner_service.tsx b/packages/core/overlays/core-overlays-browser-internal/src/banners/user_banner_service.tsx index 7b7c2e45e8e39..94bc96c9b0c05 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/banners/user_banner_service.tsx +++ b/packages/core/overlays/core-overlays-browser-internal/src/banners/user_banner_service.tsx @@ -17,6 +17,7 @@ import { EuiCallOut, EuiButton, EuiLoadingSpinner } from '@elastic/eui'; import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import type { OverlayBannersStart } from '@kbn/core-overlays-browser'; @@ -26,6 +27,7 @@ interface StartServices { analytics: AnalyticsServiceStart; i18n: I18nStart; theme: ThemeServiceStart; + userProfile: UserProfileService; } interface StartDeps extends StartServices { diff --git a/packages/core/overlays/core-overlays-browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap b/packages/core/overlays/core-overlays-browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap index a41da1f45af56..9df54435ba9a0 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap +++ b/packages/core/overlays/core-overlays-browser-internal/src/flyout/__snapshots__/flyout_service.test.tsx.snap @@ -39,6 +39,16 @@ Array [ }, } } + userProfile={ + Object { + "bulkGet": [MockFunction], + "getCurrent": [MockFunction], + "getUserProfile$": [MockFunction], + "partialUpdate": [MockFunction], + "suggest": [MockFunction], + "update": [MockFunction], + } + } > { mockReactDomRender.mockClear(); @@ -39,6 +41,7 @@ const getServiceStart = () => { analytics: analyticsMock, i18n: i18nMock, theme: themeMock, + userProfile: userProfileMock, targetDomElement: document.createElement('div'), }); }; diff --git a/packages/core/overlays/core-overlays-browser-internal/src/flyout/flyout_service.tsx b/packages/core/overlays/core-overlays-browser-internal/src/flyout/flyout_service.tsx index 3cd9cc29c1001..b98e6c05ae50c 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/flyout/flyout_service.tsx +++ b/packages/core/overlays/core-overlays-browser-internal/src/flyout/flyout_service.tsx @@ -15,6 +15,7 @@ import { render, unmountComponentAtNode } from 'react-dom'; import { Subject } from 'rxjs'; import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { MountPoint, OverlayRef } from '@kbn/core-mount-utils-browser'; import { MountWrapper } from '@kbn/core-mount-utils-browser-internal'; @@ -65,6 +66,7 @@ interface StartDeps { analytics: AnalyticsServiceStart; i18n: I18nStart; theme: ThemeServiceStart; + userProfile: UserProfileService; targetDomElement: Element; } @@ -73,7 +75,13 @@ export class FlyoutService { private activeFlyout: FlyoutRef | null = null; private targetDomElement: Element | null = null; - public start({ analytics, i18n, theme, targetDomElement }: StartDeps): OverlayFlyoutStart { + public start({ + analytics, + i18n, + theme, + userProfile, + targetDomElement, + }: StartDeps): OverlayFlyoutStart { this.targetDomElement = targetDomElement; return { @@ -121,7 +129,12 @@ export class FlyoutService { }; render( - + {getWrapper()} , this.targetDomElement diff --git a/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap b/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap index 5b1bb22336493..cc2dc671f9210 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap +++ b/packages/core/overlays/core-overlays-browser-internal/src/modal/__snapshots__/modal_service.test.tsx.snap @@ -108,6 +108,16 @@ Array [ }, } } + userProfile={ + Object { + "bulkGet": [MockFunction], + "getCurrent": [MockFunction], + "getUserProfile$": [MockFunction], + "partialUpdate": [MockFunction], + "suggest": [MockFunction], + "update": [MockFunction], + } + } > { mockReactDomRender.mockClear(); @@ -34,6 +36,7 @@ const getServiceStart = () => { analytics: analyticsMock, i18n: i18nMock, theme: themeMock, + userProfile: userProfileMock, targetDomElement: document.createElement('div'), }); }; diff --git a/packages/core/overlays/core-overlays-browser-internal/src/modal/modal_service.tsx b/packages/core/overlays/core-overlays-browser-internal/src/modal/modal_service.tsx index 8158f1c383116..d81c4cfdb41f5 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/modal/modal_service.tsx +++ b/packages/core/overlays/core-overlays-browser-internal/src/modal/modal_service.tsx @@ -16,6 +16,7 @@ import { render, unmountComponentAtNode } from 'react-dom'; import { Subject } from 'rxjs'; import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { MountPoint, OverlayRef } from '@kbn/core-mount-utils-browser'; import { MountWrapper } from '@kbn/core-mount-utils-browser-internal'; @@ -58,6 +59,7 @@ class ModalRef implements OverlayRef { interface StartDeps { i18n: I18nStart; theme: ThemeServiceStart; + userProfile: UserProfileService; analytics: AnalyticsServiceStart; targetDomElement: Element; } @@ -67,7 +69,7 @@ export class ModalService { private activeModal: ModalRef | null = null; private targetDomElement: Element | null = null; - public start({ analytics, i18n, theme, targetDomElement }: StartDeps): OverlayModalStart { + public start({ targetDomElement, ...startDeps }: StartDeps): OverlayModalStart { this.targetDomElement = targetDomElement; return { @@ -90,7 +92,7 @@ export class ModalService { this.activeModal = modal; render( - + modal.close()}> @@ -150,7 +152,7 @@ export class ModalService { }; render( - + , targetDomElement diff --git a/packages/core/overlays/core-overlays-browser-internal/src/overlay_service.ts b/packages/core/overlays/core-overlays-browser-internal/src/overlay_service.ts index 68b3eac75e3ee..1501cd19cf7d4 100644 --- a/packages/core/overlays/core-overlays-browser-internal/src/overlay_service.ts +++ b/packages/core/overlays/core-overlays-browser-internal/src/overlay_service.ts @@ -9,6 +9,7 @@ import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import type { OverlayStart } from '@kbn/core-overlays-browser'; @@ -17,10 +18,11 @@ import { FlyoutService } from './flyout'; import { ModalService } from './modal'; interface StartDeps { + targetDomElement: HTMLElement; analytics: AnalyticsServiceStart; i18n: I18nStart; theme: ThemeServiceStart; - targetDomElement: HTMLElement; + userProfile: UserProfileService; uiSettings: IUiSettingsClient; } @@ -30,25 +32,21 @@ export class OverlayService { private modalService = new ModalService(); private flyoutService = new FlyoutService(); - public start({ analytics, i18n, targetDomElement, uiSettings, theme }: StartDeps): OverlayStart { + public start({ targetDomElement, ...startDeps }: StartDeps): OverlayStart { const flyoutElement = document.createElement('div'); targetDomElement.appendChild(flyoutElement); const flyouts = this.flyoutService.start({ - analytics, - i18n, - theme, targetDomElement: flyoutElement, + ...startDeps, }); - const banners = this.bannersService.start({ uiSettings, analytics, i18n, theme }); + const banners = this.bannersService.start(startDeps); const modalElement = document.createElement('div'); targetDomElement.appendChild(modalElement); const modals = this.modalService.start({ - analytics, - i18n, - theme, targetDomElement: modalElement, + ...startDeps, }); return { diff --git a/packages/core/overlays/core-overlays-browser-internal/tsconfig.json b/packages/core/overlays/core-overlays-browser-internal/tsconfig.json index 3a2034b6512ea..3604db4bc64f7 100644 --- a/packages/core/overlays/core-overlays-browser-internal/tsconfig.json +++ b/packages/core/overlays/core-overlays-browser-internal/tsconfig.json @@ -27,6 +27,8 @@ "@kbn/react-kibana-context-render", "@kbn/core-analytics-browser-mocks", "@kbn/core-analytics-browser", + "@kbn/core-user-profile-browser-mocks", + "@kbn/core-user-profile-browser", ], "exclude": [ "target/**/*", diff --git a/packages/core/rendering/core-rendering-browser-internal/src/rendering_service.test.tsx b/packages/core/rendering/core-rendering-browser-internal/src/rendering_service.test.tsx index f6e8685b122dc..993d1177ec2bf 100644 --- a/packages/core/rendering/core-rendering-browser-internal/src/rendering_service.test.tsx +++ b/packages/core/rendering/core-rendering-browser-internal/src/rendering_service.test.tsx @@ -15,6 +15,7 @@ import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; import { applicationServiceMock } from '@kbn/core-application-browser-mocks'; import { chromeServiceMock } from '@kbn/core-chrome-browser-mocks'; import { overlayServiceMock } from '@kbn/core-overlays-browser-mocks'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; import { RenderingService } from './rendering_service'; @@ -26,6 +27,7 @@ describe('RenderingService#start', () => { let overlays: ReturnType; let i18n: ReturnType; let theme: ReturnType; + let userProfile: ReturnType; let targetDomElement: HTMLDivElement; let rendering: RenderingService; @@ -41,8 +43,8 @@ describe('RenderingService#start', () => { overlays = overlayServiceMock.createStartContract(); overlays.banners.getComponent.mockReturnValue(

    I'm a banner!
    ); + userProfile = userProfileServiceMock.createStart(); theme = themeServiceMock.createStartContract(); - i18n = i18nServiceMock.createStartContract(); targetDomElement = document.createElement('div'); @@ -58,6 +60,7 @@ describe('RenderingService#start', () => { overlays, i18n, theme, + userProfile, targetDomElement, }); }; diff --git a/packages/core/rendering/core-rendering-browser-internal/src/rendering_service.tsx b/packages/core/rendering/core-rendering-browser-internal/src/rendering_service.tsx index 12a597ba9318f..1995d6c013cf6 100644 --- a/packages/core/rendering/core-rendering-browser-internal/src/rendering_service.tsx +++ b/packages/core/rendering/core-rendering-browser-internal/src/rendering_service.tsx @@ -17,6 +17,7 @@ import type { InternalChromeStart } from '@kbn/core-chrome-browser-internal'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { OverlayStart } from '@kbn/core-overlays-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import { KibanaRootContextProvider } from '@kbn/react-kibana-context-root'; import { APP_FIXED_VIEWPORT_ID } from '@kbn/core-rendering-browser'; import { AppWrapper } from './app_containers'; @@ -25,6 +26,7 @@ interface StartServices { analytics: AnalyticsServiceStart; i18n: I18nStart; theme: ThemeServiceStart; + userProfile: UserProfileService; } export interface StartDeps extends StartServices { diff --git a/packages/core/rendering/core-rendering-browser-internal/tsconfig.json b/packages/core/rendering/core-rendering-browser-internal/tsconfig.json index 4b0c009a0a033..02657e4e54b43 100644 --- a/packages/core/rendering/core-rendering-browser-internal/tsconfig.json +++ b/packages/core/rendering/core-rendering-browser-internal/tsconfig.json @@ -27,7 +27,9 @@ "@kbn/core-analytics-browser", "@kbn/core-i18n-browser", "@kbn/core-theme-browser", - "@kbn/core-rendering-browser" + "@kbn/core-rendering-browser", + "@kbn/core-user-profile-browser", + "@kbn/core-user-profile-browser-mocks" ], "exclude": [ "target/**/*", diff --git a/packages/core/root/core-root-browser-internal/src/core_system.test.ts b/packages/core/root/core-root-browser-internal/src/core_system.test.ts index 877795ff0b459..cb739ec7c8d41 100644 --- a/packages/core/root/core-root-browser-internal/src/core_system.test.ts +++ b/packages/core/root/core-root-browser-internal/src/core_system.test.ts @@ -469,6 +469,7 @@ describe('#start()', () => { i18n: expect.any(Object), overlays: expect.any(Object), theme: expect.any(Object), + userProfile: expect.any(Object), targetDomElement: expect.any(HTMLElement), analytics: expect.any(Object), }); @@ -494,6 +495,7 @@ describe('#start()', () => { overlays: expect.any(Object), i18n: expect.any(Object), theme: expect.any(Object), + userProfile: expect.any(Object), targetDomElement: expect.any(HTMLElement), }); }); diff --git a/packages/core/root/core-root-browser-internal/src/core_system.ts b/packages/core/root/core-root-browser-internal/src/core_system.ts index 44e25b257e32c..38532948ea505 100644 --- a/packages/core/root/core-root-browser-internal/src/core_system.ts +++ b/packages/core/root/core-root-browser-internal/src/core_system.ts @@ -319,6 +319,7 @@ export class CoreSystem { analytics, theme, uiSettings, + userProfile, targetDomElement: overlayTargetDomElement, }); const notifications = this.notifications.start({ @@ -326,6 +327,7 @@ export class CoreSystem { i18n, overlays, theme, + userProfile, targetDomElement: notificationsTargetDomElement, }); const customBranding = this.customBranding.start(); @@ -360,6 +362,7 @@ export class CoreSystem { analytics, i18n, theme, + userProfile, }); const featureFlags = await this.featureFlags.start(); @@ -404,6 +407,7 @@ export class CoreSystem { overlays, theme, targetDomElement: coreUiTargetDomElement, + userProfile, }); performance.mark(KBN_LOAD_MARKS, { diff --git a/packages/core/theme/core-theme-browser-internal/src/core_theme_provider.test.tsx b/packages/core/theme/core-theme-browser-internal/src/core_theme_provider.test.tsx index a3e4516b07510..584d917ac953d 100644 --- a/packages/core/theme/core-theme-browser-internal/src/core_theme_provider.test.tsx +++ b/packages/core/theme/core-theme-browser-internal/src/core_theme_provider.test.tsx @@ -14,14 +14,20 @@ import { of, BehaviorSubject } from 'rxjs'; import { useEuiTheme } from '@elastic/eui'; import type { UseEuiTheme } from '@elastic/eui'; import { mountWithIntl } from '@kbn/test-jest-helpers'; + +import type { UserProfileService } from '@kbn/core-user-profile-browser'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; + import type { CoreTheme } from '@kbn/core-theme-browser'; import { CoreThemeProvider } from './core_theme_provider'; describe('CoreThemeProvider', () => { let euiTheme: UseEuiTheme | undefined; + let userProfile: UserProfileService; beforeEach(() => { euiTheme = undefined; + userProfile = userProfileServiceMock.createStart(); }); const flushPromises = async () => { @@ -53,7 +59,7 @@ describe('CoreThemeProvider', () => { const coreTheme: CoreTheme = { darkMode: true, name: 'amsterdam' }; const wrapper = mountWithIntl( - + ); @@ -67,7 +73,7 @@ describe('CoreThemeProvider', () => { const coreTheme$ = new BehaviorSubject({ darkMode: true, name: 'amsterdam' }); const wrapper = mountWithIntl( - + ); diff --git a/packages/core/theme/core-theme-browser-internal/src/core_theme_provider.tsx b/packages/core/theme/core-theme-browser-internal/src/core_theme_provider.tsx index 7a77928fecfa1..0cef81aeca618 100644 --- a/packages/core/theme/core-theme-browser-internal/src/core_theme_provider.tsx +++ b/packages/core/theme/core-theme-browser-internal/src/core_theme_provider.tsx @@ -10,10 +10,12 @@ import React, { type FC, type PropsWithChildren } from 'react'; import { CoreTheme } from '@kbn/core-theme-browser/src/types'; import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import { Observable } from 'rxjs'; interface CoreThemeProviderProps { theme$: Observable; + userProfile: UserProfileService; globalStyles?: boolean; } @@ -24,8 +26,11 @@ interface CoreThemeProviderProps { */ export const CoreThemeProvider: FC> = ({ theme$, + userProfile, globalStyles, children, }) => ( - {children} + + {children} + ); diff --git a/packages/core/theme/core-theme-browser-internal/tsconfig.json b/packages/core/theme/core-theme-browser-internal/tsconfig.json index 8bd8824eb872b..0289639ddbf83 100644 --- a/packages/core/theme/core-theme-browser-internal/tsconfig.json +++ b/packages/core/theme/core-theme-browser-internal/tsconfig.json @@ -20,6 +20,8 @@ "@kbn/react-kibana-context-theme", "@kbn/core-injected-metadata-common-internal", "@kbn/ui-theme", + "@kbn/core-user-profile-browser", + "@kbn/core-user-profile-browser-mocks", ], "exclude": [ "target/**/*", diff --git a/packages/core/user-profile/core-user-profile-browser-mocks/src/user_profile_service.mock.ts b/packages/core/user-profile/core-user-profile-browser-mocks/src/user_profile_service.mock.ts index 7a84f59a5414a..8f86d8ac6555f 100644 --- a/packages/core/user-profile/core-user-profile-browser-mocks/src/user_profile_service.mock.ts +++ b/packages/core/user-profile/core-user-profile-browser-mocks/src/user_profile_service.mock.ts @@ -7,6 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { of } from 'rxjs'; import type { UserProfileServiceSetup, UserProfileServiceStart, @@ -26,7 +27,7 @@ const createSetupMock = () => { const createStartMock = () => { const mock: jest.Mocked = { - getUserProfile$: jest.fn(), + getUserProfile$: jest.fn().mockReturnValue(of(null)), getCurrent: jest.fn(), bulkGet: jest.fn(), suggest: jest.fn(), @@ -47,7 +48,7 @@ const createInternalSetupMock = () => { const createInternalStartMock = () => { const mock: jest.Mocked = { - getUserProfile$: jest.fn(), + getUserProfile$: jest.fn().mockReturnValue(of(null)), getCurrent: jest.fn(), bulkGet: jest.fn(), suggest: jest.fn(), diff --git a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx index 19c6a190485e1..0b00f86e23f7b 100644 --- a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx +++ b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx @@ -15,7 +15,6 @@ import { CoreStart, I18nStart, NotificationsSetup, - ThemeServiceSetup, } from '@kbn/core/public'; import { DataPublicPluginStart, SerializedSearchSourceFields } from '@kbn/data-plugin/public'; import { @@ -59,6 +58,7 @@ type StartServices = [ | 'analytics' | 'i18n' | 'theme' + | 'userProfile' // used extensively in Reporting share panel action | 'application' | 'uiSettings' @@ -101,14 +101,12 @@ export class ReportingCsvPanelAction implements ActionDefinition; private readonly notifications: NotificationsSetup; private readonly apiClient: ReportingAPIClient; - private readonly theme: ThemeServiceSetup; - private readonly startServices$: Params['startServices$']; + private readonly startServices$: Observable; constructor({ core, apiClient, startServices$ }: Params) { this.isDownloading = false; this.apiClient = apiClient; this.notifications = core.notifications; - this.theme = core.theme; this.startServices$ = startServices$; this.i18nStrings = getI18nStrings(apiClient); } @@ -148,7 +146,8 @@ export class ReportingCsvPanelAction implements ActionDefinition { - const { searchSource, columns, title, analytics, i18nStart } = params; + const [startServices] = await firstValueFrom(this.startServices$); + const { searchSource, columns, title } = params; const csvJobParams = this.apiClient.getDecoratedJobParams({ searchSource, columns, @@ -162,11 +161,7 @@ export class ReportingCsvPanelAction implements ActionDefinition, diff --git a/packages/kbn-storybook/src/lib/decorators.tsx b/packages/kbn-storybook/src/lib/decorators.tsx index 270da371172eb..162200e83ef41 100644 --- a/packages/kbn-storybook/src/lib/decorators.tsx +++ b/packages/kbn-storybook/src/lib/decorators.tsx @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { Subject } from 'rxjs'; +import { of, Subject } from 'rxjs'; import React, { useEffect } from 'react'; import { action } from '@storybook/addon-actions'; import type { DecoratorFn } from '@storybook/react'; @@ -22,6 +22,7 @@ import { KibanaRootContextProvider } from '@kbn/react-kibana-context-root'; import { i18n } from '@kbn/i18n'; const theme$ = new BehaviorSubject({ darkMode: false, name: 'amsterdam' }); +const userProfile = { getUserProfile$: () => of(null) }; const i18nStart: I18nStart = { Context: ({ children }) => {children}, @@ -47,7 +48,7 @@ const KibanaContextDecorator: DecoratorFn = (storyFn, { globals }) => { }, [colorMode]); return ( - + {storyFn()} ); diff --git a/packages/react/kibana_context/root/eui_provider.test.tsx b/packages/react/kibana_context/root/eui_provider.test.tsx index d7486be2d4798..11d83f0affc41 100644 --- a/packages/react/kibana_context/root/eui_provider.test.tsx +++ b/packages/react/kibana_context/root/eui_provider.test.tsx @@ -7,24 +7,28 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { useEuiTheme } from '@elastic/eui'; import type { ReactWrapper } from 'enzyme'; import type { FC } from 'react'; import React, { useEffect } from 'react'; import { act } from 'react-dom/test-utils'; import { BehaviorSubject, of } from 'rxjs'; +import { useEuiTheme } from '@elastic/eui'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; +import type { KibanaTheme } from '@kbn/react-kibana-context-common'; import { mountWithIntl } from '@kbn/test-jest-helpers'; -import type { KibanaTheme } from '@kbn/react-kibana-context-common'; import { KibanaEuiProvider } from './eui_provider'; describe('KibanaEuiProvider', () => { let euiTheme: ReturnType | undefined; + let userProfile: UserProfileService; let consoleWarnMock: jest.SpyInstance; beforeEach(() => { euiTheme = undefined; + userProfile = userProfileServiceMock.createStart(); consoleWarnMock = jest.spyOn(global.console, 'warn').mockImplementation(() => {}); }); @@ -57,7 +61,11 @@ describe('KibanaEuiProvider', () => { const coreTheme: KibanaTheme = { darkMode: true, name: 'amsterdam' }; const wrapper = mountWithIntl( - + ); @@ -73,7 +81,7 @@ describe('KibanaEuiProvider', () => { const coreTheme$ = new BehaviorSubject({ darkMode: true, name: 'amsterdam' }); const wrapper = mountWithIntl( - + ); diff --git a/packages/react/kibana_context/root/eui_provider.tsx b/packages/react/kibana_context/root/eui_provider.tsx index 1e4e45c9f36f1..fa1d92e897800 100644 --- a/packages/react/kibana_context/root/eui_provider.tsx +++ b/packages/react/kibana_context/root/eui_provider.tsx @@ -19,13 +19,15 @@ import { getThemeConfigByName, DEFAULT_THEME_CONFIG, } from '@kbn/react-kibana-context-common'; -import { ThemeServiceStart } from '@kbn/react-kibana-context-common'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; +import type { ThemeServiceStart } from '@kbn/react-kibana-context-common'; /** * Props for the KibanaEuiProvider. */ export interface KibanaEuiProviderProps extends Pick, 'modify' | 'colorMode'> { theme: ThemeServiceStart; + userProfile?: Pick; // TODO: use this to access a "high contrast mode" flag from user settings. Pass the flag to EuiProvider, when it is supported in EUI. globalStyles?: boolean; } @@ -87,7 +89,14 @@ export const KibanaEuiProvider: FC> = return ( {children} diff --git a/packages/react/kibana_context/root/root_provider.test.tsx b/packages/react/kibana_context/root/root_provider.test.tsx index 919adb09581d5..312b366797a36 100644 --- a/packages/react/kibana_context/root/root_provider.test.tsx +++ b/packages/react/kibana_context/root/root_provider.test.tsx @@ -18,18 +18,22 @@ import type { KibanaTheme } from '@kbn/react-kibana-context-common'; import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; -import { KibanaRootContextProvider } from './root_provider'; import { I18nStart } from '@kbn/core-i18n-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; +import { KibanaRootContextProvider } from './root_provider'; describe('KibanaRootContextProvider', () => { let euiTheme: UseEuiTheme | undefined; let i18nMock: I18nStart; let analytics: AnalyticsServiceStart; + let userProfile: UserProfileService; beforeEach(() => { euiTheme = undefined; analytics = analyticsServiceMock.createAnalyticsServiceStart(); i18nMock = i18nServiceMock.createStartContract(); + userProfile = userProfileServiceMock.createStart(); }); const flushPromises = async () => { @@ -64,6 +68,7 @@ describe('KibanaRootContextProvider', () => { @@ -82,6 +87,7 @@ describe('KibanaRootContextProvider', () => { diff --git a/packages/react/kibana_context/root/tsconfig.json b/packages/react/kibana_context/root/tsconfig.json index 27ea0566f36a7..6c67c97861c11 100644 --- a/packages/react/kibana_context/root/tsconfig.json +++ b/packages/react/kibana_context/root/tsconfig.json @@ -23,5 +23,7 @@ "@kbn/core-base-common", "@kbn/core-analytics-browser", "@kbn/core-analytics-browser-mocks", + "@kbn/core-user-profile-browser", + "@kbn/core-user-profile-browser-mocks", ] } diff --git a/packages/react/kibana_context/theme/theme_provider.test.tsx b/packages/react/kibana_context/theme/theme_provider.test.tsx index 9889da9a689a3..8023c0cbf7e5f 100644 --- a/packages/react/kibana_context/theme/theme_provider.test.tsx +++ b/packages/react/kibana_context/theme/theme_provider.test.tsx @@ -16,14 +16,19 @@ import { BehaviorSubject } from 'rxjs'; import { mountWithIntl } from '@kbn/test-jest-helpers'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; + import type { KibanaTheme } from '@kbn/react-kibana-context-common'; import { KibanaThemeProvider } from './theme_provider'; describe('KibanaThemeProvider', () => { let euiTheme: ReturnType | undefined; + let userProfile: UserProfileService; beforeEach(() => { euiTheme = undefined; + userProfile = userProfileServiceMock.createStart(); }); const flushPromises = async () => { @@ -55,7 +60,7 @@ describe('KibanaThemeProvider', () => { const coreTheme$ = new BehaviorSubject({ darkMode: true, name: 'amsterdam' }); const wrapper = mountWithIntl( - + ); @@ -72,7 +77,7 @@ describe('KibanaThemeProvider', () => { }); const wrapper = mountWithIntl( - + ); diff --git a/packages/react/kibana_context/theme/theme_provider.tsx b/packages/react/kibana_context/theme/theme_provider.tsx index 41915824b128a..b962687199ea7 100644 --- a/packages/react/kibana_context/theme/theme_provider.tsx +++ b/packages/react/kibana_context/theme/theme_provider.tsx @@ -17,6 +17,7 @@ import { useIsNestedEuiProvider } from '@elastic/eui/lib/components/provider/nes // @ts-expect-error EUI exports this component internally, but Kibana isn't picking it up its types import { emitEuiProviderWarning } from '@elastic/eui/lib/services/theme/warning'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import { KibanaEuiProvider } from '@kbn/react-kibana-context-root'; import { @@ -40,6 +41,8 @@ interface EuiProps extends Omit, 'theme' | 'col export interface KibanaThemeProviderProps extends EuiProps { /** The `ThemeServiceStart` API. */ theme: ThemeServiceStart; + /** The `UserProfileService` start API. */ + userProfile?: Pick; } /** @@ -70,12 +73,17 @@ const KibanaThemeProviderOnly = ({ * TODO: clintandrewhall - We can remove this and revert to only exporting the above component * once all out-of-band renders are using `KibanaRenderContextProvider`. */ -const KibanaThemeProviderCheck = ({ theme, children, ...props }: KibanaThemeProviderProps) => { +const KibanaThemeProviderCheck = ({ + theme, + userProfile, + children, + ...props +}: KibanaThemeProviderProps) => { const hasEuiProvider = useIsNestedEuiProvider(); if (hasEuiProvider) { return ( - + {children} ); @@ -84,7 +92,7 @@ const KibanaThemeProviderCheck = ({ theme, children, ...props }: KibanaThemeProv 'KibanaThemeProvider requires a parent KibanaRenderContextProvider. Check your React tree and ensure that they are wrapped in a KibanaRenderContextProvider.' ); return ( - + {children} ); diff --git a/packages/react/kibana_context/theme/tsconfig.json b/packages/react/kibana_context/theme/tsconfig.json index 491ef1a5c09f8..cfc672666e4c0 100644 --- a/packages/react/kibana_context/theme/tsconfig.json +++ b/packages/react/kibana_context/theme/tsconfig.json @@ -19,5 +19,7 @@ "@kbn/test-jest-helpers", "@kbn/react-kibana-context-common", "@kbn/react-kibana-context-root", + "@kbn/core-user-profile-browser", + "@kbn/core-user-profile-browser-mocks", ] } diff --git a/packages/react/kibana_context/theme/with_theme.tsx b/packages/react/kibana_context/theme/with_theme.tsx index 226b3c04c638b..3cffe8ddd1b21 100644 --- a/packages/react/kibana_context/theme/with_theme.tsx +++ b/packages/react/kibana_context/theme/with_theme.tsx @@ -8,6 +8,7 @@ */ import { ThemeServiceStart } from '@kbn/react-kibana-context-common'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import React from 'react'; import { KibanaThemeProvider } from './theme_provider'; @@ -17,6 +18,8 @@ import { KibanaThemeProvider } from './theme_provider'; * @param node The node to wrap. * @param theme The `ThemeServiceStart` API. */ -export const wrapWithTheme = (node: React.ReactNode, theme: ThemeServiceStart) => ( - {node} -); +export const wrapWithTheme = ( + node: React.ReactNode, + theme: ThemeServiceStart, + userProfile?: UserProfileService +) => {node}; diff --git a/packages/react/kibana_mount/to_mount_point.test.tsx b/packages/react/kibana_mount/to_mount_point.test.tsx index 50a49263e2532..5dafefa8453ef 100644 --- a/packages/react/kibana_mount/to_mount_point.test.tsx +++ b/packages/react/kibana_mount/to_mount_point.test.tsx @@ -15,12 +15,14 @@ import type { UseEuiTheme } from '@elastic/eui'; import type { CoreTheme } from '@kbn/core/public'; import { toMountPoint } from './to_mount_point'; import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; describe('toMountPoint', () => { let euiTheme: UseEuiTheme; const i18n = i18nServiceMock.createStartContract(); const analytics = analyticsServiceMock.createAnalyticsServiceStart(); + const userProfile = userProfileServiceMock.createStart(); const InnerComponent: FC = () => { const theme = useEuiTheme(); @@ -42,7 +44,7 @@ describe('toMountPoint', () => { it('exposes the euiTheme when `theme$` is provided', async () => { const theme = { theme$: of({ darkMode: true, name: 'amsterdam' }) }; - const mount = toMountPoint(, { theme, i18n, analytics }); + const mount = toMountPoint(, { theme, i18n, analytics, userProfile }); const targetEl = document.createElement('div'); mount(targetEl); @@ -55,7 +57,12 @@ describe('toMountPoint', () => { it('propagates changes of the theme$ observable', async () => { const theme$ = new BehaviorSubject({ darkMode: true, name: 'amsterdam' }); - const mount = toMountPoint(, { theme: { theme$ }, i18n, analytics }); + const mount = toMountPoint(, { + theme: { theme$ }, + i18n, + analytics, + userProfile, + }); const targetEl = document.createElement('div'); mount(targetEl); diff --git a/packages/react/kibana_mount/to_mount_point.tsx b/packages/react/kibana_mount/to_mount_point.tsx index 45a2f788c850d..8968decee726a 100644 --- a/packages/react/kibana_mount/to_mount_point.tsx +++ b/packages/react/kibana_mount/to_mount_point.tsx @@ -17,7 +17,7 @@ import { export type ToMountPointParams = Pick< KibanaRenderContextProviderProps, - 'analytics' | 'i18n' | 'theme' + 'analytics' | 'i18n' | 'theme' | 'userProfile' >; /** diff --git a/packages/react/kibana_mount/tsconfig.json b/packages/react/kibana_mount/tsconfig.json index 36036d379b7e1..8294fad813c28 100644 --- a/packages/react/kibana_mount/tsconfig.json +++ b/packages/react/kibana_mount/tsconfig.json @@ -21,5 +21,6 @@ "@kbn/core-i18n-browser-mocks", "@kbn/react-kibana-context-render", "@kbn/core-analytics-browser-mocks", + "@kbn/core-user-profile-browser-mocks", ] } diff --git a/src/plugins/home/public/application/application.tsx b/src/plugins/home/public/application/application.tsx index a8459279080bc..b45ab670954e0 100644 --- a/src/plugins/home/public/application/application.tsx +++ b/src/plugins/home/public/application/application.tsx @@ -44,7 +44,7 @@ export const renderApp = async ( ); render( - + & +export type KibanaThemeProviderProps = Pick< + KbnThemeProviderProps, + 'children' | 'modify' | 'userProfile' +> & KbnThemeProviderProps['theme']; /** @deprecated Use `KibanaThemeProvider` from `@kbn/react-kibana-context-theme` */ -export const KibanaThemeProvider = ({ children, theme$, modify }: KibanaThemeProviderProps) => ( - +export const KibanaThemeProvider = ({ + children, + theme$, + userProfile, + modify, +}: KibanaThemeProviderProps) => ( + {children} ); type Theme = KbnThemeProviderProps['theme']['theme$']; -export const wrapWithTheme = (node: React.ReactNode, theme$: Theme) => - kbnWrapWithTheme(node, { theme$ }); +/** @deprecated Use `wrapWithTheme` from `@kbn/react-kibana-context-theme` */ +export const wrapWithTheme = ( + node: React.ReactNode, + theme$: Theme, + userProfile?: UserProfileService +) => kbnWrapWithTheme(node, { theme$ }, userProfile); diff --git a/src/plugins/kibana_react/public/util/index.tsx b/src/plugins/kibana_react/public/util/index.tsx index f58affa049dc5..963dba824a0c4 100644 --- a/src/plugins/kibana_react/public/util/index.tsx +++ b/src/plugins/kibana_react/public/util/index.tsx @@ -15,6 +15,7 @@ import type { MountPoint } from '@kbn/core/public'; import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { CoreTheme, ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import { defaultTheme } from '@kbn/react-kibana-context-common'; import { toMountPoint as _toMountPoint } from '@kbn/react-kibana-mount'; @@ -40,6 +41,7 @@ const i18n: I18nStart = { export interface ToMountPointOptions { analytics?: AnalyticsServiceStart; theme$?: Observable; + userProfile?: UserProfileService; } /** @@ -47,8 +49,8 @@ export interface ToMountPointOptions { */ export const toMountPoint = ( node: React.ReactNode, - { analytics, theme$ }: ToMountPointOptions = {} + { analytics, theme$, userProfile }: ToMountPointOptions = {} ): MountPoint => { const theme = theme$ ? { theme$ } : themeStart; - return _toMountPoint(node, { analytics, theme, i18n }); + return _toMountPoint(node, { analytics, theme, i18n, userProfile }); }; diff --git a/src/plugins/kibana_react/tsconfig.json b/src/plugins/kibana_react/tsconfig.json index cff9a2ce19312..2394c7bfe5250 100644 --- a/src/plugins/kibana_react/tsconfig.json +++ b/src/plugins/kibana_react/tsconfig.json @@ -25,6 +25,7 @@ "@kbn/code-editor", "@kbn/core-analytics-browser", "@kbn/shared-ux-link-redirect-app", + "@kbn/core-user-profile-browser", ], "exclude": [ "target/**/*", diff --git a/src/plugins/kibana_utils/public/history/redirect_when_missing.tsx b/src/plugins/kibana_utils/public/history/redirect_when_missing.tsx index 89619fc287046..becfb9d0da404 100644 --- a/src/plugins/kibana_utils/public/history/redirect_when_missing.tsx +++ b/src/plugins/kibana_utils/public/history/redirect_when_missing.tsx @@ -15,6 +15,7 @@ import ReactDOM from 'react-dom'; import { ApplicationStart, HttpStart, ToastsSetup } from '@kbn/core/public'; import type { ThemeServiceStart } from '@kbn/core/public'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import { SavedObjectNotFound } from '..'; import { KibanaThemeProvider } from '../theme'; @@ -49,6 +50,7 @@ export function redirectWhenMissing({ toastNotifications, onBeforeRedirect, theme, + userProfile, }: { history: History; navigateToApp: ApplicationStart['navigateToApp']; @@ -67,6 +69,7 @@ export function redirectWhenMissing({ */ onBeforeRedirect?: (error: SavedObjectNotFound) => void; theme: ThemeServiceStart; + userProfile?: UserProfileService; }) { let localMappingObject: Mapping; @@ -98,7 +101,7 @@ export function redirectWhenMissing({ }), text: (element: HTMLElement) => { ReactDOM.render( - + {error.message} , element diff --git a/src/plugins/kibana_utils/public/theme/kibana_theme_provider.test.tsx b/src/plugins/kibana_utils/public/theme/kibana_theme_provider.test.tsx index 93511354b19ad..c3c2be931d411 100644 --- a/src/plugins/kibana_utils/public/theme/kibana_theme_provider.test.tsx +++ b/src/plugins/kibana_utils/public/theme/kibana_theme_provider.test.tsx @@ -14,6 +14,7 @@ import React, { useEffect } from 'react'; import { act } from 'react-dom/test-utils'; import { BehaviorSubject, of } from 'rxjs'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import type { CoreTheme } from '@kbn/core/public'; @@ -21,6 +22,7 @@ import { KibanaThemeProvider } from './kibana_theme_provider'; describe('KibanaThemeProvider', () => { let euiTheme: ReturnType | undefined; + const userProfile = userProfileServiceMock.createStart(); beforeEach(() => { euiTheme = undefined; @@ -55,7 +57,7 @@ describe('KibanaThemeProvider', () => { const coreTheme: CoreTheme = { darkMode: true, name: 'amsterdam' }; const wrapper = mountWithIntl( - + ); @@ -69,7 +71,7 @@ describe('KibanaThemeProvider', () => { const coreTheme$ = new BehaviorSubject({ darkMode: true, name: 'amsterdam' }); const wrapper = mountWithIntl( - + ); diff --git a/src/plugins/kibana_utils/public/theme/kibana_theme_provider.tsx b/src/plugins/kibana_utils/public/theme/kibana_theme_provider.tsx index bc104836e2780..3550a34781da2 100644 --- a/src/plugins/kibana_utils/public/theme/kibana_theme_provider.tsx +++ b/src/plugins/kibana_utils/public/theme/kibana_theme_provider.tsx @@ -12,10 +12,12 @@ import { Observable } from 'rxjs'; import { EuiProviderProps } from '@elastic/eui'; import { CoreTheme } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import { KibanaThemeProvider as KbnThemeProvider } from '@kbn/react-kibana-context-theme'; export interface KibanaThemeProviderProps { theme$: Observable; + userProfile?: UserProfileService; modify?: EuiProviderProps<{}>['modify']; children: React.ReactNode; } @@ -23,6 +25,11 @@ export interface KibanaThemeProviderProps { /** @deprecated use `KibanaThemeProvider` from `@kbn/react-kibana-context-theme */ export const KibanaThemeProvider: FC> = ({ theme$, + userProfile, modify, children, -}) => {children}; +}) => ( + + {children} + +); diff --git a/src/plugins/kibana_utils/tsconfig.json b/src/plugins/kibana_utils/tsconfig.json index ceb0d705d5780..0b45dc44ed994 100644 --- a/src/plugins/kibana_utils/tsconfig.json +++ b/src/plugins/kibana_utils/tsconfig.json @@ -23,6 +23,8 @@ "@kbn/core-notifications-browser-mocks", "@kbn/react-kibana-context-theme", "@kbn/core-theme-browser", + "@kbn/core-user-profile-browser", + "@kbn/core-user-profile-browser-mocks", ], "exclude": [ "target/**/*", diff --git a/src/plugins/saved_objects/public/kibana_services.ts b/src/plugins/saved_objects/public/kibana_services.ts index 60c4eb9da457b..8c37ef8b6e046 100644 --- a/src/plugins/saved_objects/public/kibana_services.ts +++ b/src/plugins/saved_objects/public/kibana_services.ts @@ -17,3 +17,4 @@ export function setStartServices(core: CoreStart) { export const getAnalytics = () => coreStart.analytics; export const getI18n = () => coreStart.i18n; export const getTheme = () => coreStart.theme; +export const getUserProfile = () => coreStart.userProfile; diff --git a/src/plugins/saved_objects/public/save_modal/show_saved_object_save_modal.tsx b/src/plugins/saved_objects/public/save_modal/show_saved_object_save_modal.tsx index 70ab2a39b7bfb..85b4ce3a5d03b 100644 --- a/src/plugins/saved_objects/public/save_modal/show_saved_object_save_modal.tsx +++ b/src/plugins/saved_objects/public/save_modal/show_saved_object_save_modal.tsx @@ -10,7 +10,7 @@ import React, { FC, PropsWithChildren } from 'react'; import { toMountPoint } from '@kbn/react-kibana-mount'; -import { getAnalytics, getI18n, getTheme } from '../kibana_services'; +import { getAnalytics, getI18n, getTheme, getUserProfile } from '../kibana_services'; /** * Represents the result of trying to persist the saved object. @@ -68,7 +68,7 @@ export function showSaveModal( children: augmentedElement, }); }), - { analytics: getAnalytics(), theme: getTheme(), i18n: getI18n() } + { analytics: getAnalytics(), theme: getTheme(), i18n: getI18n(), userProfile: getUserProfile() } ); unmount = mount(document.createElement('div')); diff --git a/src/plugins/saved_objects/public/types.ts b/src/plugins/saved_objects/public/types.ts index 0919c24ab2c62..4a8ac83921266 100644 --- a/src/plugins/saved_objects/public/types.ts +++ b/src/plugins/saved_objects/public/types.ts @@ -54,7 +54,7 @@ export interface SavedObjectCreationOpts { overwrite?: boolean; } -export type StartServices = Pick; +export type StartServices = Pick; export interface SavedObjectAttributesAndRefs { attributes: SavedObjectAttributes; diff --git a/src/plugins/share/public/services/share_menu_manager.tsx b/src/plugins/share/public/services/share_menu_manager.tsx index e5d838691f66c..14644d7664bfd 100644 --- a/src/plugins/share/public/services/share_menu_manager.tsx +++ b/src/plugins/share/public/services/share_menu_manager.tsx @@ -10,7 +10,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { toMountPoint } from '@kbn/react-kibana-mount'; -import { CoreStart, ThemeServiceStart, ToastsSetup } from '@kbn/core/public'; +import { CoreStart, ThemeServiceStart, ToastsSetup, UserProfileService } from '@kbn/core/public'; import { ShowShareMenuOptions } from '../types'; import { ShareMenuRegistryStart } from './share_menu_registry'; import { AnonymousAccessServiceContract } from '../../common/anonymous_access'; @@ -49,10 +49,9 @@ export class ShareMenuManager { menuItems, urlService, anonymousAccess, - theme: core.theme, - i18n: core.i18n, toasts: core.notifications.toasts, publicAPIEnabled: !disableEmbed, + ...core, }); }, }; @@ -75,28 +74,28 @@ export class ShareMenuManager { shareableUrl, shareableUrlLocatorParams, embedUrlParamExtensions, - theme, showPublicUrlSwitch, urlService, anonymousAccess, snapshotShareWarning, onClose, disabledShareUrl, - i18n, isDirty, toasts, delegatedShareUrlHandler, publicAPIEnabled, + ...startServices }: ShowShareMenuOptions & { anchorElement: HTMLElement; menuItems: ShareMenuItemV2[]; urlService: BrowserUrlService; anonymousAccess: AnonymousAccessServiceContract | undefined; - theme: ThemeServiceStart; onClose: () => void; - i18n: CoreStart['i18n']; isDirty: boolean; toasts: ToastsSetup; + userProfile: UserProfileService; + theme: ThemeServiceStart; + i18n: CoreStart['i18n']; }) { if (this.isOpen) { onClose(); @@ -135,11 +134,10 @@ export class ShareMenuManager { onClose(); unmount(); }, - theme, - i18n, + ...startServices, }} />, - { i18n, theme } + startServices ); const openModal = () => { diff --git a/src/plugins/share/public/url_service/redirect/components/page.tsx b/src/plugins/share/public/url_service/redirect/components/page.tsx index d2722a1976038..c5f2a93450092 100644 --- a/src/plugins/share/public/url_service/redirect/components/page.tsx +++ b/src/plugins/share/public/url_service/redirect/components/page.tsx @@ -14,6 +14,7 @@ import { EuiPageTemplate } from '@elastic/eui'; import type { CustomBrandingSetup } from '@kbn/core-custom-branding-browser'; import type { ChromeDocTitle, ThemeServiceSetup } from '@kbn/core/public'; import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import type { RedirectManager } from '../redirect_manager'; import { RedirectEmptyPrompt } from './empty_prompt'; @@ -25,6 +26,7 @@ export interface PageProps { customBranding: CustomBrandingSetup; manager: Pick; theme: ThemeServiceSetup; + userProfile: UserProfileService; } export const Page: React.FC = ({ @@ -32,14 +34,14 @@ export const Page: React.FC = ({ homeHref, customBranding, docTitle, - theme, + ...startServices }) => { const error = useObservable(manager.error$); const hasCustomBranding = useObservable(customBranding.hasCustomBranding$); if (error) { return ( - + @@ -48,7 +50,7 @@ export const Page: React.FC = ({ } return ( - + diff --git a/src/plugins/share/public/url_service/redirect/redirect_manager.ts b/src/plugins/share/public/url_service/redirect/redirect_manager.ts index 18d909808ef3c..c4dd843deed00 100644 --- a/src/plugins/share/public/url_service/redirect/redirect_manager.ts +++ b/src/plugins/share/public/url_service/redirect/redirect_manager.ts @@ -39,13 +39,14 @@ export class RedirectManager { mount: async (params) => { const { render } = await import('./render'); const [start] = await core.getStartServices(); - const { chrome, uiSettings } = start; + const { chrome, uiSettings, userProfile } = start; const unmount = render(params.element, { manager: this, customBranding, docTitle: chrome.docTitle, theme, + userProfile, homeHref: getHomeHref(http, uiSettings), }); diff --git a/src/plugins/share/tsconfig.json b/src/plugins/share/tsconfig.json index 8bc8474a84eef..acd84ebc97a83 100644 --- a/src/plugins/share/tsconfig.json +++ b/src/plugins/share/tsconfig.json @@ -25,6 +25,7 @@ "@kbn/core-theme-browser-mocks", "@kbn/core-i18n-browser-mocks", "@kbn/core-notifications-browser-mocks", + "@kbn/core-user-profile-browser", ], "exclude": [ "target/**/*", diff --git a/src/plugins/telemetry/public/mocks.ts b/src/plugins/telemetry/public/mocks.ts index 6461c2e154e88..ad7926cc4211f 100644 --- a/src/plugins/telemetry/public/mocks.ts +++ b/src/plugins/telemetry/public/mocks.ts @@ -15,6 +15,7 @@ import { notificationServiceMock, themeServiceMock, } from '@kbn/core/public/mocks'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import type { TelemetryConstants } from '.'; import type { TelemetryPluginStart, TelemetryPluginSetup, TelemetryPluginConfig } from './plugin'; import { TelemetryService, TelemetryNotifications } from './services'; @@ -82,6 +83,7 @@ export function mockTelemetryNotifications({ analytics: analyticsServiceMock.createAnalyticsServiceStart(), i18n: i18nServiceMock.createStartContract(), theme: themeServiceMock.createStartContract(), + userProfile: userProfileServiceMock.createStart(), telemetryService, telemetryConstants: mockTelemetryConstants(), }); diff --git a/src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.test.ts b/src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.test.ts index 6f2d29371df65..8eedf9fc02b67 100644 --- a/src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.test.ts +++ b/src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.test.ts @@ -15,6 +15,7 @@ import { overlayServiceMock, themeServiceMock, } from '@kbn/core/public/mocks'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import { mockTelemetryConstants, mockTelemetryService } from '../../mocks'; describe('renderOptInStatusNoticeBanner', () => { @@ -25,6 +26,7 @@ describe('renderOptInStatusNoticeBanner', () => { const analytics = analyticsServiceMock.createAnalyticsServiceStart(); const i18n = i18nServiceMock.createStartContract(); const theme = themeServiceMock.createStartContract(); + const userProfile = userProfileServiceMock.createStart(); const telemetryConstants = mockTelemetryConstants(); const telemetryService = mockTelemetryService(); overlays.banners.add.mockReturnValue(bannerID); @@ -36,6 +38,7 @@ describe('renderOptInStatusNoticeBanner', () => { analytics, i18n, theme, + userProfile, telemetryConstants, telemetryService, }); diff --git a/src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.tsx b/src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.tsx index 4227319b0f65a..4d54de430e954 100644 --- a/src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.tsx +++ b/src/plugins/telemetry/public/services/telemetry_notifications/render_opt_in_status_notice_banner.tsx @@ -14,7 +14,8 @@ import { withSuspense } from '@kbn/shared-ux-utility'; import { TelemetryService } from '..'; import type { TelemetryConstants } from '../..'; -interface RenderBannerConfig extends Pick { +interface RenderBannerConfig + extends Pick { http: HttpStart; overlays: OverlayStart; onSeen: () => void; diff --git a/src/plugins/telemetry/public/services/telemetry_notifications/telemetry_notifications.ts b/src/plugins/telemetry/public/services/telemetry_notifications/telemetry_notifications.ts index b830ef6872df8..99195f9b32589 100644 --- a/src/plugins/telemetry/public/services/telemetry_notifications/telemetry_notifications.ts +++ b/src/plugins/telemetry/public/services/telemetry_notifications/telemetry_notifications.ts @@ -12,8 +12,9 @@ import type { TelemetryService } from '../telemetry_service'; import type { TelemetryConstants } from '../..'; import { renderOptInStatusNoticeBanner } from './render_opt_in_status_notice_banner'; -interface TelemetryNotificationsConstructor - extends Pick { +type StartServices = Pick; + +interface TelemetryNotificationsConstructor extends StartServices { http: HttpStart; overlays: OverlayStart; telemetryService: TelemetryService; @@ -26,7 +27,7 @@ interface TelemetryNotificationsConstructor export class TelemetryNotifications { private readonly http: HttpStart; private readonly overlays: OverlayStart; - private readonly startServices: Pick; + private readonly startServices: StartServices; private readonly telemetryConstants: TelemetryConstants; private readonly telemetryService: TelemetryService; private optInStatusNoticeBannerId?: string; diff --git a/src/plugins/telemetry/tsconfig.json b/src/plugins/telemetry/tsconfig.json index c23b4fea26b89..68a9e0118e0fc 100644 --- a/src/plugins/telemetry/tsconfig.json +++ b/src/plugins/telemetry/tsconfig.json @@ -35,6 +35,7 @@ "@kbn/react-kibana-mount", "@kbn/core-node-server", "@kbn/security-plugin-types-server", + "@kbn/core-user-profile-browser-mocks", ], "exclude": [ "target/**/*", diff --git a/src/plugins/ui_actions/public/context_menu/open_context_menu.tsx b/src/plugins/ui_actions/public/context_menu/open_context_menu.tsx index ab8a12374a605..1321ad9fd3803 100644 --- a/src/plugins/ui_actions/public/context_menu/open_context_menu.tsx +++ b/src/plugins/ui_actions/public/context_menu/open_context_menu.tsx @@ -13,7 +13,7 @@ import { EuiContextMenu, EuiContextMenuPanelDescriptor, EuiPopover } from '@elas import { EventEmitter } from 'events'; import ReactDOM from 'react-dom'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; -import { getAnalytics, getI18n, getTheme } from '../services'; +import { getAnalytics, getI18n, getTheme, getUserProfile } from '../services'; let activeSession: ContextMenuSession | null = null; @@ -171,7 +171,12 @@ export function openContextMenu( }; ReactDOM.render( - + | undefined' diff --git a/src/plugins/ui_actions/public/plugin.ts b/src/plugins/ui_actions/public/plugin.ts index 988ef1116e715..4ffea25313b29 100644 --- a/src/plugins/ui_actions/public/plugin.ts +++ b/src/plugins/ui_actions/public/plugin.ts @@ -16,7 +16,7 @@ import { addPanelMenuTrigger, } from '@kbn/ui-actions-browser/src/triggers'; import { UiActionsService } from './service'; -import { setAnalytics, setI18n, setNotifications, setTheme } from './services'; +import { setAnalytics, setI18n, setNotifications, setTheme, setUserProfile } from './services'; export type UiActionsPublicSetup = Pick< UiActionsService, @@ -62,6 +62,7 @@ export class UiActionsPlugin setI18n(core.i18n); setNotifications(core.notifications); setTheme(core.theme); + setUserProfile(core.userProfile); return this.service; } diff --git a/src/plugins/ui_actions/public/services.ts b/src/plugins/ui_actions/public/services.ts index ccb9520c3bcfb..981d3c9c78976 100644 --- a/src/plugins/ui_actions/public/services.ts +++ b/src/plugins/ui_actions/public/services.ts @@ -7,7 +7,13 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { AnalyticsServiceStart, CoreStart, I18nStart, ThemeServiceSetup } from '@kbn/core/public'; +import { + AnalyticsServiceStart, + CoreStart, + I18nStart, + ThemeServiceSetup, + UserProfileService, +} from '@kbn/core/public'; import { createGetterSetter } from '@kbn/kibana-utils-plugin/public'; export const [getAnalytics, setAnalytics] = createGetterSetter('Analytics'); @@ -15,3 +21,5 @@ export const [getI18n, setI18n] = createGetterSetter('I18n'); export const [getNotifications, setNotifications] = createGetterSetter('Notifications'); export const [getTheme, setTheme] = createGetterSetter('Theme'); +export const [getUserProfile, setUserProfile] = + createGetterSetter('UserProfile'); diff --git a/src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx b/src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx index 25296929e10fd..aa087eb524b46 100644 --- a/src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx +++ b/src/plugins/ui_actions/public/tests/test_samples/hello_world_action.tsx @@ -14,7 +14,7 @@ import { toMountPoint } from '@kbn/react-kibana-mount'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { ActionDefinition } from '../../actions'; -type StartServices = Pick; +type StartServices = Pick; const getMenuItem = (core: StartServices) => { return () => { diff --git a/test/plugin_functional/plugins/core_plugin_helpmenu/public/application.tsx b/test/plugin_functional/plugins/core_plugin_helpmenu/public/application.tsx index f3d64605f1fc3..a2f48362ebe7d 100644 --- a/test/plugin_functional/plugins/core_plugin_helpmenu/public/application.tsx +++ b/test/plugin_functional/plugins/core_plugin_helpmenu/public/application.tsx @@ -18,6 +18,7 @@ import { EuiTitle, } from '@elastic/eui'; import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; import type { I18nStart } from '@kbn/core-i18n-browser'; import type { ThemeServiceStart } from '@kbn/core-theme-browser'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; @@ -26,6 +27,7 @@ interface StartServices { analytics: Pick; i18n: I18nStart; theme: Pick; + userProfile: UserProfileService; } import { AppMountParameters } from '@kbn/core/public'; diff --git a/test/plugin_functional/plugins/core_plugin_helpmenu/tsconfig.json b/test/plugin_functional/plugins/core_plugin_helpmenu/tsconfig.json index de2437f09fa9b..fd21ffba5d3d6 100644 --- a/test/plugin_functional/plugins/core_plugin_helpmenu/tsconfig.json +++ b/test/plugin_functional/plugins/core_plugin_helpmenu/tsconfig.json @@ -17,6 +17,7 @@ "@kbn/core-analytics-browser", "@kbn/core-i18n-browser", "@kbn/core-theme-browser", - "@kbn/react-kibana-context-render" + "@kbn/react-kibana-context-render", + "@kbn/core-user-profile-browser" ] } diff --git a/x-pack/examples/screenshotting_example/public/app/http_context.ts b/x-pack/examples/screenshotting_example/public/app/http_context.ts index 7bc0b2b4f2870..1c3b6c164440c 100644 --- a/x-pack/examples/screenshotting_example/public/app/http_context.ts +++ b/x-pack/examples/screenshotting_example/public/app/http_context.ts @@ -11,6 +11,7 @@ import type { HttpStart, I18nStart, ThemeServiceStart, + UserProfileService, } from '@kbn/core/public'; export interface StartServices { @@ -18,6 +19,7 @@ export interface StartServices { analytics: Pick; i18n: I18nStart; theme: Pick; + userProfile: UserProfileService; } export const AppContext = createContext(undefined); diff --git a/x-pack/examples/screenshotting_example/public/plugin.tsx b/x-pack/examples/screenshotting_example/public/plugin.tsx index 6dd07b992b1c3..b020424cc5d76 100644 --- a/x-pack/examples/screenshotting_example/public/plugin.tsx +++ b/x-pack/examples/screenshotting_example/public/plugin.tsx @@ -26,8 +26,8 @@ export class ScreenshottingExamplePlugin implements Plugin { title: APPLICATION_NAME, visibleIn: [], mount: async ({ element }: AppMountParameters) => { - const [{ http, analytics, i18n, theme }] = await getStartServices(); - const startServices = { analytics, http, i18n, theme }; + const [{ http, analytics, i18n, theme, userProfile }] = await getStartServices(); + const startServices = { analytics, http, i18n, theme, userProfile }; ReactDOM.render( diff --git a/x-pack/plugins/global_search_bar/public/plugin.tsx b/x-pack/plugins/global_search_bar/public/plugin.tsx index e8fbe2f7e2bf1..4ff393b90f044 100644 --- a/x-pack/plugins/global_search_bar/public/plugin.tsx +++ b/x-pack/plugins/global_search_bar/public/plugin.tsx @@ -50,14 +50,14 @@ export class GlobalSearchBarPlugin implements Plugin<{}, {}, {}, GlobalSearchBar private getNavControl(deps: { core: CoreStart } & GlobalSearchBarPluginStartDeps) { const { core, globalSearch, savedObjectsTagging, usageCollection } = deps; - const { application, http, theme, i18n } = core; + const { application, http } = core; const reportEvent = new EventReporter({ analytics: core.analytics, usageCollection }); const navControl: ChromeNavControl = { order: 1000, mount: (container) => { ReactDOM.render( - + = (props) => ( ); -type MountProps = Props & Pick; +type MountProps = Props & Pick; export const mountExpiredBanner = ({ type, uploadUrl, ...startServices }: MountProps) => toMountPoint(, startServices); diff --git a/x-pack/plugins/reporting/public/plugin.ts b/x-pack/plugins/reporting/public/plugin.ts index 8dc9e2d96f717..d1c0db9cca577 100644 --- a/x-pack/plugins/reporting/public/plugin.ts +++ b/x-pack/plugins/reporting/public/plugin.ts @@ -110,15 +110,16 @@ export class ReportingPublicPlugin } = setupDeps; const startServices$: Observable = from(getStartServices()).pipe( - map(([services, ...rest]) => { + map(([start, ...rest]) => { return [ { - application: services.application, - analytics: services.analytics, - i18n: services.i18n, - theme: services.theme, - notifications: services.notifications, - uiSettings: services.uiSettings, + application: start.application, + analytics: start.analytics, + i18n: start.i18n, + theme: start.theme, + userProfile: start.userProfile, + notifications: start.notifications, + uiSettings: start.uiSettings, }, ...rest, ]; diff --git a/x-pack/plugins/reporting/public/types.ts b/x-pack/plugins/reporting/public/types.ts index 9ba50435471ab..c4b9b5e931c53 100644 --- a/x-pack/plugins/reporting/public/types.ts +++ b/x-pack/plugins/reporting/public/types.ts @@ -20,6 +20,7 @@ export type StartServices = [ | 'analytics' | 'i18n' | 'theme' + | 'userProfile' // used extensively in Reporting plugin | 'application' | 'notifications' diff --git a/x-pack/plugins/saved_objects_tagging/public/types.ts b/x-pack/plugins/saved_objects_tagging/public/types.ts index ed29542e4d410..7211dd205c53b 100644 --- a/x-pack/plugins/saved_objects_tagging/public/types.ts +++ b/x-pack/plugins/saved_objects_tagging/public/types.ts @@ -12,5 +12,5 @@ export type SavedObjectTaggingPluginStart = SavedObjectsTaggingApi; export type StartServices = Pick< CoreStart, - 'overlays' | 'notifications' | 'analytics' | 'i18n' | 'theme' + 'overlays' | 'notifications' | 'analytics' | 'i18n' | 'theme' | 'userProfile' >; diff --git a/x-pack/plugins/serverless/public/plugin.tsx b/x-pack/plugins/serverless/public/plugin.tsx index dbb75788c105b..a488658e9bb94 100644 --- a/x-pack/plugins/serverless/public/plugin.tsx +++ b/x-pack/plugins/serverless/public/plugin.tsx @@ -83,7 +83,7 @@ export class ServerlessPlugin core.chrome.navControls.registerRight({ order: 1, mount: toMountPoint( - + + From f30402090ce038b100ff255b18e353fff65f4780 Mon Sep 17 00:00:00 2001 From: Irene Blanco Date: Thu, 5 Dec 2024 16:35:15 +0100 Subject: [PATCH 091/141] [APM] Update alert rule producer terms in getServicesAlerts query (#203100) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary This PR continues the work from https://github.com/elastic/kibana/issues/201565. We missed updating the alert rules in the `getServicesAlerts` function, so this fixes that. There's an ongoing [issue](https://github.com/elastic/kibana/issues/202415) to test the alert counts across solutions and ensure it works as expected in all scenarios. --------- Co-authored-by: Cauê Marcondes <55978943+cauemarcondes@users.noreply.github.com> --- .../common/alerting/config/apm_alerting_feature_ids.ts | 4 ++-- .../apm/public/components/app/alerts_overview/index.tsx | 8 ++++---- .../apm/server/lib/helpers/get_apm_alerts_client.ts | 6 ++++-- .../routes/services/get_services/get_service_alerts.ts | 4 ++-- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/x-pack/plugins/observability_solution/apm/common/alerting/config/apm_alerting_feature_ids.ts b/x-pack/plugins/observability_solution/apm/common/alerting/config/apm_alerting_feature_ids.ts index 784ab0b534256..ff6e86a9f79bc 100644 --- a/x-pack/plugins/observability_solution/apm/common/alerting/config/apm_alerting_feature_ids.ts +++ b/x-pack/plugins/observability_solution/apm/common/alerting/config/apm_alerting_feature_ids.ts @@ -11,7 +11,7 @@ import { type ValidFeatureId, } from '@kbn/rule-data-utils'; -export const apmAlertingConsumers: ValidFeatureId[] = [ +export const APM_ALERTING_CONSUMERS: ValidFeatureId[] = [ AlertConsumers.LOGS, AlertConsumers.APM, AlertConsumers.SLO, @@ -20,4 +20,4 @@ export const apmAlertingConsumers: ValidFeatureId[] = [ AlertConsumers.ALERTS, ]; -export const apmAlertingRuleTypeIds: string[] = [...OBSERVABILITY_RULE_TYPE_IDS]; +export const APM_ALERTING_RULE_TYPE_IDS: string[] = [...OBSERVABILITY_RULE_TYPE_IDS]; diff --git a/x-pack/plugins/observability_solution/apm/public/components/app/alerts_overview/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/app/alerts_overview/index.tsx index 682634819e623..a14731db9efac 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/app/alerts_overview/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/app/alerts_overview/index.tsx @@ -14,8 +14,8 @@ import { BoolQuery } from '@kbn/es-query'; import { AlertConsumers } from '@kbn/rule-data-utils'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { - apmAlertingConsumers, - apmAlertingRuleTypeIds, + APM_ALERTING_CONSUMERS, + APM_ALERTING_RULE_TYPE_IDS, } from '../../../../common/alerting/config/apm_alerting_feature_ids'; import { ApmPluginStartDeps } from '../../../plugin'; import { useAnyOfApmParams } from '../../../hooks/use_apm_params'; @@ -111,8 +111,8 @@ export function AlertsOverview() { alertsTableConfigurationRegistry={alertsTableConfigurationRegistry} id={'service-overview-alerts'} configurationId={AlertConsumers.OBSERVABILITY} - ruleTypeIds={apmAlertingRuleTypeIds} - consumers={apmAlertingConsumers} + ruleTypeIds={APM_ALERTING_RULE_TYPE_IDS} + consumers={APM_ALERTING_CONSUMERS} query={esQuery} showAlertStatusWithFlapping cellContext={{ observabilityRuleTypeRegistry }} diff --git a/x-pack/plugins/observability_solution/apm/server/lib/helpers/get_apm_alerts_client.ts b/x-pack/plugins/observability_solution/apm/server/lib/helpers/get_apm_alerts_client.ts index 95c29472dbc79..fb519e2ef859f 100644 --- a/x-pack/plugins/observability_solution/apm/server/lib/helpers/get_apm_alerts_client.ts +++ b/x-pack/plugins/observability_solution/apm/server/lib/helpers/get_apm_alerts_client.ts @@ -12,7 +12,7 @@ import { DataTier } from '@kbn/observability-shared-plugin/common'; import { searchExcludedDataTiers } from '@kbn/observability-plugin/common/ui_settings_keys'; import { estypes } from '@elastic/elasticsearch'; import { getDataTierFilterCombined } from '@kbn/apm-data-access-plugin/server/utils'; -import { apmAlertingRuleTypeIds } from '../../../common/alerting/config/apm_alerting_feature_ids'; +import { APM_ALERTING_RULE_TYPE_IDS } from '../../../common/alerting/config/apm_alerting_feature_ids'; import type { MinimalAPMRouteHandlerResources } from '../../routes/apm_routes/register_apm_server_routes'; export type ApmAlertsClient = Awaited>; @@ -32,7 +32,9 @@ export async function getApmAlertsClient({ const ruleRegistryPluginStart = await plugins.ruleRegistry.start(); const alertsClient = await ruleRegistryPluginStart.getRacClientWithRequest(request); - const apmAlertsIndices = await alertsClient.getAuthorizedAlertsIndices(apmAlertingRuleTypeIds); + const apmAlertsIndices = await alertsClient.getAuthorizedAlertsIndices( + APM_ALERTING_RULE_TYPE_IDS + ); if (!apmAlertsIndices || isEmpty(apmAlertsIndices)) { throw Error('No alert indices exist for "apm"'); diff --git a/x-pack/plugins/observability_solution/apm/server/routes/services/get_services/get_service_alerts.ts b/x-pack/plugins/observability_solution/apm/server/routes/services/get_services/get_service_alerts.ts index 01a125f456443..c47668bc1ee32 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/services/get_services/get_service_alerts.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/services/get_services/get_service_alerts.ts @@ -18,7 +18,7 @@ import { ALERT_STATUS_ACTIVE, ALERT_UUID, } from '@kbn/rule-data-utils'; -import { observabilityFeatureId } from '@kbn/observability-shared-plugin/common'; +import { APM_ALERTING_CONSUMERS } from '../../../../common/alerting/config/apm_alerting_feature_ids'; import { SERVICE_NAME } from '../../../../common/es_fields/apm'; import { ServiceGroup } from '../../../../common/service_groups'; import { ApmAlertsClient } from '../../../lib/helpers/get_apm_alerts_client'; @@ -58,7 +58,7 @@ export async function getServicesAlerts({ query: { bool: { filter: [ - ...termsQuery(ALERT_RULE_PRODUCER, 'apm', observabilityFeatureId), + ...termsQuery(ALERT_RULE_PRODUCER, ...APM_ALERTING_CONSUMERS), ...termQuery(ALERT_STATUS, ALERT_STATUS_ACTIVE), ...rangeQuery(start, end), ...kqlQuery(kuery), From 83ff3a314b1f496014df5a9d03432d63b22c9d34 Mon Sep 17 00:00:00 2001 From: Jill Guyonnet Date: Thu, 5 Dec 2024 15:43:40 +0000 Subject: [PATCH 092/141] [Fleet] Fix disabling logic for "View Agents" button in agent activity (#202968) ## Summary I came across a small bug while testing Fleet agents activity: the "View Agents" button is currently always disabled for agent policy changes. This is because agent policy data has been modified to be fetched with `noAgentCount: true` by default. As getting the agent count involves a performance concern, this PR fixes the logic that disables the "View Agents" button for policy change actions instead. The behaviour is not as follows: * For tag updates actions: button not showed (no change) * For policy change actions * If `action.nbAgentsActionCreated > 10000`: disable button and show tooltip explaining why it's disabled * Otherwise: enable button and show tooltip saying that these are the agents _currently_ assigned to the policy (existing behaviour, known limitation) * For other types of actions (no change) * If `action.nbAgentsActionCreated > 10000`: disable button and show tooltip explaining why it's disabled * Otherwise: enable button, no tooltip ### Screenshots ![Screenshot 2024-12-05 at 10 56 40](https://github.com/user-attachments/assets/c5f4f868-cdac-4de7-a96d-f11afd803d87) ![Screenshot 2024-12-05 at 10 57 13](https://github.com/user-attachments/assets/91195e3a-4f5c-4a91-b9ff-ffb62818647f) ![Screenshot 2024-12-05 at 10 57 20](https://github.com/user-attachments/assets/9029b1b5-6983-4509-9b62-15e073546d42) --- .../agent_activity_flyout/activity_item.tsx | 11 ++--- .../activity_section.tsx | 6 +-- .../agent_activity_flyout/flyout_body.tsx | 7 +-- .../agent_activity_flyout/index.test.tsx | 1 - .../agent_activity_flyout/index.tsx | 13 +---- .../view_agents_button.tsx | 48 ++++++++----------- .../sections/agents/agent_list_page/index.tsx | 1 - .../server/types/rest_spec/agent_policy.ts | 2 +- 8 files changed, 29 insertions(+), 60 deletions(-) diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/activity_item.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/activity_item.tsx index ee83c49744d35..06300480dfa50 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/activity_item.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/activity_item.tsx @@ -18,7 +18,7 @@ import { EuiSpacer, } from '@elastic/eui'; -import type { ActionStatus, AgentPolicy } from '../../../../../types'; +import type { ActionStatus } from '../../../../../types'; import { ViewErrors } from '../view_errors'; @@ -34,8 +34,7 @@ import { ViewAgentsButton } from './view_agents_button'; export const ActivityItem: React.FunctionComponent<{ action: ActionStatus; onClickViewAgents: (action: ActionStatus) => void; - agentPolicies: AgentPolicy[]; -}> = ({ action, onClickViewAgents, agentPolicies }) => { +}> = ({ action, onClickViewAgents }) => { const completeTitle = action.type === 'POLICY_CHANGE' && action.nbAgentsActioned === 0 ? ( @@ -248,11 +247,7 @@ export const ActivityItem: React.FunctionComponent<{
    - + ); }; diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/activity_section.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/activity_section.tsx index 89067013d6b6b..59db6cea228d4 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/activity_section.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/activity_section.tsx @@ -9,7 +9,7 @@ import type { ReactNode } from 'react'; import React from 'react'; import { EuiText, EuiPanel } from '@elastic/eui'; -import type { ActionStatus, AgentPolicy } from '../../../../../types'; +import type { ActionStatus } from '../../../../../types'; import { UpgradeInProgressActivityItem } from './upgrade_in_progress_activity_item'; import { ActivityItem } from './activity_item'; @@ -19,8 +19,7 @@ export const ActivitySection: React.FunctionComponent<{ actions: ActionStatus[]; abortUpgrade: (action: ActionStatus) => Promise; onClickViewAgents: (action: ActionStatus) => void; - agentPolicies: AgentPolicy[]; -}> = ({ title, actions, abortUpgrade, onClickViewAgents, agentPolicies }) => { +}> = ({ title, actions, abortUpgrade, onClickViewAgents }) => { return ( <> @@ -41,7 +40,6 @@ export const ActivitySection: React.FunctionComponent<{ action={currentAction} key={currentAction.actionId} onClickViewAgents={onClickViewAgents} - agentPolicies={agentPolicies} /> ) )} diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/flyout_body.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/flyout_body.tsx index 6880d0bd7747f..280cfa14f4fb6 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/flyout_body.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/flyout_body.tsx @@ -17,7 +17,7 @@ import styled from 'styled-components'; import { FormattedDate, FormattedMessage } from '@kbn/i18n-react'; -import type { ActionStatus, AgentPolicy } from '../../../../../types'; +import type { ActionStatus } from '../../../../../types'; import { Loading } from '../../../components'; @@ -51,7 +51,6 @@ export const FlyoutBody: React.FunctionComponent<{ onClickShowMore: () => void; dateFilter: moment.Moment | null; onChangeDateFilter: (date: moment.Moment | null) => void; - agentPolicies: AgentPolicy[]; }> = ({ isFirstLoading, currentActions, @@ -61,7 +60,6 @@ export const FlyoutBody: React.FunctionComponent<{ onClickShowMore, dateFilter, onChangeDateFilter, - agentPolicies, }) => { const scrollToTopRef = React.useRef(null); React.useEffect(() => { @@ -164,7 +162,6 @@ export const FlyoutBody: React.FunctionComponent<{ actions={inProgressActions} abortUpgrade={abortUpgrade} onClickViewAgents={onClickViewAgents} - agentPolicies={agentPolicies} /> ) : null} {todayActions.length > 0 ? ( @@ -178,7 +175,6 @@ export const FlyoutBody: React.FunctionComponent<{ actions={todayActions} abortUpgrade={abortUpgrade} onClickViewAgents={onClickViewAgents} - agentPolicies={agentPolicies} /> ) : null} {Object.keys(otherDays).map((day) => ( @@ -188,7 +184,6 @@ export const FlyoutBody: React.FunctionComponent<{ actions={otherDays[day]} abortUpgrade={abortUpgrade} onClickViewAgents={onClickViewAgents} - agentPolicies={agentPolicies} /> ))}
    diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.test.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.test.tsx index c649b3829a41e..10c653336dc57 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.test.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.test.tsx @@ -50,7 +50,6 @@ describe('AgentActivityFlyout', () => { refreshAgentActivity={refreshAgentActivity} setSearch={mockSetSearch} setSelectedStatus={mockSetSelectedStatus} - agentPolicies={[]} /> ); diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.tsx index e9bfbbef49d91..64ecae7fb1d32 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/index.tsx @@ -34,8 +34,6 @@ import { getKuery } from '../../utils/get_kuery'; import { AGENT_STATUSES } from '../../../services/agent_status'; -import type { AgentPolicy } from '../../../../../types'; - import { FlyoutBody } from './flyout_body'; const FlyoutFooterWPadding = styled(EuiFlyoutFooter)` @@ -48,15 +46,7 @@ export const AgentActivityFlyout: React.FunctionComponent<{ refreshAgentActivity: boolean; setSearch: (search: string) => void; setSelectedStatus: (status: string[]) => void; - agentPolicies: AgentPolicy[]; -}> = ({ - onClose, - onAbortSuccess, - refreshAgentActivity, - setSearch, - setSelectedStatus, - agentPolicies, -}) => { +}> = ({ onClose, onAbortSuccess, refreshAgentActivity, setSearch, setSelectedStatus }) => { const { notifications } = useStartServices(); const { data: agentPoliciesData } = useGetAgentPolicies({ perPage: SO_SEARCH_LIMIT, @@ -167,7 +157,6 @@ export const AgentActivityFlyout: React.FunctionComponent<{ onClickShowMore={onClickShowMore} dateFilter={dateFilter} onChangeDateFilter={onChangeDateFilter} - agentPolicies={agentPolicies} /> diff --git a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/view_agents_button.tsx b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/view_agents_button.tsx index 01cc7a53929b9..4c7c9c33df749 100644 --- a/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/view_agents_button.tsx +++ b/x-pack/plugins/fleet/public/applications/fleet/sections/agents/agent_list_page/components/agent_activity_flyout/view_agents_button.tsx @@ -9,23 +9,17 @@ import React, { useMemo } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiButtonEmpty, EuiToolTip } from '@elastic/eui'; -import type { ActionStatus, AgentPolicy } from '../../../../../types'; +import type { ActionStatus } from '../../../../../types'; const MAX_VIEW_AGENTS_COUNT = 1000; export const ViewAgentsButton: React.FunctionComponent<{ action: ActionStatus; onClickViewAgents: (action: ActionStatus) => void; - agentPolicies?: AgentPolicy[]; -}> = ({ action, onClickViewAgents, agentPolicies }) => { +}> = ({ action, onClickViewAgents }) => { const isDisabled = useMemo(() => { - if (action.type !== 'POLICY_CHANGE') { - return action.nbAgentsActionCreated > MAX_VIEW_AGENTS_COUNT; - } - - const actionPolicyId = action.actionId.split(':')[0]; - return agentPolicies?.find((agentPolicy) => agentPolicy.id === actionPolicyId)?.agents === 0; - }, [action, agentPolicies]); + return action.nbAgentsActionCreated > MAX_VIEW_AGENTS_COUNT; + }, [action]); if (action.type === 'UPDATE_TAGS') { return null; @@ -46,8 +40,22 @@ export const ViewAgentsButton: React.FunctionComponent<{ ); - if (action.type !== 'POLICY_CHANGE' && !isDisabled) { - return button; + if (isDisabled) { + return ( + + } + > + {button} + + ); } if (action.type === 'POLICY_CHANGE') { @@ -65,19 +73,5 @@ export const ViewAgentsButton: React.FunctionComponent<{ ); } - return ( - - } - > - {button} - - ); + return button; }; 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 47cc796d300c4..e366f6342e1fd 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 @@ -288,7 +288,6 @@ export const AgentListPage: React.FunctionComponent<{}> = () => { refreshAgentActivity={isLoading} setSearch={setSearch} setSelectedStatus={setSelectedStatus} - agentPolicies={allAgentPolicies} /> ) : null} diff --git a/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts b/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts index 6eb42468a6371..ebb5c41d5bb43 100644 --- a/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts +++ b/x-pack/plugins/fleet/server/types/rest_spec/agent_policy.ts @@ -46,7 +46,7 @@ export const GetAgentPoliciesRequestSchema = { schema.boolean({ meta: { description: 'use withAgentCount instead', deprecated: true }, }) - ), // + ), withAgentCount: schema.maybe( schema.boolean({ meta: { description: 'get policies with agent count' }, From 17b02eb03eaba7b5ae63647e66b8bfc283d57545 Mon Sep 17 00:00:00 2001 From: Alexey Antonov Date: Thu, 5 Dec 2024 17:48:18 +0200 Subject: [PATCH 093/141] fix: [Search:Stateful:EnterpriseSearch:WorkplaceSearch:UsersandRoles]Assign to specific groups input combobox is missing form label (#202462) Closes: #202234 ## Description Assign to specific groups input combobox on create a role mapping panel on users and roles page should have a label so assistive technology can help the user figure out which input they would want to select. ## Changes made: 1. required `aria-*` attribute was set for `EuiComboBox` ## Screen: image --- .../role_mappings/group_assignment_selector.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/group_assignment_selector.tsx b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/group_assignment_selector.tsx index 5d8ef7ababc8c..f6c88cb7ae6ed 100644 --- a/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/group_assignment_selector.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/workplace_search/views/role_mappings/group_assignment_selector.tsx @@ -9,7 +9,13 @@ import React from 'react'; import { useActions, useValues } from 'kea'; -import { EuiComboBox, EuiFormRow, EuiHorizontalRule, EuiRadioGroup } from '@elastic/eui'; +import { + EuiComboBox, + EuiFormRow, + EuiHorizontalRule, + EuiRadioGroup, + useGeneratedHtmlId, +} from '@elastic/eui'; import { RoleOptionLabel } from '../../../shared/role_mapping'; @@ -31,6 +37,8 @@ export const GroupAssignmentSelector: React.FC = () => { const { includeInAllGroups, availableGroups, selectedGroups, selectedOptions } = useValues(RoleMappingsLogic); + const groupAssigmentLabelId = useGeneratedHtmlId(); + const hasGroupAssignment = selectedGroups.size > 0 || includeInAllGroups; const groupOptions = [ @@ -51,11 +59,12 @@ export const GroupAssignmentSelector: React.FC = () => { handleAllGroupsSelectionChange(id === 'all')} legend={{ - children: {GROUP_ASSIGNMENT_LABEL}, + children: {GROUP_ASSIGNMENT_LABEL}, }} /> @@ -69,6 +78,7 @@ export const GroupAssignmentSelector: React.FC = () => { }} fullWidth isDisabled={includeInAllGroups} + aria-labelledby={groupAssigmentLabelId} />
    From 9c91cca3c49592779dbeb5d60233d97a4ad67e66 Mon Sep 17 00:00:00 2001 From: Paul Tavares <56442535+paul-tavares@users.noreply.github.com> Date: Thu, 5 Dec 2024 10:56:53 -0500 Subject: [PATCH 094/141] [Security Solution][Endpoint] Fix Cypress test to work with refactored Roles page (#202770) ## Summary - Fixes cypress tests for space awareness RBAC checks to work with the recent changes to the core Role page - Fixes #200962 - Fixes #200967 - Enables test file for runs on Serverless MKI environments --- .../management/cypress/common/constants.ts | 1 + .../cypress/e2e/rbac/endpoint_role_rbac.cy.ts | 21 ++++++++++++------- ...point_role_rbac_with_space_awareness.cy.ts | 15 ++++++------- .../alerts_response_console.cy.ts | 9 ++++++++ .../response_console/execute.cy.ts | 9 ++++++++ .../response_console/isolate.cy.ts | 9 ++++++++ .../response_console/process_operations.cy.ts | 9 ++++++++ .../response_console/release.cy.ts | 9 ++++++++ .../response_console/scan.cy.ts | 9 ++++++++ .../screens/stack_management/role_page.ts | 7 +++++++ .../public/management/cypress/tasks/login.ts | 5 ++--- 11 files changed, 86 insertions(+), 17 deletions(-) diff --git a/x-pack/plugins/security_solution/public/management/cypress/common/constants.ts b/x-pack/plugins/security_solution/public/management/cypress/common/constants.ts index 41f08f438e3f8..0266914a17182 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/common/constants.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/common/constants.ts @@ -18,4 +18,5 @@ export const KIBANA_KNOWN_DEFAULT_ACCOUNTS = { elastic: 'elastic', elastic_serverless: 'elastic_serverless', system_indices_superuser: 'system_indices_superuser', + admin: 'admin', } as const; diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac.cy.ts index b108cb8985b80..2c5ea11329f31 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac.cy.ts @@ -5,12 +5,17 @@ * 2.0. */ +import { + expandEndpointSecurityFeaturePrivileges, + expandSecuritySolutionCategoryKibanaPrivileges, + navigateToRolePage, + openKibanaFeaturePrivilegesFlyout, + setKibanaPrivilegeSpace, +} from '../../screens/stack_management/role_page'; import { closeAllToasts } from '../../tasks/toasts'; import { login, ROLE } from '../../tasks/login'; -import { loadPage } from '../../tasks/common'; -// FLAKY: https://github.com/elastic/kibana/issues/200967 -describe.skip('When defining a kibana role for Endpoint security access', { tags: '@ess' }, () => { +describe('When defining a kibana role for Endpoint security access', { tags: '@ess' }, () => { const getAllSubFeatureRows = (): Cypress.Chainable> => { return cy .get('#featurePrivilegeControls_siem') @@ -20,11 +25,13 @@ describe.skip('When defining a kibana role for Endpoint security access', { tags beforeEach(() => { login(ROLE.system_indices_superuser); - loadPage('/app/management/security/roles/edit'); + navigateToRolePage(); closeAllToasts(); - cy.getByTestSubj('addSpacePrivilegeButton').click(); - cy.getByTestSubj('featureCategoryButton_securitySolution').closest('button').click(); - cy.get('.featurePrivilegeName:contains("Security")').closest('button').click(); + + openKibanaFeaturePrivilegesFlyout(); + setKibanaPrivilegeSpace('default'); + expandSecuritySolutionCategoryKibanaPrivileges(); + expandEndpointSecurityFeaturePrivileges(); }); it('should display RBAC entries with expected controls', () => { diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac_with_space_awareness.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac_with_space_awareness.cy.ts index d2a86e7899aee..41f6613be88be 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac_with_space_awareness.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/rbac/endpoint_role_rbac_with_space_awareness.cy.ts @@ -23,11 +23,10 @@ import { setSecuritySolutionEndpointGroupPrivilege, } from '../../screens/stack_management/role_page'; -// Failing: See https://github.com/elastic/kibana/issues/200962 -describe.skip( +describe( 'When defining a kibana role for Endpoint security access with space awareness enabled', { - // TODO:PR Remove `'@skipInServerlessMKI` once PR merges to `main` + // TODO:PR Remove `'@skipInServerlessMKI` once PR merges to `main` and feature flag is enabled in prod. tags: ['@ess', '@serverless', '@serverlessMKI', '@skipInServerlessMKI'], env: { ftrConfig: { @@ -44,11 +43,13 @@ describe.skip( }, }, () => { - let spaceId: string = ''; + // In Serverless MKI we use `admin` for the login user... other deployments use system indices superuser + const loginUser = Cypress.env('CLOUD_SERVERLESS') ? ROLE.admin : ROLE.system_indices_superuser; const roleName = `test_${Math.random().toString().substring(2, 6)}`; + let spaceId: string = ''; before(() => { - login(ROLE.system_indices_superuser); + login(loginUser); createSpace(`foo_${Math.random().toString().substring(2, 6)}`).then((response) => { spaceId = response.body.id; }); @@ -62,16 +63,16 @@ describe.skip( }); beforeEach(() => { - login(ROLE.system_indices_superuser); + login(loginUser); navigateToRolePage(); setRoleName(roleName); openKibanaFeaturePrivilegesFlyout(); + setKibanaPrivilegeSpace(spaceId); expandSecuritySolutionCategoryKibanaPrivileges(); expandEndpointSecurityFeaturePrivileges(); }); it('should allow configuration per-space', () => { - setKibanaPrivilegeSpace(spaceId); setSecuritySolutionEndpointGroupPrivilege('all'); clickEndpointSubFeaturePrivilegesCustomization(); setEndpointSubFeaturePrivilege('endpoint_list', 'all'); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts index d741c3a7f0e59..eed5970fbc9d0 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/alerts_response_console.cy.ts @@ -85,6 +85,15 @@ describe( } }); + afterEach(function () { + if (Cypress.env('IS_CI') && this.currentTest?.isFailed() && createdHost) { + cy.task('captureHostVmAgentDiagnostics', { + hostname: createdHost.hostname, + fileNamePrefix: this.currentTest?.fullTitle(), + }); + } + }); + it('should open responder from alert details flyout', () => { waitForEndpointListPageToBeLoaded(createdHost.hostname); toggleRuleOffAndOn(ruleName); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts index 042031b301185..d5f3bd7d956af 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/execute.cy.ts @@ -63,6 +63,15 @@ describe('Response console', { tags: ['@ess', '@serverless'] }, () => { } }); + afterEach(function () { + if (Cypress.env('IS_CI') && this.currentTest?.isFailed() && createdHost) { + cy.task('captureHostVmAgentDiagnostics', { + hostname: createdHost.hostname, + fileNamePrefix: this.currentTest?.fullTitle(), + }); + } + }); + it('"execute --command" - should execute a command', () => { waitForEndpointListPageToBeLoaded(createdHost.hostname); openResponseConsoleFromEndpointList(); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts index f89f2a6f62ecf..b08dcd0eea492 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/isolate.cy.ts @@ -61,6 +61,15 @@ describe('Response console', { tags: ['@ess', '@serverless'] }, () => { } }); + afterEach(function () { + if (Cypress.env('IS_CI') && this.currentTest?.isFailed() && createdHost) { + cy.task('captureHostVmAgentDiagnostics', { + hostname: createdHost.hostname, + fileNamePrefix: this.currentTest?.fullTitle(), + }); + } + }); + describe('Host Isolation:', () => { beforeEach(() => { login(); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts index ed05f5a26e356..a2b150bfad0c2 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/process_operations.cy.ts @@ -68,6 +68,15 @@ describe.skip('Response console', { tags: ['@ess', '@serverless', '@skipInServer } }); + afterEach(function () { + if (Cypress.env('IS_CI') && this.currentTest?.isFailed() && createdHost) { + cy.task('captureHostVmAgentDiagnostics', { + hostname: createdHost.hostname, + fileNamePrefix: this.currentTest?.fullTitle(), + }); + } + }); + it('"processes" - should obtain a list of processes', () => { waitForEndpointListPageToBeLoaded(createdHost.hostname); openResponseConsoleFromEndpointList(); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts index d11b7210713a8..4f45522a76ecf 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/release.cy.ts @@ -62,6 +62,15 @@ describe('Response console', { tags: ['@ess', '@serverless'] }, () => { } }); + afterEach(function () { + if (Cypress.env('IS_CI') && this.currentTest?.isFailed() && createdHost) { + cy.task('captureHostVmAgentDiagnostics', { + hostname: createdHost.hostname, + fileNamePrefix: this.currentTest?.fullTitle(), + }); + } + }); + describe('Host Isolation:', () => { beforeEach(() => { login(); diff --git a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts index 04630647ed35f..e9ca6a7ee4229 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/e2e/response_actions/response_console/scan.cy.ts @@ -81,6 +81,15 @@ describe( } }); + afterEach(function () { + if (Cypress.env('IS_CI') && this.currentTest?.isFailed() && createdHost) { + cy.task('captureHostVmAgentDiagnostics', { + hostname: createdHost.hostname, + fileNamePrefix: this.currentTest?.fullTitle(), + }); + } + }); + [ ['file', filePath], ['folder', homeFilePath], diff --git a/x-pack/plugins/security_solution/public/management/cypress/screens/stack_management/role_page.ts b/x-pack/plugins/security_solution/public/management/cypress/screens/stack_management/role_page.ts index fb9b798b93d6e..a3e7bbc7e4e89 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/screens/stack_management/role_page.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/screens/stack_management/role_page.ts @@ -85,6 +85,13 @@ export const setKibanaPrivilegeSpace = (spaceId: string) => { cy.getByTestSubj('comboBoxOptionsList spaceSelectorComboBox-optionsList') .find(`button#spaceOption_${spaceId}`) .click(); + + // Wait for the selection to be added to the list of selected spaces + cy.getByTestSubj('spaceSelectorComboBox').find(`#spaceOption_${spaceId}`); + + // This `click()` just ensures that the combox in the UI is "closed" after the + // selection and mouse focus is moved away from that field. + getKibanaFeaturePrivilegesFlyout().click(); }; /** diff --git a/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts b/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts index fc95d174c4dd7..0a2cee2b31fe5 100644 --- a/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts +++ b/x-pack/plugins/security_solution/public/management/cypress/tasks/login.ts @@ -9,13 +9,12 @@ import type { LoginState } from '@kbn/security-plugin/common/login_state'; import type { Role } from '@kbn/security-plugin/common'; import { ENDPOINT_SECURITY_ROLE_NAMES } from '../../../../scripts/endpoint/common/roles_users'; import type { SecurityTestUser } from '../common/constants'; +import { KIBANA_KNOWN_DEFAULT_ACCOUNTS } from '../common/constants'; import { COMMON_API_HEADERS, request } from './common'; export const ROLE = Object.freeze>({ ...ENDPOINT_SECURITY_ROLE_NAMES, - elastic: 'elastic', - elastic_serverless: 'elastic_serverless', - system_indices_superuser: 'system_indices_superuser', + ...KIBANA_KNOWN_DEFAULT_ACCOUNTS, }); interface CyLoginTask { From daec1efa0886bda5a8906d58a302b43e1ddb707c Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Thu, 5 Dec 2024 16:59:00 +0100 Subject: [PATCH 095/141] [ML] Transform: Fix jest test. (#195998) ## Summary Fixes #195992 (failing test). Updates the mock for the preview endpoint to make the test pass again. ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#_add_your_labels) --- .../transform/public/app/__mocks__/app_dependencies.tsx | 9 ++++++++- .../components/step_define/step_define_summary.test.tsx | 4 +--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx b/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx index cdb159c158d10..49bd43232c9f5 100644 --- a/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx +++ b/x-pack/plugins/transform/public/app/__mocks__/app_dependencies.tsx @@ -67,7 +67,14 @@ dataStart.search.search = jest.fn(({ params }: IKibanaSearchRequest) => { }) as ISearchGeneric; // Replace mock to support tests for `use_index_data`. -coreSetup.http.post = jest.fn().mockResolvedValue([]); +coreSetup.http.post = jest.fn().mockImplementation((endpoint) => { + if (endpoint === '/internal/transform/transforms/_preview') { + return Promise.resolve({ + generated_dest_index: { mappings: { properties: {} } }, + preview: [], + }); + } +}); const appDependencies: AppDependencies = { analytics: coreStart.analytics, diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx index 5b6e314e951aa..7c08a2462f65a 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/step_define_summary.test.tsx @@ -20,9 +20,7 @@ import { StepDefineSummary } from './step_define_summary'; jest.mock('../../../../app_dependencies'); -// Failing: https://github.com/elastic/kibana/issues/195992 -describe.skip('Transform: ', () => { - // Using the async/await wait()/done() pattern to avoid act() errors. +describe('Transform: ', () => { test('Minimal initialization', async () => { // Arrange const queryClient = new QueryClient(); From 575a220474bb845db83d363b5313f84f08e56c19 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Thu, 5 Dec 2024 17:05:42 +0100 Subject: [PATCH 096/141] [OAS] Remove `Elastic-Api-Version` (#202923) ## Summary Due to the much slower rate of versioning public APIs we have decided to remove the Elastic-Api-Version body and header information from the spec entirely. This also cleans up the spec when rendered on our hosted OAS docs. Removes: 1. `Elastic-Api-Version` from the request/response bodies for all public APIs 2. `Elastic-Api-Version` header parameter from all public APIs Docs for internal APIs will still have this included as they always require a version environments. ## To revewers Important changes are all in `packages/kbn-router-to-openapispec` and `src/core/server/integration_tests/http/oas.test.ts`, the rest is very minor or generated/snapshotted changes. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- oas_docs/bundle.json | 2313 +++-------------- oas_docs/bundle.serverless.json | 2243 +++------------- oas_docs/output/kibana.serverless.yaml | 1236 +-------- oas_docs/output/kibana.yaml | 1158 +-------- .../core-http-router-server-internal/index.ts | 2 +- .../src/router.ts | 6 +- .../src/versioned_router/index.ts | 2 +- .../versioned_router/route_version_utils.ts | 6 +- .../src/http_service.ts | 6 +- .../__snapshots__/generate_oas.test.ts.snap | 205 +- .../src/generate_oas.test.fixture.ts | 65 +- .../src/generate_oas.test.ts | 34 +- .../src/generate_oas.test.util.ts | 9 +- .../src/generate_oas.ts | 13 +- .../src/process_router.test.ts | 16 +- .../src/process_router.ts | 13 +- .../src/process_versioned_router.test.ts | 102 +- .../src/process_versioned_router.ts | 56 +- .../src/util.test.ts | 4 +- .../kbn-router-to-openapispec/src/util.ts | 21 +- .../server/integration_tests/http/oas.test.ts | 98 +- 21 files changed, 994 insertions(+), 6614 deletions(-) diff --git a/oas_docs/bundle.json b/oas_docs/bundle.json index 210ecb6fa266f..320730edc972e 100644 --- a/oas_docs/bundle.json +++ b/oas_docs/bundle.json @@ -349,18 +349,6 @@ "description": "WARNING: When you delete a connector, it cannot be recovered.", "operationId": "delete-actions-connector-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -394,18 +382,6 @@ "get": { "operationId": "get-actions-connector-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "An identifier for the connector.", "in": "path", @@ -419,7 +395,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -479,18 +455,6 @@ "post": { "operationId": "post-actions-connector-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -513,7 +477,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -548,7 +512,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -608,18 +572,6 @@ "put": { "operationId": "put-actions-connector-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -642,7 +594,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -672,7 +624,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -735,18 +687,6 @@ "description": "You can use this API to test an action that involves interaction with Kibana services or integrations with third-party systems.", "operationId": "post-actions-connector-id-execute", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -769,7 +709,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -789,7 +729,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -852,18 +792,6 @@ "description": "You do not need any Kibana feature privileges to run this API.", "operationId": "get-actions-connector-types", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A filter to limit the retrieved connector types to those that support a specific feature (such as alerting or cases).", "in": "query", @@ -884,20 +812,7 @@ "/api/actions/connectors": { "get": { "operationId": "get-actions-connectors", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": {}, "summary": "Get all connectors", "tags": [ @@ -909,18 +824,6 @@ "delete": { "operationId": "delete-alerting-rule-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -963,18 +866,6 @@ "get": { "operationId": "get-alerting-rule-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "The identifier for the rule.", "in": "path", @@ -988,7 +879,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -1844,18 +1735,6 @@ "post": { "operationId": "post-alerting-rule-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -1878,7 +1757,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -2174,7 +2053,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -3030,18 +2909,6 @@ "put": { "operationId": "put-alerting-rule-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -3064,7 +2931,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -3343,7 +3210,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -4204,18 +4071,6 @@ "post": { "operationId": "post-alerting-rule-id-disable", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4238,7 +4093,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "nullable": true, @@ -4278,18 +4133,6 @@ "post": { "operationId": "post-alerting-rule-id-enable", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4334,18 +4177,6 @@ "post": { "operationId": "post-alerting-rule-id-mute-all", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4390,18 +4221,6 @@ "post": { "operationId": "post-alerting-rule-id-unmute-all", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4446,18 +4265,6 @@ "post": { "operationId": "post-alerting-rule-id-update-api-key", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4505,18 +4312,6 @@ "post": { "operationId": "post-alerting-rule-rule-id-alert-alert-id-mute", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4570,18 +4365,6 @@ "post": { "operationId": "post-alerting-rule-rule-id-alert-alert-id-unmute", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4635,18 +4418,6 @@ "get": { "operationId": "get-alerting-rules-find", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "The number of rules to return per page.", "in": "query", @@ -4793,7 +4564,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -5649,18 +5420,6 @@ "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", "operationId": "get-dashboards-dashboard", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "The page number to return. Default is \"1\".", "in": "query", @@ -5687,7 +5446,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -5836,18 +5595,6 @@ "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", "operationId": "delete-dashboards-dashboard-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -5879,18 +5626,6 @@ "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", "operationId": "get-dashboards-dashboard-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A unique identifier for the dashboard.", "in": "path", @@ -5904,7 +5639,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -6539,18 +6274,6 @@ "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", "operationId": "post-dashboards-dashboard-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -6573,7 +6296,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -7108,7 +6831,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -7715,18 +7438,6 @@ "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", "operationId": "put-dashboards-dashboard-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -7749,7 +7460,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -8278,7 +7989,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -8885,24 +8596,11 @@ "/api/fleet/agent_download_sources": { "get": { "operationId": "get-fleet-agent-download-sources", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -8962,7 +8660,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -8994,18 +8692,6 @@ "post": { "operationId": "post-fleet-agent-download-sources", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -9019,7 +8705,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9055,7 +8741,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9100,7 +8786,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -9135,18 +8821,6 @@ "description": "Delete an agent binary download source by ID.", "operationId": "delete-fleet-agent-download-sources-sourceid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -9169,7 +8843,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9187,7 +8861,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -9220,18 +8894,6 @@ "description": "Get an agent binary download source by ID.", "operationId": "get-fleet-agent-download-sources-sourceid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "sourceId", @@ -9244,7 +8906,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9289,7 +8951,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -9322,18 +8984,6 @@ "description": "Update an agent binary download source by ID.", "operationId": "put-fleet-agent-download-sources-sourceid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -9355,7 +9005,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9391,7 +9041,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9436,7 +9086,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -9470,18 +9120,6 @@ "get": { "operationId": "get-fleet-agent-policies", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "page", @@ -9578,7 +9216,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -10287,7 +9925,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -10319,18 +9957,6 @@ "post": { "operationId": "post-fleet-agent-policies", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -10352,7 +9978,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -10603,7 +10229,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -11297,7 +10923,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -11331,18 +10957,6 @@ "post": { "operationId": "post-fleet-agent-policies-bulk-get", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -11368,7 +10982,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -11398,7 +11012,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -12095,7 +11709,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -12130,18 +11744,6 @@ "description": "Delete an agent policy by ID.", "operationId": "post-fleet-agent-policies-delete", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -12155,7 +11757,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -12178,7 +11780,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -12200,7 +11802,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -12235,18 +11837,6 @@ "description": "Get a list of outputs associated with agent policies.", "operationId": "post-fleet-agent-policies-outputs", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -12260,7 +11850,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -12283,7 +11873,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -12385,7 +11975,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -12420,18 +12010,6 @@ "description": "Get an agent policy by ID.", "operationId": "get-fleet-agent-policies-agentpolicyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentPolicyId", @@ -12456,7 +12034,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -13150,7 +12728,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -13183,18 +12761,6 @@ "description": "Update an agent policy by ID.", "operationId": "put-fleet-agent-policies-agentpolicyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -13228,7 +12794,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -13479,7 +13045,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -14173,7 +13739,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -14208,18 +13774,6 @@ "description": "Copy an agent policy by ID.", "operationId": "post-fleet-agent-policies-agentpolicyid-copy", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -14253,7 +13807,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -14276,7 +13830,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -14970,7 +14524,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15005,18 +14559,6 @@ "description": "Download an agent policy by ID.", "operationId": "get-fleet-agent-policies-agentpolicyid-download", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentPolicyId", @@ -15053,7 +14595,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "type": "string" } @@ -15062,7 +14604,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15087,7 +14629,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15122,18 +14664,6 @@ "description": "Get a full agent policy by ID.", "operationId": "get-fleet-agent-policies-agentpolicyid-full", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentPolicyId", @@ -15170,7 +14700,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -15625,7 +15155,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15660,18 +15190,6 @@ "description": "Get a list of outputs associated with agent policy by policy id.", "operationId": "get-fleet-agent-policies-agentpolicyid-outputs", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentPolicyId", @@ -15684,7 +15202,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -15783,7 +15301,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15817,18 +15335,6 @@ "get": { "operationId": "get-fleet-agent-status", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "policyId", @@ -15867,7 +15373,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -15930,7 +15436,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15964,18 +15470,6 @@ "get": { "operationId": "get-fleet-agent-status-data", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "agentsIds", @@ -16023,7 +15517,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -16061,7 +15555,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -16095,18 +15589,6 @@ "get": { "operationId": "get-fleet-agents", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "page", @@ -16193,7 +15675,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -16614,7 +16096,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -16646,18 +16128,6 @@ "post": { "operationId": "post-fleet-agents", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -16671,7 +16141,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -16693,7 +16163,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -16714,7 +16184,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -16748,18 +16218,6 @@ "get": { "operationId": "get-fleet-agents-action-status", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "page", @@ -16807,7 +16265,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -16949,7 +16407,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -16983,18 +16441,6 @@ "post": { "operationId": "post-fleet-agents-actions-actionid-cancel", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17017,7 +16463,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17090,7 +16536,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17123,24 +16569,11 @@ "/api/fleet/agents/available_versions": { "get": { "operationId": "get-fleet-agents-available-versions", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17161,7 +16594,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17195,18 +16628,6 @@ "post": { "operationId": "post-fleet-agents-bulk-reassign", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17220,7 +16641,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17260,7 +16681,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17278,7 +16699,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17312,18 +16733,6 @@ "post": { "operationId": "post-fleet-agents-bulk-request-diagnostics", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17337,7 +16746,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17378,7 +16787,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17396,7 +16805,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17430,18 +16839,6 @@ "post": { "operationId": "post-fleet-agents-bulk-unenroll", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17455,7 +16852,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17501,7 +16898,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17519,7 +16916,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17553,18 +16950,6 @@ "post": { "operationId": "post-fleet-agents-bulk-update-agent-tags", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17578,7 +16963,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17626,7 +17011,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17644,7 +17029,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17678,18 +17063,6 @@ "post": { "operationId": "post-fleet-agents-bulk-upgrade", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17703,7 +17076,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17759,7 +17132,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17777,7 +17150,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17812,18 +17185,6 @@ "description": "Delete a file uploaded by an agent.", "operationId": "delete-fleet-agents-files-fileid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17846,7 +17207,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17868,7 +17229,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17903,18 +17264,6 @@ "description": "Get a file uploaded by an agent.", "operationId": "get-fleet-agents-files-fileid-filename", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "fileId", @@ -17935,7 +17284,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "type": "object" } @@ -17944,7 +17293,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17977,24 +17326,11 @@ "/api/fleet/agents/setup": { "get": { "operationId": "get-fleet-agents-setup", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "A summary of the agent setup status. `isReady` indicates whether the setup is ready. If the setup is not ready, `missing_requirements` lists which requirements are missing.", @@ -18046,7 +17382,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -18078,18 +17414,6 @@ "post": { "operationId": "post-fleet-agents-setup", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -18104,7 +17428,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "A summary of the result of Fleet's `setup` lifecycle. If `isInitialized` is true, Fleet is ready to accept agent enrollment. `nonFatalErrors` may include useful insight into non-blocking issues with Fleet setup.", @@ -18143,7 +17467,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -18177,18 +17501,6 @@ "get": { "operationId": "get-fleet-agents-tags", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "kuery", @@ -18210,7 +17522,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -18231,7 +17543,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -18266,18 +17578,6 @@ "description": "Delete an agent by ID.", "operationId": "delete-fleet-agents-agentid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -18300,7 +17600,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -18321,7 +17621,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -18354,18 +17654,6 @@ "description": "Get an agent by ID.", "operationId": "get-fleet-agents-agentid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentId", @@ -18387,7 +17675,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -18787,7 +18075,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -18820,18 +18108,6 @@ "description": "Update an agent by ID.", "operationId": "put-fleet-agents-agentid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -18853,7 +18129,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -18876,7 +18152,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19276,7 +18552,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -19310,18 +18586,6 @@ "post": { "operationId": "post-fleet-agents-agentid-actions", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -19343,7 +18607,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19419,7 +18683,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19492,7 +18756,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -19526,18 +18790,6 @@ "post": { "operationId": "post-fleet-agents-agentid-reassign", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -19559,7 +18811,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19578,7 +18830,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": {}, @@ -19589,7 +18841,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -19623,18 +18875,6 @@ "post": { "operationId": "post-fleet-agents-agentid-request-diagnostics", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -19656,7 +18896,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "nullable": true, @@ -19679,7 +18919,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19697,7 +18937,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -19731,18 +18971,6 @@ "post": { "operationId": "post-fleet-agents-agentid-unenroll", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -19764,7 +18992,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "nullable": true, @@ -19792,18 +19020,6 @@ "post": { "operationId": "post-fleet-agents-agentid-upgrade", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -19825,7 +19041,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19853,7 +19069,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": {}, @@ -19864,7 +19080,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -19898,18 +19114,6 @@ "get": { "operationId": "get-fleet-agents-agentid-uploads", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentId", @@ -19922,7 +19126,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19983,7 +19187,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20017,18 +19221,6 @@ "get": { "operationId": "get-fleet-check-permissions", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "fleetServerSetup", @@ -20041,7 +19233,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20067,7 +19259,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20100,24 +19292,11 @@ "/api/fleet/data_streams": { "get": { "operationId": "get-fleet-data-streams", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20224,7 +19403,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20258,18 +19437,6 @@ "get": { "operationId": "get-fleet-enrollment-api-keys", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "page", @@ -20300,7 +19467,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20413,7 +19580,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20445,18 +19612,6 @@ "post": { "operationId": "post-fleet-enrollment-api-keys", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -20470,7 +19625,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20495,7 +19650,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20556,7 +19711,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20591,18 +19746,6 @@ "description": "Revoke an enrollment API key by ID by marking it as inactive.", "operationId": "delete-fleet-enrollment-api-keys-keyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -20625,7 +19768,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20646,7 +19789,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20679,18 +19822,6 @@ "description": "Get an enrollment API key by ID.", "operationId": "get-fleet-enrollment-api-keys-keyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "keyId", @@ -20703,7 +19834,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20757,7 +19888,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20791,18 +19922,6 @@ "post": { "operationId": "post-fleet-epm-bulk-assets", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -20816,7 +19935,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20851,7 +19970,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20907,7 +20026,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20941,18 +20060,6 @@ "get": { "operationId": "get-fleet-epm-categories", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "prerelease", @@ -20973,7 +20080,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -21017,7 +20124,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -21051,18 +20158,6 @@ "post": { "operationId": "post-fleet-epm-custom-integrations", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -21076,7 +20171,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -21125,7 +20220,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -21225,7 +20320,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -21259,18 +20354,6 @@ "get": { "operationId": "get-fleet-epm-data-streams", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "type", @@ -21320,7 +20403,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -21350,7 +20433,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -21384,18 +20467,6 @@ "get": { "operationId": "get-fleet-epm-packages", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "category", @@ -21424,7 +20495,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -21923,7 +20994,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -21955,18 +21026,6 @@ "post": { "operationId": "post-fleet-epm-packages", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -21998,7 +21057,7 @@ ], "requestBody": { "content": { - "application/gzip; application/zip; Elastic-Api-Version=2023-10-31": { + "application/gzip; application/zip": { "schema": { "format": "binary", "type": "string" @@ -22009,7 +21068,7 @@ "responses": { "200": { "content": { - "application/gzip; application/zip; Elastic-Api-Version=2023-10-31": { + "application/gzip; application/zip": { "schema": { "additionalProperties": false, "properties": { @@ -22109,7 +21168,7 @@ }, "400": { "content": { - "application/gzip; application/zip; Elastic-Api-Version=2023-10-31": { + "application/gzip; application/zip": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22143,18 +21202,6 @@ "post": { "operationId": "post-fleet-epm-packages-bulk", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -22176,7 +21223,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22226,7 +21273,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22386,7 +21433,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22420,18 +21467,6 @@ "get": { "operationId": "get-fleet-epm-packages-installed", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "dataStreamType", @@ -22507,7 +21542,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22626,7 +21661,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22659,24 +21694,11 @@ "/api/fleet/epm/packages/limited": { "get": { "operationId": "get-fleet-epm-packages-limited", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22697,7 +21719,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22731,18 +21753,6 @@ "get": { "operationId": "get-fleet-epm-packages-pkgname-stats", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "pkgName", @@ -22755,7 +21765,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22782,7 +21792,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22816,18 +21826,6 @@ "delete": { "operationId": "delete-fleet-epm-packages-pkgname-pkgversion", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -22866,7 +21864,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22953,7 +21951,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22985,18 +21983,6 @@ "get": { "operationId": "get-fleet-epm-packages-pkgname-pkgversion", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "pkgName", @@ -23050,7 +22036,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -23644,7 +22630,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -23676,18 +22662,6 @@ "post": { "operationId": "post-fleet-epm-packages-pkgname-pkgversion", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -23743,7 +22717,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "nullable": true, @@ -23765,7 +22739,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -23865,7 +22839,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -23897,18 +22871,6 @@ "put": { "operationId": "put-fleet-epm-packages-pkgname-pkgversion", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -23938,7 +22900,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -23957,7 +22919,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -24539,7 +23501,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -24573,18 +23535,6 @@ "post": { "operationId": "post-fleet-epm-packages-pkgname-pkgversion-transforms-authorize", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -24622,7 +23572,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -24653,7 +23603,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "items": { "additionalProperties": false, @@ -24682,7 +23632,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -24716,18 +23666,6 @@ "get": { "operationId": "get-fleet-epm-packages-pkgname-pkgversion-filepath", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "pkgName", @@ -24756,14 +23694,14 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": {} } } }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -24797,18 +23735,6 @@ "get": { "operationId": "get-fleet-epm-templates-pkgname-pkgversion-inputs", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "pkgName", @@ -24859,7 +23785,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -24931,7 +23857,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -24964,24 +23890,11 @@ "/api/fleet/epm/verification_key_id": { "get": { "operationId": "get-fleet-epm-verification-key-id", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25000,7 +23913,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25033,24 +23946,11 @@ "/api/fleet/fleet_server_hosts": { "get": { "operationId": "get-fleet-fleet-server-hosts", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25119,7 +24019,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25151,18 +24051,6 @@ "post": { "operationId": "post-fleet-fleet-server-hosts", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -25176,7 +24064,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25221,7 +24109,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25275,7 +24163,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25310,18 +24198,6 @@ "description": "Delete a Fleet Server host by ID.", "operationId": "delete-fleet-fleet-server-hosts-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -25344,7 +24220,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25362,7 +24238,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25395,18 +24271,6 @@ "description": "Get a Fleet Server host by ID.", "operationId": "get-fleet-fleet-server-hosts-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "itemId", @@ -25419,7 +24283,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25473,7 +24337,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25506,18 +24370,6 @@ "description": "Update a Fleet Server host by ID.", "operationId": "put-fleet-fleet-server-hosts-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -25539,7 +24391,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25575,7 +24427,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25629,7 +24481,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25663,18 +24515,6 @@ "post": { "operationId": "post-fleet-health-check", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -25688,7 +24528,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25707,7 +24547,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25731,7 +24571,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25756,7 +24596,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25790,18 +24630,6 @@ "get": { "operationId": "get-fleet-kubernetes", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "download", @@ -25830,7 +24658,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25848,7 +24676,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25882,18 +24710,6 @@ "get": { "operationId": "get-fleet-kubernetes-download", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "download", @@ -25922,7 +24738,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "type": "string" } @@ -25931,7 +24747,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25956,7 +24772,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25990,18 +24806,6 @@ "post": { "operationId": "post-fleet-logstash-api-keys", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -26016,7 +24820,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -26034,7 +24838,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -26068,18 +24872,6 @@ "post": { "operationId": "post-fleet-message-signing-service-rotate-key-pair", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -26103,7 +24895,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -26121,7 +24913,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -26146,7 +24938,7 @@ }, "500": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -26179,24 +24971,11 @@ "/api/fleet/outputs": { "get": { "operationId": "get-fleet-outputs", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -27244,7 +26023,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -27276,18 +26055,6 @@ "post": { "operationId": "post-fleet-outputs", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -27301,7 +26068,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -28326,7 +27093,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -29359,7 +28126,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -29394,18 +28161,6 @@ "description": "Delete output by ID.", "operationId": "delete-fleet-outputs-outputid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -29428,7 +28183,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -29446,7 +28201,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -29471,7 +28226,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -29504,18 +28259,6 @@ "description": "Get output by ID.", "operationId": "get-fleet-outputs-outputid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "outputId", @@ -29528,7 +28271,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -30561,7 +29304,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -30594,18 +29337,6 @@ "description": "Update output by ID.", "operationId": "put-fleet-outputs-outputid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -30627,7 +29358,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -31628,7 +30359,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -32661,7 +31392,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -32695,18 +31426,6 @@ "get": { "operationId": "get-fleet-outputs-outputid-health", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "outputId", @@ -32719,7 +31438,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -32748,7 +31467,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -32782,18 +31501,6 @@ "get": { "operationId": "get-fleet-package-policies", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "page", @@ -32870,7 +31577,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -33470,7 +32177,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -33502,18 +32209,6 @@ "post": { "operationId": "post-fleet-package-policies", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -33539,7 +32234,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -34149,7 +32844,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -34734,7 +33429,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -34759,7 +33454,7 @@ }, "409": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -34793,18 +33488,6 @@ "post": { "operationId": "post-fleet-package-policies-bulk-get", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -34830,7 +33513,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -34856,7 +33539,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -35444,7 +34127,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -35469,7 +34152,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -35496,18 +34179,6 @@ "post": { "operationId": "post-fleet-package-policies-delete", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -35521,7 +34192,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -35546,7 +34217,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "items": { "additionalProperties": false, @@ -35665,7 +34336,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -35700,18 +34371,6 @@ "description": "Upgrade a package policy to a newer package version.", "operationId": "post-fleet-package-policies-upgrade", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -35725,7 +34384,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -35747,7 +34406,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "items": { "additionalProperties": false, @@ -35790,7 +34449,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -35824,18 +34483,6 @@ "post": { "operationId": "post-fleet-package-policies-upgrade-dryrun", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -35849,7 +34496,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -35874,7 +34521,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "items": { "additionalProperties": false, @@ -36987,7 +35634,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -37022,18 +35669,6 @@ "description": "Delete a package policy by ID.", "operationId": "delete-fleet-package-policies-packagepolicyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -37064,7 +35699,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -37082,7 +35717,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -37115,18 +35750,6 @@ "description": "Get a package policy by ID.", "operationId": "get-fleet-package-policies-packagepolicyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "packagePolicyId", @@ -37151,7 +35774,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -37736,7 +36359,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -37761,7 +36384,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -37787,18 +36410,6 @@ "description": "Update a package policy by ID.", "operationId": "put-fleet-package-policies-packagepolicyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -37832,7 +36443,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -38434,7 +37045,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39019,7 +37630,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39044,7 +37655,7 @@ }, "403": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39077,24 +37688,11 @@ "/api/fleet/proxies": { "get": { "operationId": "get-fleet-proxies", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39177,7 +37775,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39209,18 +37807,6 @@ "post": { "operationId": "post-fleet-proxies", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -39234,7 +37820,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39293,7 +37879,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39361,7 +37947,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39396,18 +37982,6 @@ "description": "Delete a proxy by ID", "operationId": "delete-fleet-proxies-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -39430,7 +38004,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39448,7 +38022,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39481,18 +38055,6 @@ "description": "Get a proxy by ID.", "operationId": "get-fleet-proxies-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "itemId", @@ -39505,7 +38067,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39573,7 +38135,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39606,18 +38168,6 @@ "description": "Update a proxy by ID.", "operationId": "put-fleet-proxies-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -39639,7 +38189,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39693,7 +38243,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39761,7 +38311,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39795,18 +38345,6 @@ "post": { "operationId": "post-fleet-service-tokens", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -39820,7 +38358,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "nullable": true, @@ -39838,7 +38376,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39860,7 +38398,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39893,24 +38431,11 @@ "/api/fleet/settings": { "get": { "operationId": "get-fleet-settings", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39989,7 +38514,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -40014,7 +38539,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40039,18 +38564,6 @@ "put": { "operationId": "put-fleet-settings", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -40064,7 +38577,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40112,7 +38625,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40191,7 +38704,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -40216,7 +38729,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40243,18 +38756,6 @@ "post": { "operationId": "post-fleet-setup", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -40269,7 +38770,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "A summary of the result of Fleet's `setup` lifecycle. If `isInitialized` is true, Fleet is ready to accept agent enrollment. `nonFatalErrors` may include useful insight into non-blocking issues with Fleet setup.", @@ -40308,7 +38809,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -40333,7 +38834,7 @@ }, "500": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Internal Server Error", @@ -40362,18 +38863,6 @@ "description": "List the metadata for the latest uninstall tokens per agent policy.", "operationId": "get-fleet-uninstall-tokens", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "Partial match filtering for policy IDs", "in": "query", @@ -40416,7 +38905,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40476,7 +38965,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -40511,18 +39000,6 @@ "description": "Get one decrypted uninstall token by its ID.", "operationId": "get-fleet-uninstall-tokens-uninstalltokenid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "uninstallTokenId", @@ -40535,7 +39012,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40584,7 +39061,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -40618,18 +39095,6 @@ "get": { "operationId": "get-security-role", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "If `true` and the response contains any privileges that are associated with deprecated features, they are omitted in favor of details about the appropriate replacement feature privileges.", "in": "query", @@ -40655,18 +39120,6 @@ "delete": { "operationId": "delete-security-role-name", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -40700,18 +39153,6 @@ "get": { "operationId": "get-security-role-name", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "The role name.", "in": "path", @@ -40746,18 +39187,6 @@ "description": "Create a new Kibana role or update the attributes of an existing role. Kibana roles are stored in the Elasticsearch native realm.", "operationId": "put-security-role-name", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -40792,7 +39221,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -41065,18 +39494,6 @@ "post": { "operationId": "post-security-roles", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -41090,7 +39507,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -41376,18 +39793,6 @@ "description": "It also allows you to automatically copy related objects, so when you copy a dashboard, this can automatically copy over the associated visualizations, data views, and saved searches, as required. You can request to overwrite any objects that already exist in the target space if they share an identifier or you can use the resolve copy saved objects conflicts API to do this on a per-object basis.

    [Required authorization] Route required privileges: ALL of [copySavedObjectsToSpaces].", "operationId": "post-spaces-copy-saved-objects", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -41401,7 +39806,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -41474,18 +39879,6 @@ "post": { "operationId": "post-spaces-disable-legacy-url-aliases", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -41499,7 +39892,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -41550,18 +39943,6 @@ "description": "Collect references and space contexts for saved objects.", "operationId": "post-spaces-get-shareable-references", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -41575,7 +39956,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -41619,18 +40000,6 @@ "description": "Overwrite saved objects that are returned as errors from the copy saved objects to space API.

    [Required authorization] Route required privileges: ALL of [copySavedObjectsToSpaces].", "operationId": "post-spaces-resolve-copy-saved-objects-errors", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -41644,7 +40013,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -41740,18 +40109,6 @@ "description": "Update one or more saved objects to add or remove them from some spaces.", "operationId": "post-spaces-update-objects-spaces", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -41765,7 +40122,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -41826,18 +40183,6 @@ "get": { "operationId": "get-spaces-space", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "Specifies which authorization checks are applied to the API call. The default value is `any`.", "in": "query", @@ -41906,18 +40251,6 @@ "post": { "operationId": "post-spaces-space", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -41931,7 +40264,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -42007,18 +40340,6 @@ "description": "When you delete a space, all saved objects that belong to the space are automatically deleted, which is permanent and cannot be undone.", "operationId": "delete-spaces-space-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -42055,18 +40376,6 @@ "get": { "operationId": "get-spaces-space-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "The space identifier.", "in": "path", @@ -42090,18 +40399,6 @@ "put": { "operationId": "put-spaces-space-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -42124,7 +40421,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -42199,18 +40496,6 @@ "get": { "operationId": "get-status", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "Set to \"true\" to get the response in v7 format.", "in": "query", @@ -42233,7 +40518,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -42251,7 +40536,7 @@ }, "503": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { diff --git a/oas_docs/bundle.serverless.json b/oas_docs/bundle.serverless.json index ff2a4b17661b9..b188ae0999b0d 100644 --- a/oas_docs/bundle.serverless.json +++ b/oas_docs/bundle.serverless.json @@ -349,18 +349,6 @@ "description": "WARNING: When you delete a connector, it cannot be recovered.", "operationId": "delete-actions-connector-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -394,18 +382,6 @@ "get": { "operationId": "get-actions-connector-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "An identifier for the connector.", "in": "path", @@ -419,7 +395,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -479,18 +455,6 @@ "post": { "operationId": "post-actions-connector-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -513,7 +477,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -548,7 +512,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -608,18 +572,6 @@ "put": { "operationId": "put-actions-connector-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -642,7 +594,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -672,7 +624,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -735,18 +687,6 @@ "description": "You can use this API to test an action that involves interaction with Kibana services or integrations with third-party systems.", "operationId": "post-actions-connector-id-execute", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -769,7 +709,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -789,7 +729,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -852,18 +792,6 @@ "description": "You do not need any Kibana feature privileges to run this API.", "operationId": "get-actions-connector-types", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A filter to limit the retrieved connector types to those that support a specific feature (such as alerting or cases).", "in": "query", @@ -884,20 +812,7 @@ "/api/actions/connectors": { "get": { "operationId": "get-actions-connectors", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": {}, "summary": "Get all connectors", "tags": [ @@ -909,18 +824,6 @@ "delete": { "operationId": "delete-alerting-rule-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -963,18 +866,6 @@ "get": { "operationId": "get-alerting-rule-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "The identifier for the rule.", "in": "path", @@ -988,7 +879,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -1844,18 +1735,6 @@ "post": { "operationId": "post-alerting-rule-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -1878,7 +1757,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -2174,7 +2053,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -3030,18 +2909,6 @@ "put": { "operationId": "put-alerting-rule-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -3064,7 +2931,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -3343,7 +3210,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -4204,18 +4071,6 @@ "post": { "operationId": "post-alerting-rule-id-disable", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4238,7 +4093,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "nullable": true, @@ -4278,18 +4133,6 @@ "post": { "operationId": "post-alerting-rule-id-enable", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4334,18 +4177,6 @@ "post": { "operationId": "post-alerting-rule-id-mute-all", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4390,18 +4221,6 @@ "post": { "operationId": "post-alerting-rule-id-unmute-all", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4446,18 +4265,6 @@ "post": { "operationId": "post-alerting-rule-id-update-api-key", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4505,18 +4312,6 @@ "post": { "operationId": "post-alerting-rule-rule-id-alert-alert-id-mute", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4570,18 +4365,6 @@ "post": { "operationId": "post-alerting-rule-rule-id-alert-alert-id-unmute", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -4635,18 +4418,6 @@ "get": { "operationId": "get-alerting-rules-find", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "The number of rules to return per page.", "in": "query", @@ -4793,7 +4564,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -5649,18 +5420,6 @@ "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", "operationId": "get-dashboards-dashboard", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "The page number to return. Default is \"1\".", "in": "query", @@ -5687,7 +5446,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -5836,18 +5595,6 @@ "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", "operationId": "delete-dashboards-dashboard-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -5879,18 +5626,6 @@ "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", "operationId": "get-dashboards-dashboard-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A unique identifier for the dashboard.", "in": "path", @@ -5904,7 +5639,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -6539,18 +6274,6 @@ "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", "operationId": "post-dashboards-dashboard-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -6573,7 +6296,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -7108,7 +6831,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -7715,18 +7438,6 @@ "description": "This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features.", "operationId": "put-dashboards-dashboard-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -7749,7 +7460,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -8278,7 +7989,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -8885,24 +8596,11 @@ "/api/fleet/agent_download_sources": { "get": { "operationId": "get-fleet-agent-download-sources", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -8962,7 +8660,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -8994,18 +8692,6 @@ "post": { "operationId": "post-fleet-agent-download-sources", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -9019,7 +8705,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9055,7 +8741,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9100,7 +8786,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -9135,18 +8821,6 @@ "description": "Delete an agent binary download source by ID.", "operationId": "delete-fleet-agent-download-sources-sourceid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -9169,7 +8843,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9187,7 +8861,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -9220,18 +8894,6 @@ "description": "Get an agent binary download source by ID.", "operationId": "get-fleet-agent-download-sources-sourceid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "sourceId", @@ -9244,7 +8906,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9289,7 +8951,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -9322,18 +8984,6 @@ "description": "Update an agent binary download source by ID.", "operationId": "put-fleet-agent-download-sources-sourceid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -9355,7 +9005,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9391,7 +9041,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -9436,7 +9086,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -9470,18 +9120,6 @@ "get": { "operationId": "get-fleet-agent-policies", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "page", @@ -9578,7 +9216,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -10287,7 +9925,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -10319,18 +9957,6 @@ "post": { "operationId": "post-fleet-agent-policies", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -10352,7 +9978,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -10603,7 +10229,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -11297,7 +10923,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -11331,18 +10957,6 @@ "post": { "operationId": "post-fleet-agent-policies-bulk-get", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -11368,7 +10982,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -11398,7 +11012,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -12095,7 +11709,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -12130,18 +11744,6 @@ "description": "Delete an agent policy by ID.", "operationId": "post-fleet-agent-policies-delete", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -12155,7 +11757,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -12178,7 +11780,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -12200,7 +11802,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -12235,18 +11837,6 @@ "description": "Get a list of outputs associated with agent policies.", "operationId": "post-fleet-agent-policies-outputs", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -12260,7 +11850,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -12283,7 +11873,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -12385,7 +11975,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -12420,18 +12010,6 @@ "description": "Get an agent policy by ID.", "operationId": "get-fleet-agent-policies-agentpolicyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentPolicyId", @@ -12456,7 +12034,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -13150,7 +12728,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -13183,18 +12761,6 @@ "description": "Update an agent policy by ID.", "operationId": "put-fleet-agent-policies-agentpolicyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -13228,7 +12794,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -13479,7 +13045,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -14173,7 +13739,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -14208,18 +13774,6 @@ "description": "Copy an agent policy by ID.", "operationId": "post-fleet-agent-policies-agentpolicyid-copy", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -14253,7 +13807,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -14276,7 +13830,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -14970,7 +14524,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15005,18 +14559,6 @@ "description": "Download an agent policy by ID.", "operationId": "get-fleet-agent-policies-agentpolicyid-download", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentPolicyId", @@ -15053,7 +14595,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "type": "string" } @@ -15062,7 +14604,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15087,7 +14629,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15122,18 +14664,6 @@ "description": "Get a full agent policy by ID.", "operationId": "get-fleet-agent-policies-agentpolicyid-full", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentPolicyId", @@ -15170,7 +14700,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -15625,7 +15155,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15660,18 +15190,6 @@ "description": "Get a list of outputs associated with agent policy by policy id.", "operationId": "get-fleet-agent-policies-agentpolicyid-outputs", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentPolicyId", @@ -15684,7 +15202,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -15783,7 +15301,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15817,18 +15335,6 @@ "get": { "operationId": "get-fleet-agent-status", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "policyId", @@ -15867,7 +15373,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -15930,7 +15436,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -15964,18 +15470,6 @@ "get": { "operationId": "get-fleet-agent-status-data", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "agentsIds", @@ -16023,7 +15517,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -16061,7 +15555,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -16095,18 +15589,6 @@ "get": { "operationId": "get-fleet-agents", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "page", @@ -16193,7 +15675,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -16614,7 +16096,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -16646,18 +16128,6 @@ "post": { "operationId": "post-fleet-agents", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -16671,7 +16141,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -16693,7 +16163,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -16714,7 +16184,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -16748,18 +16218,6 @@ "get": { "operationId": "get-fleet-agents-action-status", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "page", @@ -16807,7 +16265,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -16949,7 +16407,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -16983,18 +16441,6 @@ "post": { "operationId": "post-fleet-agents-actions-actionid-cancel", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17017,7 +16463,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17090,7 +16536,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17123,24 +16569,11 @@ "/api/fleet/agents/available_versions": { "get": { "operationId": "get-fleet-agents-available-versions", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17161,7 +16594,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17195,18 +16628,6 @@ "post": { "operationId": "post-fleet-agents-bulk-reassign", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17220,7 +16641,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17260,7 +16681,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17278,7 +16699,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17312,18 +16733,6 @@ "post": { "operationId": "post-fleet-agents-bulk-request-diagnostics", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17337,7 +16746,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17378,7 +16787,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17396,7 +16805,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17430,18 +16839,6 @@ "post": { "operationId": "post-fleet-agents-bulk-unenroll", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17455,7 +16852,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17501,7 +16898,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17519,7 +16916,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17553,18 +16950,6 @@ "post": { "operationId": "post-fleet-agents-bulk-update-agent-tags", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17578,7 +16963,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17626,7 +17011,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17644,7 +17029,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17678,18 +17063,6 @@ "post": { "operationId": "post-fleet-agents-bulk-upgrade", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17703,7 +17076,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17759,7 +17132,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17777,7 +17150,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17812,18 +17185,6 @@ "description": "Delete a file uploaded by an agent.", "operationId": "delete-fleet-agents-files-fileid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -17846,7 +17207,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -17868,7 +17229,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17903,18 +17264,6 @@ "description": "Get a file uploaded by an agent.", "operationId": "get-fleet-agents-files-fileid-filename", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "fileId", @@ -17935,7 +17284,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "type": "object" } @@ -17944,7 +17293,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -17977,24 +17326,11 @@ "/api/fleet/agents/setup": { "get": { "operationId": "get-fleet-agents-setup", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "A summary of the agent setup status. `isReady` indicates whether the setup is ready. If the setup is not ready, `missing_requirements` lists which requirements are missing.", @@ -18046,7 +17382,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -18078,18 +17414,6 @@ "post": { "operationId": "post-fleet-agents-setup", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -18104,7 +17428,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "A summary of the result of Fleet's `setup` lifecycle. If `isInitialized` is true, Fleet is ready to accept agent enrollment. `nonFatalErrors` may include useful insight into non-blocking issues with Fleet setup.", @@ -18143,7 +17467,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -18177,18 +17501,6 @@ "get": { "operationId": "get-fleet-agents-tags", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "kuery", @@ -18210,7 +17522,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -18231,7 +17543,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -18266,18 +17578,6 @@ "description": "Delete an agent by ID.", "operationId": "delete-fleet-agents-agentid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -18300,7 +17600,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -18321,7 +17621,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -18354,18 +17654,6 @@ "description": "Get an agent by ID.", "operationId": "get-fleet-agents-agentid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentId", @@ -18387,7 +17675,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -18787,7 +18075,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -18820,18 +18108,6 @@ "description": "Update an agent by ID.", "operationId": "put-fleet-agents-agentid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -18853,7 +18129,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -18876,7 +18152,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19276,7 +18552,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -19310,18 +18586,6 @@ "post": { "operationId": "post-fleet-agents-agentid-actions", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -19343,7 +18607,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19419,7 +18683,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19492,7 +18756,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -19526,18 +18790,6 @@ "post": { "operationId": "post-fleet-agents-agentid-reassign", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -19559,7 +18811,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19578,7 +18830,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": {}, @@ -19589,7 +18841,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -19623,18 +18875,6 @@ "post": { "operationId": "post-fleet-agents-agentid-request-diagnostics", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -19656,7 +18896,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "nullable": true, @@ -19679,7 +18919,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19697,7 +18937,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -19731,18 +18971,6 @@ "post": { "operationId": "post-fleet-agents-agentid-unenroll", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -19764,7 +18992,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "nullable": true, @@ -19792,18 +19020,6 @@ "post": { "operationId": "post-fleet-agents-agentid-upgrade", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -19825,7 +19041,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19853,7 +19069,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": {}, @@ -19864,7 +19080,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -19898,18 +19114,6 @@ "get": { "operationId": "get-fleet-agents-agentid-uploads", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "agentId", @@ -19922,7 +19126,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -19983,7 +19187,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20017,18 +19221,6 @@ "get": { "operationId": "get-fleet-check-permissions", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "fleetServerSetup", @@ -20041,7 +19233,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20067,7 +19259,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20100,24 +19292,11 @@ "/api/fleet/data_streams": { "get": { "operationId": "get-fleet-data-streams", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20224,7 +19403,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20258,18 +19437,6 @@ "get": { "operationId": "get-fleet-enrollment-api-keys", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "page", @@ -20300,7 +19467,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20413,7 +19580,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20445,18 +19612,6 @@ "post": { "operationId": "post-fleet-enrollment-api-keys", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -20470,7 +19625,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20495,7 +19650,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20556,7 +19711,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20591,18 +19746,6 @@ "description": "Revoke an enrollment API key by ID by marking it as inactive.", "operationId": "delete-fleet-enrollment-api-keys-keyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -20625,7 +19768,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20646,7 +19789,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20679,18 +19822,6 @@ "description": "Get an enrollment API key by ID.", "operationId": "get-fleet-enrollment-api-keys-keyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "keyId", @@ -20703,7 +19834,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20757,7 +19888,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20791,18 +19922,6 @@ "post": { "operationId": "post-fleet-epm-bulk-assets", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -20816,7 +19935,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20851,7 +19970,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -20907,7 +20026,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -20941,18 +20060,6 @@ "get": { "operationId": "get-fleet-epm-categories", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "prerelease", @@ -20973,7 +20080,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -21017,7 +20124,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -21051,18 +20158,6 @@ "post": { "operationId": "post-fleet-epm-custom-integrations", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -21076,7 +20171,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -21125,7 +20220,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -21225,7 +20320,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -21259,18 +20354,6 @@ "get": { "operationId": "get-fleet-epm-data-streams", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "type", @@ -21320,7 +20403,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -21350,7 +20433,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -21384,18 +20467,6 @@ "get": { "operationId": "get-fleet-epm-packages", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "category", @@ -21424,7 +20495,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -21923,7 +20994,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -21955,18 +21026,6 @@ "post": { "operationId": "post-fleet-epm-packages", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -21998,7 +21057,7 @@ ], "requestBody": { "content": { - "application/gzip; application/zip; Elastic-Api-Version=2023-10-31": { + "application/gzip; application/zip": { "schema": { "format": "binary", "type": "string" @@ -22009,7 +21068,7 @@ "responses": { "200": { "content": { - "application/gzip; application/zip; Elastic-Api-Version=2023-10-31": { + "application/gzip; application/zip": { "schema": { "additionalProperties": false, "properties": { @@ -22109,7 +21168,7 @@ }, "400": { "content": { - "application/gzip; application/zip; Elastic-Api-Version=2023-10-31": { + "application/gzip; application/zip": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22143,18 +21202,6 @@ "post": { "operationId": "post-fleet-epm-packages-bulk", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -22176,7 +21223,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22226,7 +21273,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22386,7 +21433,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22420,18 +21467,6 @@ "get": { "operationId": "get-fleet-epm-packages-installed", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "dataStreamType", @@ -22507,7 +21542,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22626,7 +21661,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22659,24 +21694,11 @@ "/api/fleet/epm/packages/limited": { "get": { "operationId": "get-fleet-epm-packages-limited", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22697,7 +21719,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22731,18 +21753,6 @@ "get": { "operationId": "get-fleet-epm-packages-pkgname-stats", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "pkgName", @@ -22755,7 +21765,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22782,7 +21792,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22816,18 +21826,6 @@ "delete": { "operationId": "delete-fleet-epm-packages-pkgname-pkgversion", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -22866,7 +21864,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -22953,7 +21951,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -22985,18 +21983,6 @@ "get": { "operationId": "get-fleet-epm-packages-pkgname-pkgversion", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "pkgName", @@ -23050,7 +22036,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -23644,7 +22630,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -23676,18 +22662,6 @@ "post": { "operationId": "post-fleet-epm-packages-pkgname-pkgversion", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -23743,7 +22717,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "nullable": true, @@ -23765,7 +22739,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -23865,7 +22839,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -23897,18 +22871,6 @@ "put": { "operationId": "put-fleet-epm-packages-pkgname-pkgversion", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -23938,7 +22900,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -23957,7 +22919,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -24539,7 +23501,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -24573,18 +23535,6 @@ "post": { "operationId": "post-fleet-epm-packages-pkgname-pkgversion-transforms-authorize", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -24622,7 +23572,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -24653,7 +23603,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "items": { "additionalProperties": false, @@ -24682,7 +23632,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -24716,18 +23666,6 @@ "get": { "operationId": "get-fleet-epm-packages-pkgname-pkgversion-filepath", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "pkgName", @@ -24756,14 +23694,14 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": {} } } }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -24797,18 +23735,6 @@ "get": { "operationId": "get-fleet-epm-templates-pkgname-pkgversion-inputs", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "pkgName", @@ -24859,7 +23785,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -24931,7 +23857,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -24964,24 +23890,11 @@ "/api/fleet/epm/verification_key_id": { "get": { "operationId": "get-fleet-epm-verification-key-id", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25000,7 +23913,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25033,24 +23946,11 @@ "/api/fleet/fleet_server_hosts": { "get": { "operationId": "get-fleet-fleet-server-hosts", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25119,7 +24019,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25151,18 +24051,6 @@ "post": { "operationId": "post-fleet-fleet-server-hosts", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -25176,7 +24064,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25221,7 +24109,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25275,7 +24163,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25310,18 +24198,6 @@ "description": "Delete a Fleet Server host by ID.", "operationId": "delete-fleet-fleet-server-hosts-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -25344,7 +24220,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25362,7 +24238,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25395,18 +24271,6 @@ "description": "Get a Fleet Server host by ID.", "operationId": "get-fleet-fleet-server-hosts-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "itemId", @@ -25419,7 +24283,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25473,7 +24337,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25506,18 +24370,6 @@ "description": "Update a Fleet Server host by ID.", "operationId": "put-fleet-fleet-server-hosts-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -25539,7 +24391,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25575,7 +24427,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25629,7 +24481,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25663,18 +24515,6 @@ "post": { "operationId": "post-fleet-health-check", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -25688,7 +24528,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25707,7 +24547,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25731,7 +24571,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25756,7 +24596,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25790,18 +24630,6 @@ "get": { "operationId": "get-fleet-kubernetes", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "download", @@ -25830,7 +24658,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -25848,7 +24676,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25882,18 +24710,6 @@ "get": { "operationId": "get-fleet-kubernetes-download", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "download", @@ -25922,7 +24738,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "type": "string" } @@ -25931,7 +24747,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25956,7 +24772,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -25990,18 +24806,6 @@ "post": { "operationId": "post-fleet-logstash-api-keys", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -26016,7 +24820,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -26034,7 +24838,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -26068,18 +24872,6 @@ "post": { "operationId": "post-fleet-message-signing-service-rotate-key-pair", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -26103,7 +24895,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -26121,7 +24913,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -26146,7 +24938,7 @@ }, "500": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -26179,24 +24971,11 @@ "/api/fleet/outputs": { "get": { "operationId": "get-fleet-outputs", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -27244,7 +26023,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -27276,18 +26055,6 @@ "post": { "operationId": "post-fleet-outputs", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -27301,7 +26068,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -28326,7 +27093,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -29359,7 +28126,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -29394,18 +28161,6 @@ "description": "Delete output by ID.", "operationId": "delete-fleet-outputs-outputid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -29428,7 +28183,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -29446,7 +28201,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -29471,7 +28226,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -29504,18 +28259,6 @@ "description": "Get output by ID.", "operationId": "get-fleet-outputs-outputid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "outputId", @@ -29528,7 +28271,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -30561,7 +29304,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -30594,18 +29337,6 @@ "description": "Update output by ID.", "operationId": "put-fleet-outputs-outputid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -30627,7 +29358,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -31628,7 +30359,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -32661,7 +31392,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -32695,18 +31426,6 @@ "get": { "operationId": "get-fleet-outputs-outputid-health", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "outputId", @@ -32719,7 +31438,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -32748,7 +31467,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -32782,18 +31501,6 @@ "get": { "operationId": "get-fleet-package-policies", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "query", "name": "page", @@ -32870,7 +31577,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -33470,7 +32177,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -33502,18 +32209,6 @@ "post": { "operationId": "post-fleet-package-policies", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -33539,7 +32234,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -34149,7 +32844,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -34734,7 +33429,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -34759,7 +33454,7 @@ }, "409": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -34793,18 +33488,6 @@ "post": { "operationId": "post-fleet-package-policies-bulk-get", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -34830,7 +33513,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -34856,7 +33539,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -35444,7 +34127,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -35469,7 +34152,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -35496,18 +34179,6 @@ "post": { "operationId": "post-fleet-package-policies-delete", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -35521,7 +34192,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -35546,7 +34217,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "items": { "additionalProperties": false, @@ -35665,7 +34336,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -35700,18 +34371,6 @@ "description": "Upgrade a package policy to a newer package version.", "operationId": "post-fleet-package-policies-upgrade", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -35725,7 +34384,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -35747,7 +34406,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "items": { "additionalProperties": false, @@ -35790,7 +34449,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -35824,18 +34483,6 @@ "post": { "operationId": "post-fleet-package-policies-upgrade-dryrun", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -35849,7 +34496,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -35874,7 +34521,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "items": { "additionalProperties": false, @@ -36987,7 +35634,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -37022,18 +35669,6 @@ "description": "Delete a package policy by ID.", "operationId": "delete-fleet-package-policies-packagepolicyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -37064,7 +35699,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -37082,7 +35717,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -37115,18 +35750,6 @@ "description": "Get a package policy by ID.", "operationId": "get-fleet-package-policies-packagepolicyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "packagePolicyId", @@ -37151,7 +35774,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -37736,7 +36359,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -37761,7 +36384,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -37787,18 +36410,6 @@ "description": "Update a package policy by ID.", "operationId": "put-fleet-package-policies-packagepolicyid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -37832,7 +36443,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -38434,7 +37045,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39019,7 +37630,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39044,7 +37655,7 @@ }, "403": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39077,24 +37688,11 @@ "/api/fleet/proxies": { "get": { "operationId": "get-fleet-proxies", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39177,7 +37775,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39209,18 +37807,6 @@ "post": { "operationId": "post-fleet-proxies", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -39234,7 +37820,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39293,7 +37879,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39361,7 +37947,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39396,18 +37982,6 @@ "description": "Delete a proxy by ID", "operationId": "delete-fleet-proxies-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -39430,7 +38004,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39448,7 +38022,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39481,18 +38055,6 @@ "description": "Get a proxy by ID.", "operationId": "get-fleet-proxies-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "itemId", @@ -39505,7 +38067,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39573,7 +38135,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39606,18 +38168,6 @@ "description": "Update a proxy by ID.", "operationId": "put-fleet-proxies-itemid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -39639,7 +38189,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39693,7 +38243,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39761,7 +38311,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39795,18 +38345,6 @@ "post": { "operationId": "post-fleet-service-tokens", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -39820,7 +38358,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "nullable": true, @@ -39838,7 +38376,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39860,7 +38398,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -39893,24 +38431,11 @@ "/api/fleet/settings": { "get": { "operationId": "get-fleet-settings", - "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - } - ], + "parameters": [], "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -39989,7 +38514,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -40014,7 +38539,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40039,18 +38564,6 @@ "put": { "operationId": "put-fleet-settings", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -40064,7 +38577,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40112,7 +38625,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40191,7 +38704,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -40216,7 +38729,7 @@ }, "404": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40243,18 +38756,6 @@ "post": { "operationId": "post-fleet-setup", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -40269,7 +38770,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "A summary of the result of Fleet's `setup` lifecycle. If `isInitialized` is true, Fleet is ready to accept agent enrollment. `nonFatalErrors` may include useful insight into non-blocking issues with Fleet setup.", @@ -40308,7 +38809,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -40333,7 +38834,7 @@ }, "500": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Internal Server Error", @@ -40362,18 +38863,6 @@ "description": "List the metadata for the latest uninstall tokens per agent policy.", "operationId": "get-fleet-uninstall-tokens", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "Partial match filtering for policy IDs", "in": "query", @@ -40416,7 +38905,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40476,7 +38965,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -40511,18 +39000,6 @@ "description": "Get one decrypted uninstall token by its ID.", "operationId": "get-fleet-uninstall-tokens-uninstalltokenid", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "in": "path", "name": "uninstallTokenId", @@ -40535,7 +39012,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -40584,7 +39061,7 @@ }, "400": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "description": "Generic Error", @@ -40618,18 +39095,6 @@ "get": { "operationId": "get-security-role", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "If `true` and the response contains any privileges that are associated with deprecated features, they are omitted in favor of details about the appropriate replacement feature privileges.", "in": "query", @@ -40655,18 +39120,6 @@ "delete": { "operationId": "delete-security-role-name", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -40700,18 +39153,6 @@ "get": { "operationId": "get-security-role-name", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "The role name.", "in": "path", @@ -40746,18 +39187,6 @@ "description": "Create a new Kibana role or update the attributes of an existing role. Kibana roles are stored in the Elasticsearch native realm.", "operationId": "put-security-role-name", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -40792,7 +39221,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -41065,18 +39494,6 @@ "post": { "operationId": "post-security-roles", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -41090,7 +39507,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -41375,18 +39792,6 @@ "get": { "operationId": "get-spaces-space", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "Specifies which authorization checks are applied to the API call. The default value is `any`.", "in": "query", @@ -41455,18 +39860,6 @@ "post": { "operationId": "post-spaces-space", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -41480,7 +39873,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -41547,18 +39940,6 @@ "description": "When you delete a space, all saved objects that belong to the space are automatically deleted, which is permanent and cannot be undone.", "operationId": "delete-spaces-space-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -41595,18 +39976,6 @@ "get": { "operationId": "get-spaces-space-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "The space identifier.", "in": "path", @@ -41630,18 +39999,6 @@ "put": { "operationId": "put-spaces-space-id", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "A required header to protect against CSRF attacks", "in": "header", @@ -41664,7 +40021,7 @@ ], "requestBody": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "additionalProperties": false, "properties": { @@ -41730,18 +40087,6 @@ "get": { "operationId": "get-status", "parameters": [ - { - "description": "The version of the API to use", - "in": "header", - "name": "elastic-api-version", - "schema": { - "default": "2023-10-31", - "enum": [ - "2023-10-31" - ], - "type": "string" - } - }, { "description": "Set to \"true\" to get the response in v7 format.", "in": "query", @@ -41764,7 +40109,7 @@ "responses": { "200": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { @@ -41782,7 +40127,7 @@ }, "503": { "content": { - "application/json; Elastic-Api-Version=2023-10-31": { + "application/json": { "schema": { "anyOf": [ { diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 72fc1b093903a..bf3c74d906cef 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -154,14 +154,6 @@ paths: description: You do not need any Kibana feature privileges to run this API. operationId: get-actions-connector-types parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A filter to limit the retrieved connector types to those that support a specific feature (such as alerting or cases). in: query name: feature_id @@ -185,14 +177,6 @@ paths: description: 'WARNING: When you delete a connector, it cannot be recovered.' operationId: delete-actions-connector-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -216,14 +200,6 @@ paths: get: operationId: get-actions-connector-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: An identifier for the connector. in: path name: id @@ -280,14 +256,6 @@ paths: post: operationId: post-actions-connector-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -435,14 +403,6 @@ paths: put: operationId: put-actions-connector-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -573,14 +533,6 @@ paths: description: You can use this API to test an action that involves interaction with Kibana services or integrations with third-party systems. operationId: post-actions-connector-id-execute parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -697,15 +649,7 @@ paths: /api/actions/connectors: get: operationId: get-actions-connectors - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': description: Indicates a successful call. @@ -722,14 +666,6 @@ paths: delete: operationId: delete-alerting-rule-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -759,14 +695,6 @@ paths: get: operationId: get-alerting-rule-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: The identifier for the rule. in: path name: id @@ -1420,14 +1348,6 @@ paths: post: operationId: post-alerting-rule-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -2344,14 +2264,6 @@ paths: put: operationId: put-alerting-rule-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3227,14 +3139,6 @@ paths: post: operationId: post-alerting-rule-id-disable parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3277,14 +3181,6 @@ paths: post: operationId: post-alerting-rule-id-enable parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3315,14 +3211,6 @@ paths: post: operationId: post-alerting-rule-id-mute-all parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3353,14 +3241,6 @@ paths: post: operationId: post-alerting-rule-id-unmute-all parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3391,14 +3271,6 @@ paths: post: operationId: post-alerting-rule-id-update-api-key parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3431,14 +3303,6 @@ paths: post: operationId: post-alerting-rule-rule-id-alert-alert-id-mute parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3475,14 +3339,6 @@ paths: post: operationId: post-alerting-rule-rule-id-alert-alert-id-unmute parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3519,14 +3375,6 @@ paths: get: operationId: get-alerting-rules-find parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: The number of rules to return per page. in: query name: per_page @@ -5201,14 +5049,6 @@ paths: description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. operationId: get-dashboards-dashboard parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: The page number to return. Default is "1". in: query name: page @@ -5332,14 +5172,6 @@ paths: description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. operationId: delete-dashboards-dashboard-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -5363,14 +5195,6 @@ paths: description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. operationId: get-dashboards-dashboard-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A unique identifier for the dashboard. in: path name: id @@ -5835,14 +5659,6 @@ paths: description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. operationId: post-dashboards-dashboard-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -6677,14 +6493,6 @@ paths: description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. operationId: put-dashboards-dashboard-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -11330,15 +11138,7 @@ paths: /api/fleet/agent_download_sources: get: operationId: get-fleet-agent-download-sources - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -11405,14 +11205,6 @@ paths: post: operationId: post-fleet-agent-download-sources parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -11501,14 +11293,6 @@ paths: description: Delete an agent binary download source by ID. operationId: delete-fleet-agent-download-sources-sourceid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -11557,14 +11341,6 @@ paths: description: Get an agent binary download source by ID. operationId: get-fleet-agent-download-sources-sourceid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: sourceId required: true @@ -11626,14 +11402,6 @@ paths: description: Update an agent binary download source by ID. operationId: put-fleet-agent-download-sources-sourceid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -11726,14 +11494,6 @@ paths: get: operationId: get-fleet-agent-policies parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: page required: false @@ -12313,14 +12073,6 @@ paths: post: operationId: post-fleet-agent-policies parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -13014,14 +12766,6 @@ paths: post: operationId: post-fleet-agent-policies-bulk-get parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -13568,14 +13312,6 @@ paths: description: Get an agent policy by ID. operationId: get-fleet-agent-policies-agentpolicyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentPolicyId required: true @@ -14098,14 +13834,6 @@ paths: description: Update an agent policy by ID. operationId: put-fleet-agent-policies-agentpolicyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -14808,14 +14536,6 @@ paths: description: Copy an agent policy by ID. operationId: post-fleet-agent-policies-agentpolicyid-copy parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -15360,14 +15080,6 @@ paths: description: Download an agent policy by ID. operationId: get-fleet-agent-policies-agentpolicyid-download parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentPolicyId required: true @@ -15435,14 +15147,6 @@ paths: description: Get a full agent policy by ID. operationId: get-fleet-agent-policies-agentpolicyid-full parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentPolicyId required: true @@ -15792,14 +15496,6 @@ paths: description: Get a list of outputs associated with agent policy by policy id. operationId: get-fleet-agent-policies-agentpolicyid-outputs parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentPolicyId required: true @@ -15897,14 +15593,6 @@ paths: description: Delete an agent policy by ID. operationId: post-fleet-agent-policies-delete parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -15966,14 +15654,6 @@ paths: description: Get a list of outputs associated with agent policies. operationId: post-fleet-agent-policies-outputs parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -16088,14 +15768,6 @@ paths: get: operationId: get-fleet-agent-status parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: policyId required: false @@ -16184,14 +15856,6 @@ paths: get: operationId: get-fleet-agent-status-data parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: agentsIds required: true @@ -16267,14 +15931,6 @@ paths: get: operationId: get-fleet-agents parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: page required: false @@ -16654,14 +16310,6 @@ paths: post: operationId: post-fleet-agents parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -16721,14 +16369,6 @@ paths: description: Delete an agent by ID. operationId: delete-fleet-agents-agentid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -16779,14 +16419,6 @@ paths: description: Get an agent by ID. operationId: get-fleet-agents-agentid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentId required: true @@ -17109,14 +16741,6 @@ paths: description: Update an agent by ID. operationId: put-fleet-agents-agentid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -17454,14 +17078,6 @@ paths: post: operationId: post-fleet-agents-agentid-actions parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -17599,14 +17215,6 @@ paths: post: operationId: post-fleet-agents-agentid-reassign parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -17662,84 +17270,68 @@ paths: post: operationId: post-fleet-agents-agentid-request-diagnostics parameters: - - description: The version of the API to use + - description: A required header to protect against CSRF attacks in: header - name: elastic-api-version + name: kbn-xsrf + required: true + schema: + example: 'true' + type: string + - in: path + name: agentId + required: true schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - - description: A required header to protect against CSRF attacks - in: header - name: kbn-xsrf - required: true - schema: - example: 'true' - type: string - - in: path - name: agentId - required: true - schema: - type: string - requestBody: - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - additionalProperties: false - nullable: true - type: object - properties: - additional_metrics: - items: - enum: - - CPU - type: string - type: array - responses: - '200': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - additionalProperties: false - type: object - properties: - actionId: - type: string - required: - - actionId - '400': - content: - application/json; Elastic-Api-Version=2023-10-31: - schema: - additionalProperties: false - description: Generic Error - type: object - properties: - error: - type: string - message: - type: string - statusCode: - type: number - required: - - message - summary: Request agent diagnostics - tags: - - Elastic Agent actions - x-beta: true - /api/fleet/agents/{agentId}/unenroll: - post: - operationId: post-fleet-agents-agentid-unenroll - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' type: string + requestBody: + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + nullable: true + type: object + properties: + additional_metrics: + items: + enum: + - CPU + type: string + type: array + responses: + '200': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + type: object + properties: + actionId: + type: string + required: + - actionId + '400': + content: + application/json; Elastic-Api-Version=2023-10-31: + schema: + additionalProperties: false + description: Generic Error + type: object + properties: + error: + type: string + message: + type: string + statusCode: + type: number + required: + - message + summary: Request agent diagnostics + tags: + - Elastic Agent actions + x-beta: true + /api/fleet/agents/{agentId}/unenroll: + post: + operationId: post-fleet-agents-agentid-unenroll + parameters: - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -17773,14 +17365,6 @@ paths: post: operationId: post-fleet-agents-agentid-upgrade parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -17842,14 +17426,6 @@ paths: get: operationId: get-fleet-agents-agentid-uploads parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentId required: true @@ -17923,14 +17499,6 @@ paths: get: operationId: get-fleet-agents-action-status parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: page required: false @@ -18089,14 +17657,6 @@ paths: post: operationId: post-fleet-agents-actions-actionid-cancel parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -18183,15 +17743,7 @@ paths: /api/fleet/agents/available_versions: get: operationId: get-fleet-agents-available-versions - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -18230,14 +17782,6 @@ paths: post: operationId: post-fleet-agents-bulk-reassign parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -18304,14 +17848,6 @@ paths: post: operationId: post-fleet-agents-bulk-request-diagnostics parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -18378,14 +17914,6 @@ paths: post: operationId: post-fleet-agents-bulk-unenroll parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -18457,14 +17985,6 @@ paths: post: operationId: post-fleet-agents-bulk-update-agent-tags parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -18536,14 +18056,6 @@ paths: post: operationId: post-fleet-agents-bulk-upgrade parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -18622,14 +18134,6 @@ paths: description: Delete a file uploaded by an agent. operationId: delete-fleet-agents-files-fileid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -18682,14 +18186,6 @@ paths: description: Get a file uploaded by an agent. operationId: get-fleet-agents-files-fileid-filename parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: fileId required: true @@ -18729,15 +18225,7 @@ paths: /api/fleet/agents/setup: get: operationId: get-fleet-agents-setup - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -18798,14 +18286,6 @@ paths: post: operationId: post-fleet-agents-setup parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -18864,14 +18344,6 @@ paths: get: operationId: get-fleet-agents-tags parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: kuery required: false @@ -18921,14 +18393,6 @@ paths: get: operationId: get-fleet-check-permissions parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: fleetServerSetup required: false @@ -18975,15 +18439,7 @@ paths: /api/fleet/data_streams: get: operationId: get-fleet-data-streams - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -19081,14 +18537,6 @@ paths: get: operationId: get-fleet-enrollment-api-keys parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: page required: false @@ -19212,14 +18660,6 @@ paths: post: operationId: post-fleet-enrollment-api-keys parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -19311,14 +18751,6 @@ paths: description: Revoke an enrollment API key by ID by marking it as inactive. operationId: delete-fleet-enrollment-api-keys-keyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -19369,14 +18801,6 @@ paths: description: Get an enrollment API key by ID. operationId: get-fleet-enrollment-api-keys-keyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: keyId required: true @@ -19445,14 +18869,6 @@ paths: post: operationId: post-fleet-epm-bulk-assets parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -19544,14 +18960,6 @@ paths: get: operationId: get-fleet-epm-categories parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: prerelease required: false @@ -19616,14 +19024,6 @@ paths: post: operationId: post-fleet-epm-custom-integrations parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -19759,14 +19159,6 @@ paths: get: operationId: get-fleet-epm-data-streams parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: type required: false @@ -19842,14 +19234,6 @@ paths: get: operationId: get-fleet-epm-packages parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: category required: false @@ -20242,14 +19626,6 @@ paths: post: operationId: post-fleet-epm-packages parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -20370,14 +19746,6 @@ paths: post: operationId: post-fleet-epm-packages-bulk parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -20553,14 +19921,6 @@ paths: delete: operationId: delete-fleet-epm-packages-pkgname-pkgversion parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -20668,14 +20028,6 @@ paths: get: operationId: get-fleet-epm-packages-pkgname-pkgversion parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: pkgName required: true @@ -21148,14 +20500,6 @@ paths: post: operationId: post-fleet-epm-packages-pkgname-pkgversion parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -21298,14 +20642,6 @@ paths: put: operationId: put-fleet-epm-packages-pkgname-pkgversion parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -21768,14 +21104,6 @@ paths: get: operationId: get-fleet-epm-packages-pkgname-pkgversion-filepath parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: pkgName required: true @@ -21820,14 +21148,6 @@ paths: post: operationId: post-fleet-epm-packages-pkgname-pkgversion-transforms-authorize parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -21913,14 +21233,6 @@ paths: get: operationId: get-fleet-epm-packages-pkgname-stats parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: pkgName required: true @@ -21968,14 +21280,6 @@ paths: get: operationId: get-fleet-epm-packages-installed parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: dataStreamType required: false @@ -22121,15 +21425,7 @@ paths: /api/fleet/epm/packages/limited: get: operationId: get-fleet-epm-packages-limited - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -22168,14 +21464,6 @@ paths: get: operationId: get-fleet-epm-templates-pkgname-pkgversion-inputs parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: pkgName required: true @@ -22275,15 +21563,7 @@ paths: /api/fleet/epm/verification_key_id: get: operationId: get-fleet-epm-verification-key-id - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -22320,15 +21600,7 @@ paths: /api/fleet/fleet_server_hosts: get: operationId: get-fleet-fleet-server-hosts - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -22401,14 +21673,6 @@ paths: post: operationId: post-fleet-fleet-server-hosts parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -22509,14 +21773,6 @@ paths: description: Delete a Fleet Server host by ID. operationId: delete-fleet-fleet-server-hosts-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -22565,14 +21821,6 @@ paths: description: Get a Fleet Server host by ID. operationId: get-fleet-fleet-server-hosts-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: itemId required: true @@ -22640,14 +21888,6 @@ paths: description: Update a Fleet Server host by ID. operationId: put-fleet-fleet-server-hosts-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -22745,14 +21985,6 @@ paths: post: operationId: post-fleet-health-check parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -22827,14 +22059,6 @@ paths: get: operationId: get-fleet-kubernetes parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: download required: false @@ -22886,14 +22110,6 @@ paths: get: operationId: get-fleet-kubernetes-download parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: download required: false @@ -22955,14 +22171,6 @@ paths: post: operationId: post-fleet-logstash-api-keys parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -23006,14 +22214,6 @@ paths: post: operationId: post-fleet-message-signing-service-rotate-key-pair parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -23078,15 +22278,7 @@ paths: /api/fleet/outputs: get: operationId: get-fleet-outputs - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -23812,14 +23004,6 @@ paths: post: operationId: post-fleet-outputs parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -25227,14 +24411,6 @@ paths: description: Delete output by ID. operationId: delete-fleet-outputs-outputid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -25299,14 +24475,6 @@ paths: description: Get output by ID. operationId: get-fleet-outputs-outputid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: outputId required: true @@ -26027,14 +25195,6 @@ paths: description: Update output by ID. operationId: put-fleet-outputs-outputid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -27425,14 +26585,6 @@ paths: get: operationId: get-fleet-outputs-outputid-health parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: outputId required: true @@ -27483,14 +26635,6 @@ paths: get: operationId: get-fleet-package-policies parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: page required: false @@ -27956,14 +27100,6 @@ paths: post: operationId: post-fleet-package-policies parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -28807,14 +27943,6 @@ paths: post: operationId: post-fleet-package-policies-bulk-get parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -29269,14 +28397,6 @@ paths: description: Delete a package policy by ID. operationId: delete-fleet-package-policies-packagepolicyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -29330,14 +28450,6 @@ paths: description: Get a package policy by ID. operationId: get-fleet-package-policies-packagepolicyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: packagePolicyId required: true @@ -29771,14 +28883,6 @@ paths: description: Update a package policy by ID. operationId: put-fleet-package-policies-packagepolicyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -30620,14 +29724,6 @@ paths: post: operationId: post-fleet-package-policies-delete parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -30758,14 +29854,6 @@ paths: description: Upgrade a package policy to a newer package version. operationId: post-fleet-package-policies-upgrade parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -30839,14 +29927,6 @@ paths: post: operationId: post-fleet-package-policies-upgrade-dryrun parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -31639,15 +30719,7 @@ paths: /api/fleet/proxies: get: operationId: get-fleet-proxies - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -31726,14 +30798,6 @@ paths: post: operationId: post-fleet-proxies parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -31846,14 +30910,6 @@ paths: description: Delete a proxy by ID operationId: delete-fleet-proxies-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -31902,14 +30958,6 @@ paths: description: Get a proxy by ID. operationId: get-fleet-proxies-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: itemId required: true @@ -31983,14 +31031,6 @@ paths: description: Update a proxy by ID. operationId: put-fleet-proxies-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -32104,14 +31144,6 @@ paths: post: operationId: post-fleet-service-tokens parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -32168,15 +31200,7 @@ paths: /api/fleet/settings: get: operationId: get-fleet-settings - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -32265,14 +31289,6 @@ paths: put: operationId: put-fleet-settings parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -32400,14 +31416,6 @@ paths: post: operationId: post-fleet-setup parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -32479,14 +31487,6 @@ paths: description: List the metadata for the latest uninstall tokens per agent policy. operationId: get-fleet-uninstall-tokens parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: Partial match filtering for policy IDs in: query name: policyId @@ -32580,14 +31580,6 @@ paths: description: Get one decrypted uninstall token by its ID. operationId: get-fleet-uninstall-tokens-uninstalltokenid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: uninstallTokenId required: true @@ -35225,14 +34217,6 @@ paths: get: operationId: get-security-role parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: If `true` and the response contains any privileges that are associated with deprecated features, they are omitted in favor of details about the appropriate replacement feature privileges. in: query name: replaceDeprecatedPrivileges @@ -35250,14 +34234,6 @@ paths: delete: operationId: delete-security-role-name parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -35281,14 +34257,6 @@ paths: get: operationId: get-security-role-name parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: The role name. in: path name: name @@ -35313,14 +34281,6 @@ paths: description: Create a new Kibana role or update the attributes of an existing role. Kibana roles are stored in the Elasticsearch native realm. operationId: put-security-role-name parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -35528,14 +34488,6 @@ paths: post: operationId: post-security-roles parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -35736,14 +34688,6 @@ paths: get: operationId: get-spaces-space parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: Specifies which authorization checks are applied to the API call. The default value is `any`. in: query name: purpose @@ -35791,14 +34735,6 @@ paths: post: operationId: post-spaces-space parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -35859,14 +34795,6 @@ paths: description: When you delete a space, all saved objects that belong to the space are automatically deleted, which is permanent and cannot be undone. operationId: delete-spaces-space-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -35892,14 +34820,6 @@ paths: get: operationId: get-spaces-space-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: The space identifier. in: path name: id @@ -35921,14 +34841,6 @@ paths: put: operationId: put-spaces-space-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -35994,14 +34906,6 @@ paths: get: operationId: get-status parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: Set to "true" to get the response in v7 format. in: query name: v7format diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 3c56597469133..aea9bacebd061 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -173,14 +173,6 @@ paths: description: You do not need any Kibana feature privileges to run this API. operationId: get-actions-connector-types parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A filter to limit the retrieved connector types to those that support a specific feature (such as alerting or cases). in: query name: feature_id @@ -203,14 +195,6 @@ paths: description: 'WARNING: When you delete a connector, it cannot be recovered.' operationId: delete-actions-connector-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -233,14 +217,6 @@ paths: get: operationId: get-actions-connector-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: An identifier for the connector. in: path name: id @@ -296,14 +272,6 @@ paths: post: operationId: post-actions-connector-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -450,14 +418,6 @@ paths: put: operationId: put-actions-connector-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -587,14 +547,6 @@ paths: description: You can use this API to test an action that involves interaction with Kibana services or integrations with third-party systems. operationId: post-actions-connector-id-execute parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -710,15 +662,7 @@ paths: /api/actions/connectors: get: operationId: get-actions-connectors - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': description: Indicates a successful call. @@ -1076,14 +1020,6 @@ paths: delete: operationId: delete-alerting-rule-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -1112,14 +1048,6 @@ paths: get: operationId: get-alerting-rule-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: The identifier for the rule. in: path name: id @@ -1772,14 +1700,6 @@ paths: post: operationId: post-alerting-rule-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -2695,14 +2615,6 @@ paths: put: operationId: put-alerting-rule-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3577,14 +3489,6 @@ paths: post: operationId: post-alerting-rule-id-disable parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3626,14 +3530,6 @@ paths: post: operationId: post-alerting-rule-id-enable parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3663,14 +3559,6 @@ paths: post: operationId: post-alerting-rule-id-mute-all parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3700,14 +3588,6 @@ paths: post: operationId: post-alerting-rule-id-unmute-all parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3737,14 +3617,6 @@ paths: post: operationId: post-alerting-rule-id-update-api-key parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3776,14 +3648,6 @@ paths: post: operationId: post-alerting-rule-rule-id-alert-alert-id-mute parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3819,14 +3683,6 @@ paths: post: operationId: post-alerting-rule-rule-id-alert-alert-id-unmute parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -3862,14 +3718,6 @@ paths: get: operationId: get-alerting-rules-find parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: The number of rules to return per page. in: query name: per_page @@ -7471,14 +7319,6 @@ paths: description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. operationId: get-dashboards-dashboard parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: The page number to return. Default is "1". in: query name: page @@ -7601,14 +7441,6 @@ paths: description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. operationId: delete-dashboards-dashboard-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -7631,14 +7463,6 @@ paths: description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. operationId: get-dashboards-dashboard-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A unique identifier for the dashboard. in: path name: id @@ -8102,14 +7926,6 @@ paths: description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. operationId: post-dashboards-dashboard-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -8943,14 +8759,6 @@ paths: description: This functionality is in technical preview and may be changed or removed in a future release. Elastic will work to fix any issues, but features in technical preview are not subject to the support SLA of official GA features. operationId: put-dashboards-dashboard-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -14191,15 +13999,7 @@ paths: /api/fleet/agent_download_sources: get: operationId: get-fleet-agent-download-sources - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -14265,14 +14065,6 @@ paths: post: operationId: post-fleet-agent-download-sources parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -14360,14 +14152,6 @@ paths: description: Delete an agent binary download source by ID. operationId: delete-fleet-agent-download-sources-sourceid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -14415,14 +14199,6 @@ paths: description: Get an agent binary download source by ID. operationId: get-fleet-agent-download-sources-sourceid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: sourceId required: true @@ -14483,14 +14259,6 @@ paths: description: Update an agent binary download source by ID. operationId: put-fleet-agent-download-sources-sourceid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -14582,14 +14350,6 @@ paths: get: operationId: get-fleet-agent-policies parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: page required: false @@ -15168,14 +14928,6 @@ paths: post: operationId: post-fleet-agent-policies parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -15868,14 +15620,6 @@ paths: post: operationId: post-fleet-agent-policies-bulk-get parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -16421,14 +16165,6 @@ paths: description: Get an agent policy by ID. operationId: get-fleet-agent-policies-agentpolicyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentPolicyId required: true @@ -16950,14 +16686,6 @@ paths: description: Update an agent policy by ID. operationId: put-fleet-agent-policies-agentpolicyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -17659,14 +17387,6 @@ paths: description: Copy an agent policy by ID. operationId: post-fleet-agent-policies-agentpolicyid-copy parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -18210,14 +17930,6 @@ paths: description: Download an agent policy by ID. operationId: get-fleet-agent-policies-agentpolicyid-download parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentPolicyId required: true @@ -18284,14 +17996,6 @@ paths: description: Get a full agent policy by ID. operationId: get-fleet-agent-policies-agentpolicyid-full parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentPolicyId required: true @@ -18640,14 +18344,6 @@ paths: description: Get a list of outputs associated with agent policy by policy id. operationId: get-fleet-agent-policies-agentpolicyid-outputs parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentPolicyId required: true @@ -18744,14 +18440,6 @@ paths: description: Delete an agent policy by ID. operationId: post-fleet-agent-policies-delete parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -18812,14 +18500,6 @@ paths: description: Get a list of outputs associated with agent policies. operationId: post-fleet-agent-policies-outputs parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -18933,14 +18613,6 @@ paths: get: operationId: get-fleet-agent-status parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: policyId required: false @@ -19028,14 +18700,6 @@ paths: get: operationId: get-fleet-agent-status-data parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: agentsIds required: true @@ -19110,14 +18774,6 @@ paths: get: operationId: get-fleet-agents parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: page required: false @@ -19496,14 +19152,6 @@ paths: post: operationId: post-fleet-agents parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -19562,14 +19210,6 @@ paths: description: Delete an agent by ID. operationId: delete-fleet-agents-agentid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -19619,14 +19259,6 @@ paths: description: Get an agent by ID. operationId: get-fleet-agents-agentid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentId required: true @@ -19948,14 +19580,6 @@ paths: description: Update an agent by ID. operationId: put-fleet-agents-agentid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -20292,14 +19916,6 @@ paths: post: operationId: post-fleet-agents-agentid-actions parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -20436,14 +20052,6 @@ paths: post: operationId: post-fleet-agents-agentid-reassign parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -20498,14 +20106,6 @@ paths: post: operationId: post-fleet-agents-agentid-request-diagnostics parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -20567,14 +20167,6 @@ paths: post: operationId: post-fleet-agents-agentid-unenroll parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -20607,14 +20199,6 @@ paths: post: operationId: post-fleet-agents-agentid-upgrade parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -20675,14 +20259,6 @@ paths: get: operationId: get-fleet-agents-agentid-uploads parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: agentId required: true @@ -20755,14 +20331,6 @@ paths: get: operationId: get-fleet-agents-action-status parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: page required: false @@ -20920,14 +20488,6 @@ paths: post: operationId: post-fleet-agents-actions-actionid-cancel parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -21013,15 +20573,7 @@ paths: /api/fleet/agents/available_versions: get: operationId: get-fleet-agents-available-versions - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -21059,14 +20611,6 @@ paths: post: operationId: post-fleet-agents-bulk-reassign parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -21132,14 +20676,6 @@ paths: post: operationId: post-fleet-agents-bulk-request-diagnostics parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -21205,14 +20741,6 @@ paths: post: operationId: post-fleet-agents-bulk-unenroll parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -21283,14 +20811,6 @@ paths: post: operationId: post-fleet-agents-bulk-update-agent-tags parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -21361,14 +20881,6 @@ paths: post: operationId: post-fleet-agents-bulk-upgrade parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -21446,14 +20958,6 @@ paths: description: Delete a file uploaded by an agent. operationId: delete-fleet-agents-files-fileid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -21505,14 +21009,6 @@ paths: description: Get a file uploaded by an agent. operationId: get-fleet-agents-files-fileid-filename parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: fileId required: true @@ -21551,15 +21047,7 @@ paths: /api/fleet/agents/setup: get: operationId: get-fleet-agents-setup - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -21619,14 +21107,6 @@ paths: post: operationId: post-fleet-agents-setup parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -21684,14 +21164,6 @@ paths: get: operationId: get-fleet-agents-tags parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: kuery required: false @@ -21740,14 +21212,6 @@ paths: get: operationId: get-fleet-check-permissions parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: fleetServerSetup required: false @@ -21793,15 +21257,7 @@ paths: /api/fleet/data_streams: get: operationId: get-fleet-data-streams - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -21898,14 +21354,6 @@ paths: get: operationId: get-fleet-enrollment-api-keys parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: page required: false @@ -22028,14 +21476,6 @@ paths: post: operationId: post-fleet-enrollment-api-keys parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -22126,14 +21566,6 @@ paths: description: Revoke an enrollment API key by ID by marking it as inactive. operationId: delete-fleet-enrollment-api-keys-keyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -22183,14 +21615,6 @@ paths: description: Get an enrollment API key by ID. operationId: get-fleet-enrollment-api-keys-keyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: keyId required: true @@ -22258,14 +21682,6 @@ paths: post: operationId: post-fleet-epm-bulk-assets parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -22356,14 +21772,6 @@ paths: get: operationId: get-fleet-epm-categories parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: prerelease required: false @@ -22427,14 +21835,6 @@ paths: post: operationId: post-fleet-epm-custom-integrations parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -22569,14 +21969,6 @@ paths: get: operationId: get-fleet-epm-data-streams parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: type required: false @@ -22651,14 +22043,6 @@ paths: get: operationId: get-fleet-epm-packages parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: category required: false @@ -23050,14 +22434,6 @@ paths: post: operationId: post-fleet-epm-packages parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -23177,14 +22553,6 @@ paths: post: operationId: post-fleet-epm-packages-bulk parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -23359,14 +22727,6 @@ paths: delete: operationId: delete-fleet-epm-packages-pkgname-pkgversion parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -23473,14 +22833,6 @@ paths: get: operationId: get-fleet-epm-packages-pkgname-pkgversion parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: pkgName required: true @@ -23952,14 +23304,6 @@ paths: post: operationId: post-fleet-epm-packages-pkgname-pkgversion parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -24101,14 +23445,6 @@ paths: put: operationId: put-fleet-epm-packages-pkgname-pkgversion parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -24570,14 +23906,6 @@ paths: get: operationId: get-fleet-epm-packages-pkgname-pkgversion-filepath parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: pkgName required: true @@ -24621,14 +23949,6 @@ paths: post: operationId: post-fleet-epm-packages-pkgname-pkgversion-transforms-authorize parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -24713,14 +24033,6 @@ paths: get: operationId: get-fleet-epm-packages-pkgname-stats parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: pkgName required: true @@ -24767,14 +24079,6 @@ paths: get: operationId: get-fleet-epm-packages-installed parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: dataStreamType required: false @@ -24919,15 +24223,7 @@ paths: /api/fleet/epm/packages/limited: get: operationId: get-fleet-epm-packages-limited - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -24965,14 +24261,6 @@ paths: get: operationId: get-fleet-epm-templates-pkgname-pkgversion-inputs parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: pkgName required: true @@ -25071,15 +24359,7 @@ paths: /api/fleet/epm/verification_key_id: get: operationId: get-fleet-epm-verification-key-id - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -25115,15 +24395,7 @@ paths: /api/fleet/fleet_server_hosts: get: operationId: get-fleet-fleet-server-hosts - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -25195,14 +24467,6 @@ paths: post: operationId: post-fleet-fleet-server-hosts parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -25302,14 +24566,6 @@ paths: description: Delete a Fleet Server host by ID. operationId: delete-fleet-fleet-server-hosts-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -25357,14 +24613,6 @@ paths: description: Get a Fleet Server host by ID. operationId: get-fleet-fleet-server-hosts-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: itemId required: true @@ -25431,14 +24679,6 @@ paths: description: Update a Fleet Server host by ID. operationId: put-fleet-fleet-server-hosts-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -25535,14 +24775,6 @@ paths: post: operationId: post-fleet-health-check parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -25616,14 +24848,6 @@ paths: get: operationId: get-fleet-kubernetes parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: download required: false @@ -25674,14 +24898,6 @@ paths: get: operationId: get-fleet-kubernetes-download parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: download required: false @@ -25742,14 +24958,6 @@ paths: post: operationId: post-fleet-logstash-api-keys parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -25792,14 +25000,6 @@ paths: post: operationId: post-fleet-message-signing-service-rotate-key-pair parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -25863,15 +25063,7 @@ paths: /api/fleet/outputs: get: operationId: get-fleet-outputs - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -26596,14 +25788,6 @@ paths: post: operationId: post-fleet-outputs parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -28010,14 +27194,6 @@ paths: description: Delete output by ID. operationId: delete-fleet-outputs-outputid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -28081,14 +27257,6 @@ paths: description: Get output by ID. operationId: get-fleet-outputs-outputid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: outputId required: true @@ -28808,14 +27976,6 @@ paths: description: Update output by ID. operationId: put-fleet-outputs-outputid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -30205,14 +29365,6 @@ paths: get: operationId: get-fleet-outputs-outputid-health parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: outputId required: true @@ -30262,14 +29414,6 @@ paths: get: operationId: get-fleet-package-policies parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: query name: page required: false @@ -30734,14 +29878,6 @@ paths: post: operationId: post-fleet-package-policies parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -31584,14 +30720,6 @@ paths: post: operationId: post-fleet-package-policies-bulk-get parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -32045,14 +31173,6 @@ paths: description: Delete a package policy by ID. operationId: delete-fleet-package-policies-packagepolicyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -32105,14 +31225,6 @@ paths: description: Get a package policy by ID. operationId: get-fleet-package-policies-packagepolicyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: packagePolicyId required: true @@ -32545,14 +31657,6 @@ paths: description: Update a package policy by ID. operationId: put-fleet-package-policies-packagepolicyid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -33393,14 +32497,6 @@ paths: post: operationId: post-fleet-package-policies-delete parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -33530,14 +32626,6 @@ paths: description: Upgrade a package policy to a newer package version. operationId: post-fleet-package-policies-upgrade parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -33610,14 +32698,6 @@ paths: post: operationId: post-fleet-package-policies-upgrade-dryrun parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -34409,15 +33489,7 @@ paths: /api/fleet/proxies: get: operationId: get-fleet-proxies - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -34495,14 +33567,6 @@ paths: post: operationId: post-fleet-proxies parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -34614,14 +33678,6 @@ paths: description: Delete a proxy by ID operationId: delete-fleet-proxies-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -34669,14 +33725,6 @@ paths: description: Get a proxy by ID. operationId: get-fleet-proxies-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: itemId required: true @@ -34749,14 +33797,6 @@ paths: description: Update a proxy by ID. operationId: put-fleet-proxies-itemid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -34869,14 +33909,6 @@ paths: post: operationId: post-fleet-service-tokens parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -34932,15 +33964,7 @@ paths: /api/fleet/settings: get: operationId: get-fleet-settings - parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string + parameters: [] responses: '200': content: @@ -35028,14 +34052,6 @@ paths: put: operationId: put-fleet-settings parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -35162,14 +34178,6 @@ paths: post: operationId: post-fleet-setup parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -35240,14 +34248,6 @@ paths: description: List the metadata for the latest uninstall tokens per agent policy. operationId: get-fleet-uninstall-tokens parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: Partial match filtering for policy IDs in: query name: policyId @@ -35340,14 +34340,6 @@ paths: description: Get one decrypted uninstall token by its ID. operationId: get-fleet-uninstall-tokens-uninstalltokenid parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - in: path name: uninstallTokenId required: true @@ -38498,14 +37490,6 @@ paths: get: operationId: get-security-role parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: If `true` and the response contains any privileges that are associated with deprecated features, they are omitted in favor of details about the appropriate replacement feature privileges. in: query name: replaceDeprecatedPrivileges @@ -38527,14 +37511,6 @@ paths: delete: operationId: delete-security-role-name parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -38557,14 +37533,6 @@ paths: get: operationId: get-security-role-name parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: The role name. in: path name: name @@ -38593,14 +37561,6 @@ paths: description: Create a new Kibana role or update the attributes of an existing role. Kibana roles are stored in the Elasticsearch native realm. operationId: put-security-role-name parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -38816,14 +37776,6 @@ paths: post: operationId: post-security-roles parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -39024,14 +37976,6 @@ paths: description: 'It also allows you to automatically copy related objects, so when you copy a dashboard, this can automatically copy over the associated visualizations, data views, and saved searches, as required. You can request to overwrite any objects that already exist in the target space if they share an identifier or you can use the resolve copy saved objects conflicts API to do this on a per-object basis.

    [Required authorization] Route required privileges: ALL of [copySavedObjectsToSpaces].' operationId: post-spaces-copy-saved-objects parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -39110,14 +38054,6 @@ paths: post: operationId: post-spaces-disable-legacy-url-aliases parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -39165,14 +38101,6 @@ paths: description: Collect references and space contexts for saved objects. operationId: post-spaces-get-shareable-references parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -39211,14 +38139,6 @@ paths: description: 'Overwrite saved objects that are returned as errors from the copy saved objects to space API.

    [Required authorization] Route required privileges: ALL of [copySavedObjectsToSpaces].' operationId: post-spaces-resolve-copy-saved-objects-errors parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -39309,14 +38229,6 @@ paths: description: Update one or more saved objects to add or remove them from some spaces. operationId: post-spaces-update-objects-spaces parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -39377,14 +38289,6 @@ paths: get: operationId: get-spaces-space parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: Specifies which authorization checks are applied to the API call. The default value is `any`. in: query name: purpose @@ -39431,14 +38335,6 @@ paths: post: operationId: post-spaces-space parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -39505,14 +38401,6 @@ paths: description: When you delete a space, all saved objects that belong to the space are automatically deleted, which is permanent and cannot be undone. operationId: delete-spaces-space-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -39537,14 +38425,6 @@ paths: get: operationId: get-spaces-space-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: The space identifier. in: path name: id @@ -39565,14 +38445,6 @@ paths: put: operationId: put-spaces-space-id parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: A required header to protect against CSRF attacks in: header name: kbn-xsrf @@ -39644,14 +38516,6 @@ paths: get: operationId: get-status parameters: - - description: The version of the API to use - in: header - name: elastic-api-version - schema: - default: '2023-10-31' - enum: - - '2023-10-31' - type: string - description: Set to "true" to get the response in v7 format. in: query name: v7format diff --git a/packages/core/http/core-http-router-server-internal/index.ts b/packages/core/http/core-http-router-server-internal/index.ts index 6aa6ac117f533..0e048c59144df 100644 --- a/packages/core/http/core-http-router-server-internal/index.ts +++ b/packages/core/http/core-http-router-server-internal/index.ts @@ -11,7 +11,7 @@ export { filterHeaders } from './src/headers'; export { versionHandlerResolvers, CoreVersionedRouter, - ALLOWED_PUBLIC_VERSION, + BASE_PUBLIC_VERSION, unwrapVersionedResponseBodyValidation, type HandlerResolutionStrategy, } from './src/versioned_router'; diff --git a/packages/core/http/core-http-router-server-internal/src/router.ts b/packages/core/http/core-http-router-server-internal/src/router.ts index c3e44f8bc9d7b..d1640a4db6db1 100644 --- a/packages/core/http/core-http-router-server-internal/src/router.ts +++ b/packages/core/http/core-http-router-server-internal/src/router.ts @@ -35,7 +35,7 @@ import { validBodyOutput, getRequestValidation } from '@kbn/core-http-server'; import type { RouteSecurityGetter } from '@kbn/core-http-server'; import type { DeepPartial } from '@kbn/utility-types'; import { RouteValidator } from './validator'; -import { ALLOWED_PUBLIC_VERSION, CoreVersionedRouter } from './versioned_router'; +import { BASE_PUBLIC_VERSION, CoreVersionedRouter } from './versioned_router'; import { CoreKibanaRequest } from './request'; import { kibanaResponseFactory } from './response'; import { HapiResponseAdapter } from './response_adapter'; @@ -339,7 +339,7 @@ export class Router { describe('@kbn/config-schema', () => { it('generates the expected OpenAPI document for the shared schema', () => { const [routers, versionedRouters] = createTestRouters({ - routers: { testRouter: { routes: [{ method: 'get' }, { method: 'post' }] } }, + routers: { + testRouter: { + routes: [{ method: 'get' }, { method: 'post' }], + }, + }, versionedRouters: { testVersionedRouter: { routes: [{}] } }, bodySchema: createSharedConfigSchema(), }); @@ -118,7 +122,7 @@ describe('generateOpenApiDocument', () => { }, }, }, - options: { tags: ['foo'] }, + options: { tags: ['foo'], access: 'public' }, handler: jest.fn(), }, ], @@ -164,7 +168,7 @@ describe('generateOpenApiDocument', () => { }, }, }, - options: { tags: ['foo'] }, + options: { tags: ['foo'], access: 'public' }, handler: jest.fn(), }, ], @@ -229,7 +233,7 @@ describe('generateOpenApiDocument', () => { }, }, }, - options: { tags: ['foo'] }, + options: { tags: ['foo'], access: 'public' }, handler: jest.fn(), }, ], @@ -251,7 +255,7 @@ describe('generateOpenApiDocument', () => { request: { body: () => ({ value: {} }) }, response: { 200: { body: (() => {}) as any } }, }, - version: '123', + version: '2023-10-31', }, }, ], @@ -276,11 +280,19 @@ describe('generateOpenApiDocument', () => { routers: { testRouter1: { routes: [ - { path: '/1-1/{id}/{path*}', options: { tags: ['oas-tag:1', 'oas-tag:2', 'foo'] } }, - { path: '/1-2/{id}/{path*}', options: { tags: ['oas-tag:1', 'foo'] } }, + { + path: '/1-1/{id}/{path*}', + options: { tags: ['oas-tag:1', 'oas-tag:2', 'foo'], access: 'public' }, + }, + { + path: '/1-2/{id}/{path*}', + options: { tags: ['oas-tag:1', 'foo'], access: 'public' }, + }, ], }, - testRouter2: { routes: [{ path: '/2-1/{id}/{path*}', options: { tags: undefined } }] }, + testRouter2: { + routes: [{ path: '/2-1/{id}/{path*}', options: { tags: undefined, access: 'public' } }], + }, }, versionedRouters: { testVersionedRouter1: { @@ -332,15 +344,15 @@ describe('generateOpenApiDocument', () => { routes: [ { path: '/1-1/{id}/{path*}', - options: { availability: { stability: 'experimental' } }, + options: { availability: { stability: 'experimental' }, access: 'public' }, }, { path: '/1-2/{id}/{path*}', - options: { availability: { stability: 'beta' } }, + options: { availability: { stability: 'beta' }, access: 'public' }, }, { path: '/1-3/{id}/{path*}', - options: { availability: { stability: 'stable' } }, + options: { availability: { stability: 'stable' }, access: 'public' }, }, ], }, diff --git a/packages/kbn-router-to-openapispec/src/generate_oas.test.util.ts b/packages/kbn-router-to-openapispec/src/generate_oas.test.util.ts index a39afb6357bfc..96d427aacb197 100644 --- a/packages/kbn-router-to-openapispec/src/generate_oas.test.util.ts +++ b/packages/kbn-router-to-openapispec/src/generate_oas.test.util.ts @@ -36,6 +36,7 @@ export const getRouterDefaults = (bodySchema?: RuntimeSchema): RouterRoute => ({ tags: ['foo', 'oas-tag:bar'], summary: 'route summary', description: 'route description', + access: 'public', }, validationSchemas: { request: { @@ -100,7 +101,7 @@ export const getVersionedRouterDefaults = (bodySchema?: RuntimeSchema): Versione }, response: { [200]: { - description: 'OK response oas-test-version-1', + description: 'OK response 2023-10-31', body: () => schema.object( { fooResponseWithDescription: schema.string() }, @@ -109,7 +110,7 @@ export const getVersionedRouterDefaults = (bodySchema?: RuntimeSchema): Versione }, }, }, - version: 'oas-test-version-1', + version: '2023-10-31', }, }, { @@ -119,14 +120,14 @@ export const getVersionedRouterDefaults = (bodySchema?: RuntimeSchema): Versione request: { body: schema.object({ foo: schema.string() }) }, response: { [200]: { - description: 'OK response oas-test-version-2', + description: 'OK response 9999-99-99', body: () => schema.stream({ meta: { description: 'stream response' } }), bodyContentType: 'application/octet-stream', }, unsafe: { body: true }, }, }, - version: 'oas-test-version-2', + version: '9999-99-99', }, }, ], diff --git a/packages/kbn-router-to-openapispec/src/generate_oas.ts b/packages/kbn-router-to-openapispec/src/generate_oas.ts index 9c7423147721b..d16cdd14953a9 100644 --- a/packages/kbn-router-to-openapispec/src/generate_oas.ts +++ b/packages/kbn-router-to-openapispec/src/generate_oas.ts @@ -8,6 +8,7 @@ */ import type { CoreVersionedRouter, Router } from '@kbn/core-http-router-server-internal'; +import { BASE_PUBLIC_VERSION as SERVERLESS_VERSION_2023_10_31 } from '@kbn/core-http-router-server-internal'; import type { OpenAPIV3 } from 'openapi-types'; import { OasConverter } from './oas_converter'; import { processRouter } from './process_router'; @@ -19,7 +20,12 @@ export const openApiVersion = '3.0.0'; export interface GenerateOpenApiDocumentOptionsFilters { pathStartsWith?: string[]; excludePathsMatching?: string[]; - access?: 'public' | 'internal'; + /** @default 'public' */ + access: 'public' | 'internal'; + /** + * We generate spec for one version at a time + * @default '2023-10-31' if access is public, otherwise undefined + */ version?: string; } @@ -37,7 +43,10 @@ export const generateOpenApiDocument = ( appRouters: { routers: Router[]; versionedRouters: CoreVersionedRouter[] }, opts: GenerateOpenApiDocumentOptions ): OpenAPIV3.Document => { - const { filters } = opts; + let { filters = { access: 'public' } } = opts; + if (filters.access === 'public' && !filters.version) { + filters = { ...filters, version: SERVERLESS_VERSION_2023_10_31 }; + } const converter = new OasConverter(); const paths: OpenAPIV3.PathsObject = {}; const getOpId = createOpIdGenerator(); diff --git a/packages/kbn-router-to-openapispec/src/process_router.test.ts b/packages/kbn-router-to-openapispec/src/process_router.test.ts index 2ce135a378789..a7bcfc7506485 100644 --- a/packages/kbn-router-to-openapispec/src/process_router.test.ts +++ b/packages/kbn-router-to-openapispec/src/process_router.test.ts @@ -51,7 +51,7 @@ describe('extractResponses', () => { 200: { description: 'OK response', content: { - 'application/test+json; Elastic-Api-Version=2023-10-31': { + 'application/test+json': { schema: { type: 'object', additionalProperties: false, @@ -66,7 +66,7 @@ describe('extractResponses', () => { 404: { description: 'Not Found response', content: { - 'application/test2+json; Elastic-Api-Version=2023-10-31': { + 'application/test2+json': { schema: { type: 'object', additionalProperties: false, @@ -88,28 +88,28 @@ describe('processRouter', () => { { method: 'get', path: '/foo', - options: { access: 'internal', deprecated: true, discontinued: 'discontinued router' }, + options: { access: 'public', deprecated: true, discontinued: 'discontinued router' }, handler: jest.fn(), validationSchemas: { request: { body: schema.object({}) } }, }, { method: 'get', path: '/bar', - options: {}, + options: { access: 'public' }, handler: jest.fn(), validationSchemas: { request: { body: schema.object({}) } }, }, { method: 'get', path: '/baz', - options: {}, + options: { access: 'public' }, handler: jest.fn(), validationSchemas: { request: { body: schema.object({}) } }, }, { path: '/qux', method: 'post', - options: {}, + options: { access: 'public' }, handler: jest.fn(), validationSchemas: { request: { body: schema.object({}) } }, security: { @@ -129,6 +129,7 @@ describe('processRouter', () => { method: 'post', options: { description: 'This a test route description.', + access: 'public', }, handler: jest.fn(), validationSchemas: { request: { body: schema.object({}) } }, @@ -150,12 +151,14 @@ describe('processRouter', () => { it('only provides routes for version 2023-10-31', () => { const result1 = processRouter(testRouter, new OasConverter(), createOpIdGenerator(), { version: '2023-10-31', + access: 'public', }); expect(Object.keys(result1.paths!)).toHaveLength(5); const result2 = processRouter(testRouter, new OasConverter(), createOpIdGenerator(), { version: '2024-10-31', + access: 'public', }); expect(Object.keys(result2.paths!)).toHaveLength(0); }); @@ -163,6 +166,7 @@ describe('processRouter', () => { it('updates description with privileges required', () => { const result = processRouter(testRouter, new OasConverter(), createOpIdGenerator(), { version: '2023-10-31', + access: 'public', }); expect(result.paths['/qux']?.post).toBeDefined(); diff --git a/packages/kbn-router-to-openapispec/src/process_router.ts b/packages/kbn-router-to-openapispec/src/process_router.ts index b808f9bed84d5..f47888808772f 100644 --- a/packages/kbn-router-to-openapispec/src/process_router.ts +++ b/packages/kbn-router-to-openapispec/src/process_router.ts @@ -9,7 +9,7 @@ import type { Router } from '@kbn/core-http-router-server-internal'; import { getResponseValidation } from '@kbn/core-http-server'; -import { ALLOWED_PUBLIC_VERSION as SERVERLESS_VERSION_2023_10_31 } from '@kbn/core-http-router-server-internal'; +import { BASE_PUBLIC_VERSION as SERVERLESS_VERSION_2023_10_31 } from '@kbn/core-http-router-server-internal'; import type { OpenAPIV3 } from 'openapi-types'; import type { OasConverter } from './oas_converter'; import { @@ -20,7 +20,6 @@ import { extractValidationSchemaFromRoute, getPathParameters, getVersionedContentTypeString, - getVersionedHeaderParam, mergeResponseContent, prepareRoutes, setXState, @@ -34,7 +33,7 @@ export const processRouter = ( appRouter: Router, converter: OasConverter, getOpId: GetOpId, - filters?: GenerateOpenApiDocumentOptionsFilters + filters: GenerateOpenApiDocumentOptionsFilters ) => { const paths: OpenAPIV3.PathsObject = {}; if (filters?.version && filters.version !== SERVERLESS_VERSION_2023_10_31) return { paths }; @@ -47,7 +46,6 @@ export const processRouter = ( const contentType = extractContentType(route.options?.body); const parameters: OpenAPIV3.ParameterObject[] = [ - getVersionedHeaderParam(SERVERLESS_VERSION_2023_10_31, [SERVERLESS_VERSION_2023_10_31]), ...getXsrfHeaderForMethod(route.method, route.options), ]; if (validationSchemas) { @@ -84,7 +82,11 @@ export const processRouter = ( requestBody: !!validationSchemas?.body ? { content: { - [getVersionedContentTypeString(SERVERLESS_VERSION_2023_10_31, contentType)]: { + [getVersionedContentTypeString( + SERVERLESS_VERSION_2023_10_31, + 'public', + contentType + )]: { schema: converter.convert(validationSchemas.body), }, }, @@ -124,6 +126,7 @@ export const extractResponses = (route: InternalRouterRoute, converter: OasConve ? { [getVersionedContentTypeString( SERVERLESS_VERSION_2023_10_31, + 'public', schema.bodyContentType ? [schema.bodyContentType] : contentType )]: { schema: converter.convert(schema.body()), diff --git a/packages/kbn-router-to-openapispec/src/process_versioned_router.test.ts b/packages/kbn-router-to-openapispec/src/process_versioned_router.test.ts index b7a4827e4f365..af426b5f0c4f9 100644 --- a/packages/kbn-router-to-openapispec/src/process_versioned_router.test.ts +++ b/packages/kbn-router-to-openapispec/src/process_versioned_router.test.ts @@ -12,9 +12,9 @@ import type { CoreVersionedRouter } from '@kbn/core-http-router-server-internal' import { get } from 'lodash'; import { OasConverter } from './oas_converter'; import { - processVersionedRouter, - extractVersionedResponses, extractVersionedRequestBodies, + extractVersionedResponses, + processVersionedRouter, } from './process_versioned_router'; import { VersionedRouterRoute } from '@kbn/core-http-server'; import { createOpIdGenerator } from './util'; @@ -27,9 +27,9 @@ beforeEach(() => { describe('extractVersionedRequestBodies', () => { test('handles full request config as expected', () => { expect( - extractVersionedRequestBodies(createTestRoute(), oasConverter, ['application/json']) + extractVersionedRequestBodies(createInternalTestRoute(), oasConverter, ['application/json']) ).toEqual({ - 'application/json; Elastic-Api-Version=2023-10-31': { + 'application/json; Elastic-Api-Version=1': { schema: { additionalProperties: false, properties: { @@ -41,7 +41,7 @@ describe('extractVersionedRequestBodies', () => { type: 'object', }, }, - 'application/json; Elastic-Api-Version=2024-12-31': { + 'application/json; Elastic-Api-Version=2': { schema: { additionalProperties: false, properties: { @@ -60,12 +60,12 @@ describe('extractVersionedRequestBodies', () => { describe('extractVersionedResponses', () => { test('handles full response config as expected', () => { expect( - extractVersionedResponses(createTestRoute(), oasConverter, ['application/test+json']) + extractVersionedResponses(createInternalTestRoute(), oasConverter, ['application/test+json']) ).toEqual({ 200: { - description: 'OK response 2023-10-31\nOK response 2024-12-31', // merge multiple version descriptions + description: 'OK response 1\nOK response 2', // merge multiple version descriptions content: { - 'application/test+json; Elastic-Api-Version=2023-10-31': { + 'application/test+json; Elastic-Api-Version=1': { schema: { type: 'object', additionalProperties: false, @@ -75,7 +75,7 @@ describe('extractVersionedResponses', () => { required: ['bar'], }, }, - 'application/test+json; Elastic-Api-Version=2024-12-31': { + 'application/test+json; Elastic-Api-Version=2': { schema: { type: 'object', additionalProperties: false, @@ -88,9 +88,9 @@ describe('extractVersionedResponses', () => { }, }, 404: { - description: 'Not Found response 2023-10-31', + description: 'Not Found response 1', content: { - 'application/test2+json; Elastic-Api-Version=2023-10-31': { + 'application/test2+json; Elastic-Api-Version=1': { schema: { type: 'object', additionalProperties: false, @@ -104,7 +104,7 @@ describe('extractVersionedResponses', () => { }, 500: { content: { - 'application/test2+json; Elastic-Api-Version=2024-12-31': { + 'application/test2+json; Elastic-Api-Version=2': { schema: { type: 'object', additionalProperties: false, @@ -126,22 +126,21 @@ describe('processVersionedRouter', () => { { getRoutes: () => [createTestRoute()] } as unknown as CoreVersionedRouter, new OasConverter(), createOpIdGenerator(), - {} + { access: 'public', version: '2023-10-31' } ); expect(Object.keys(get(baseCase, 'paths["/foo"].get.responses.200.content')!)).toEqual([ - 'application/test+json; Elastic-Api-Version=2023-10-31', - 'application/test+json; Elastic-Api-Version=2024-12-31', + 'application/test+json', ]); const filteredCase = processVersionedRouter( { getRoutes: () => [createTestRoute()] } as unknown as CoreVersionedRouter, new OasConverter(), createOpIdGenerator(), - { version: '2023-10-31' } + { version: '2024-12-31', access: 'public' } ); expect(Object.keys(get(filteredCase, 'paths["/foo"].get.responses.200.content')!)).toEqual([ - 'application/test+json; Elastic-Api-Version=2023-10-31', + 'application/test+json', ]); }); @@ -150,7 +149,7 @@ describe('processVersionedRouter', () => { { getRoutes: () => [createTestRoute()] } as unknown as CoreVersionedRouter, new OasConverter(), createOpIdGenerator(), - {} + { version: '2023-10-31', access: 'public' } ); expect(results.paths['/foo']).toBeDefined(); @@ -228,3 +227,70 @@ const createTestRoute: () => VersionedRouterRoute = () => ({ }, ], }); + +const createInternalTestRoute: () => VersionedRouterRoute = () => ({ + path: '/foo', + method: 'get', + isVersioned: true, + options: { + access: 'internal', + deprecated: true, + discontinued: 'discontinued versioned router', + options: { body: { access: ['application/test+json'] } as any }, + security: { + authz: { + requiredPrivileges: ['manage_spaces'], + }, + }, + description: 'This is a test route description.', + }, + handlers: [ + { + fn: jest.fn(), + options: { + version: '1', + validate: () => ({ + request: { + body: schema.object({ foo: schema.string() }), + }, + response: { + 200: { + description: 'OK response 1', + bodyContentType: 'application/test+json', + body: () => schema.object({ bar: schema.number({ min: 1, max: 99 }) }), + }, + 404: { + description: 'Not Found response 1', + bodyContentType: 'application/test2+json', + body: () => schema.object({ ok: schema.literal(false) }), + }, + unsafe: { body: false }, + }, + }), + }, + }, + { + fn: jest.fn(), + options: { + version: '2', + validate: () => ({ + request: { + body: schema.object({ foo2: schema.string() }), + }, + response: { + 200: { + description: 'OK response 2', + bodyContentType: 'application/test+json', + body: () => schema.object({ bar2: schema.number({ min: 1, max: 99 }) }), + }, + 500: { + bodyContentType: 'application/test2+json', + body: () => schema.object({ ok: schema.literal(false) }), + }, + unsafe: { body: false }, + }, + }), + }, + }, + ], +}); diff --git a/packages/kbn-router-to-openapispec/src/process_versioned_router.ts b/packages/kbn-router-to-openapispec/src/process_versioned_router.ts index eab2dfef78a21..7c16e5673cebb 100644 --- a/packages/kbn-router-to-openapispec/src/process_versioned_router.ts +++ b/packages/kbn-router-to-openapispec/src/process_versioned_router.ts @@ -17,7 +17,6 @@ import type { OpenAPIV3 } from 'openapi-types'; import { extractAuthzDescription } from './extract_authz_description'; import type { GenerateOpenApiDocumentOptionsFilters } from './generate_oas'; import type { OasConverter } from './oas_converter'; -import { isReferenceObject } from './oas_converter/common'; import { prepareRoutes, getPathParameters, @@ -31,12 +30,13 @@ import { setXState, GetOpId, } from './util'; +import { isReferenceObject } from './oas_converter/common'; export const processVersionedRouter = ( appRouter: CoreVersionedRouter, converter: OasConverter, getOpId: GetOpId, - filters?: GenerateOpenApiDocumentOptionsFilters + filters: GenerateOpenApiDocumentOptionsFilters ) => { const routes = prepareRoutes(appRouter.getRoutes(), filters); const paths: OpenAPIV3.PathsObject = {}; @@ -44,8 +44,8 @@ export const processVersionedRouter = ( const pathParams = getPathParameters(route.path); let parameters: OpenAPIV3.ParameterObject[] = []; - let version: undefined | string; let handler: undefined | VersionedRouterRoute['handlers'][0]; + let version: undefined | string; let versions: string[] = versionHandlerResolvers.sort( route.handlers.map(({ options: { version: v } }) => v), route.options.access @@ -84,12 +84,16 @@ export const processVersionedRouter = ( queryObjects = converter.convertQuery(reqQuery); } parameters = [ - getVersionedHeaderParam(version, versions), ...getXsrfHeaderForMethod(route.method as RouteMethod, route.options.options), ...pathObjects, ...queryObjects, ]; } + parameters = [ + ...(route.options.access === 'internal' + ? [getVersionedHeaderParam(version, versions)] + : ([] as OpenAPIV3.ParameterObject[])), + ].concat(...parameters); let description = `${route.options.description ?? ''}`; if (route.options.security) { const authzDescription = extractAuthzDescription(route.options.security); @@ -101,9 +105,9 @@ export const processVersionedRouter = ( const hasBody = Boolean(extractValidationSchemaFromVersionedHandler(handler)?.request?.body); const contentType = extractContentType(route.options.options?.body); - const hasVersionFilter = Boolean(filters?.version); // If any handler is deprecated we show deprecated: true in the spec const hasDeprecations = route.handlers.some(({ options }) => !!options.options?.deprecated); + const hasVersionFilter = Boolean(filters?.version); const operation: OpenAPIV3.OperationObject = { summary: route.options.summary ?? '', tags: route.options.options?.tags ? extractTags(route.options.options.tags) : [], @@ -113,12 +117,12 @@ export const processVersionedRouter = ( requestBody: hasBody ? { content: hasVersionFilter - ? extractVersionedRequestBody(handler, converter, contentType) + ? extractVersionedRequestBody(handler, route.options.access, converter, contentType) : extractVersionedRequestBodies(route, converter, contentType), } : undefined, responses: hasVersionFilter - ? extractVersionedResponse(handler, converter, contentType) + ? extractVersionedResponse(handler, route.options.access, converter, contentType) : extractVersionedResponses(route, converter, contentType), parameters, operationId: getOpId({ path: route.path, method: route.method }), @@ -140,8 +144,22 @@ export const processVersionedRouter = ( return { paths }; }; +export const extractVersionedRequestBodies = ( + route: VersionedRouterRoute, + converter: OasConverter, + contentType: string[] +): OpenAPIV3.RequestBodyObject['content'] => { + return route.handlers.reduce((acc, handler) => { + return { + ...acc, + ...extractVersionedRequestBody(handler, route.options.access, converter, contentType), + }; + }, {}); +}; + export const extractVersionedRequestBody = ( handler: VersionedRouterRoute['handlers'][0], + access: 'public' | 'internal', converter: OasConverter, contentType: string[] ) => { @@ -149,27 +167,15 @@ export const extractVersionedRequestBody = ( if (!schemas?.request) return {}; const schema = converter.convert(schemas.request.body); return { - [getVersionedContentTypeString(handler.options.version, contentType)]: { + [getVersionedContentTypeString(handler.options.version, access, contentType)]: { schema, }, }; }; -export const extractVersionedRequestBodies = ( - route: VersionedRouterRoute, - converter: OasConverter, - contentType: string[] -): OpenAPIV3.RequestBodyObject['content'] => { - return route.handlers.reduce((acc, handler) => { - return { - ...acc, - ...extractVersionedRequestBody(handler, converter, contentType), - }; - }, {}); -}; - export const extractVersionedResponse = ( handler: VersionedRouterRoute['handlers'][0], + access: 'public' | 'internal', converter: OasConverter, contentType: string[] ) => { @@ -184,6 +190,7 @@ export const extractVersionedResponse = ( const schema = converter.convert(maybeSchema); const contentTypeString = getVersionedContentTypeString( handler.options.version, + access, responseSchema.bodyContentType ? [responseSchema.bodyContentType] : contentType ); newContent = { @@ -237,7 +244,12 @@ export const extractVersionedResponses = ( contentType: string[] ): OpenAPIV3.ResponsesObject => { return route.handlers.reduce((acc, handler) => { - const responses = extractVersionedResponse(handler, converter, contentType); + const responses = extractVersionedResponse( + handler, + route.options.access, + converter, + contentType + ); return mergeVersionedResponses(acc, responses); }, {}); }; diff --git a/packages/kbn-router-to-openapispec/src/util.test.ts b/packages/kbn-router-to-openapispec/src/util.test.ts index ee34976e47152..80314ae55f179 100644 --- a/packages/kbn-router-to-openapispec/src/util.test.ts +++ b/packages/kbn-router-to-openapispec/src/util.test.ts @@ -134,7 +134,7 @@ describe('prepareRoutes', () => { { input: [{ path: '/api/foo', options: { access: internal } }], output: [{ path: '/api/foo', options: { access: internal } }], - filters: {}, + filters: { access: internal }, }, { input: [ @@ -142,7 +142,7 @@ describe('prepareRoutes', () => { { path: '/api/bar', options: { access: internal } }, ], output: [{ path: '/api/bar', options: { access: internal } }], - filters: { pathStartsWith: ['/api/bar'] }, + filters: { pathStartsWith: ['/api/bar'], access: internal }, }, { input: [ diff --git a/packages/kbn-router-to-openapispec/src/util.ts b/packages/kbn-router-to-openapispec/src/util.ts index 61c69caf538f9..ac3a47125e5b0 100644 --- a/packages/kbn-router-to-openapispec/src/util.ts +++ b/packages/kbn-router-to-openapispec/src/util.ts @@ -78,9 +78,15 @@ export const extractContentType = (body: undefined | RouteConfigOptionsBody) => export const getVersionedContentTypeString = ( version: string, + access: 'public' | 'internal', acceptedContentTypes: string[] ): string => { - return `${acceptedContentTypes.join('; ')}; Elastic-Api-Version=${version}`; + if (access === 'internal') { + return `${acceptedContentTypes.join('; ')}; Elastic-Api-Version=${version}`; + } + // Exclude Elastic-Api-Version header for public routes for now, this means public routes + // can only generate spec for one version at a time. + return `${acceptedContentTypes.join('; ')}`; }; export const extractValidationSchemaFromRoute = ( @@ -108,7 +114,7 @@ export const prepareRoutes = < R extends { path: string; options: { access?: 'public' | 'internal'; excludeFromOAS?: boolean } } >( routes: R[], - filters: GenerateOpenApiDocumentOptionsFilters = {} + filters: GenerateOpenApiDocumentOptionsFilters ): R[] => { if (Object.getOwnPropertyNames(filters).length === 0) return routes; return routes.filter((route) => { @@ -122,7 +128,16 @@ export const prepareRoutes = < if (filters.pathStartsWith && !filters.pathStartsWith.some((p) => route.path.startsWith(p))) { return false; } - if (filters.access && route.options.access !== filters.access) return false; + if (filters.access === 'public' && route.options.access !== 'public') { + return false; + } + if ( + filters.access === 'internal' && + route.options.access != null && + route.options.access !== 'internal' + ) { + return false; + } return true; }); }; diff --git a/src/core/server/integration_tests/http/oas.test.ts b/src/core/server/integration_tests/http/oas.test.ts index 413b8b01754b5..9aeffe884a203 100644 --- a/src/core/server/integration_tests/http/oas.test.ts +++ b/src/core/server/integration_tests/http/oas.test.ts @@ -17,6 +17,7 @@ import type { } from '@kbn/core-http-context-server-internal'; import { InternalExecutionContextSetup } from '@kbn/core-execution-context-server-internal'; import { IRouter } from '@kbn/core-http-server'; +import { schema } from '@kbn/config-schema'; let prebootDeps: { context: jest.Mocked; @@ -81,14 +82,14 @@ it('handles requests when enabled', async () => { it.each([ { - queryParam: { pathStartsWith: '/api/include-test' }, + queryParam: { pathStartsWith: '/api/public-test' }, includes: { paths: { - '/api/include-test': { + '/api/public-test': { get: {}, post: {}, }, - '/api/include-test/{id}': {}, + '/api/public-test/{id}': {}, }, }, excludes: ['/my-other-plugin'], @@ -97,11 +98,11 @@ it.each([ queryParam: { pluginId: 'myPlugin' }, includes: { paths: { - '/api/include-test': { + '/api/public-test': { get: {}, post: {}, }, - '/api/include-test/{id}': {}, + '/api/public-test/{id}': {}, }, }, excludes: ['/my-other-plugin'], @@ -109,12 +110,13 @@ it.each([ { queryParam: { pluginId: 'nonExistant' }, includes: {}, - excludes: ['/my-include-test', '/my-other-plugin'], + excludes: ['/my-public-test', '/my-other-plugin'], }, { queryParam: { pluginId: 'myOtherPlugin', - pathStartsWith: ['/api/my-other-plugin', '/api/versioned'], + access: 'internal', + pathStartsWith: ['/api/my-other-plugin'], }, includes: { paths: { @@ -125,13 +127,13 @@ it.each([ }, }, }, - excludes: ['/my-include-test'], + excludes: ['/my-public-test'], }, { queryParam: { access: 'public', version: '2023-10-31' }, includes: { paths: { - '/api/include-test': { + '/api/public-test': { get: {}, }, '/api/versioned': { @@ -139,13 +141,13 @@ it.each([ }, }, }, - excludes: ['/api/my-include-test/{id}', '/api/exclude-test', '/api/my-other-plugin'], + excludes: ['/api/my-public-test/{id}', '/api/my-other-plugin'], }, { - queryParam: { excludePathsMatching: ['/api/exclude-test', '/api/my-other-plugin'] }, + queryParam: { excludePathsMatching: ['/api/internal-test', '/api/my-other-plugin'] }, includes: { paths: { - '/api/include-test': { + '/api/public-test': { get: {}, }, '/api/versioned': { @@ -153,7 +155,37 @@ it.each([ }, }, }, - excludes: ['/api/exclude-test', '/api/my-other-plugin'], + excludes: ['/api/internal-test', '/api/my-other-plugin'], + }, + { + queryParam: { access: 'internal', pathStartsWith: ['/api/versioned-internal'] }, + includes: { + paths: { + '/api/versioned-internal': { + get: { + parameters: [ + { + description: 'The version of the API to use', + in: 'header', + name: 'elastic-api-version', + schema: { + default: '2', + enum: ['1', '2'], + type: 'string', + }, + }, + ], + requestBody: { + content: { + 'application/json; Elastic-Api-Version=1': {}, // Multiple body types + 'application/json; Elastic-Api-Version=2': {}, + }, + }, + }, + }, + }, + }, + excludes: ['/api/internal-test', '/api/my-other-plugin'], }, ])( 'can filter paths based on query params $queryParam', @@ -163,17 +195,49 @@ it.each([ createRoutes: (getRouter) => { const router1 = getRouter(Symbol('myPlugin')); router1.get( - { path: '/api/include-test', validate: false, options: { access: 'public' } }, + { path: '/api/public-test', validate: false, options: { access: 'public' } }, + (_, __, res) => res.ok() + ); + router1.post( + { path: '/api/public-test', validate: false, options: { access: 'public' } }, + (_, __, res) => res.ok() + ); + router1.get( + { path: '/api/public-test/{id}', validate: false, options: { access: 'public' } }, + (_, __, res) => res.ok() + ); + router1.get( + { + path: '/api/internal-test', + validate: false, + options: { + /* empty */ + }, + }, (_, __, res) => res.ok() ); - router1.post({ path: '/api/include-test', validate: false }, (_, __, res) => res.ok()); - router1.get({ path: '/api/include-test/{id}', validate: false }, (_, __, res) => res.ok()); - router1.get({ path: '/api/exclude-test', validate: false }, (_, __, res) => res.ok()); router1.versioned .get({ path: '/api/versioned', access: 'public' }) .addVersion({ version: '2023-10-31', validate: false }, (_, __, res) => res.ok()); + router1.versioned + .get({ path: '/api/versioned-internal', access: 'internal' }) + .addVersion( + { + version: '1', + validate: { request: { body: schema.object({ foo: schema.string() }) } }, + }, + (_, __, res) => res.ok() + ) + .addVersion( + { + version: '2', + validate: { request: { body: schema.object({ bar: schema.string() }) } }, + }, + (_, __, res) => res.ok() + ); + const router2 = getRouter(Symbol('myOtherPlugin')); router2.get({ path: '/api/my-other-plugin', validate: false }, (_, __, res) => res.ok()); router2.post({ path: '/api/my-other-plugin', validate: false }, (_, __, res) => res.ok()); From d6df2e6b2ded588001d381f46895e4e9c50a2a1b Mon Sep 17 00:00:00 2001 From: Faisal Kanout Date: Thu, 5 Dec 2024 17:07:58 +0100 Subject: [PATCH 097/141] [OBX-UX-MGMT][ALERTING] Fix APM rule error msg when KQL filter is invalid (#203096) ## Summary It fixes https://github.com/elastic/kibana/issues/199273 by validating the query before passing it to the preview chart --- .../apm_rule_unified_search_bar.tsx | 54 +++++++++++-------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/apm_rule_unified_search_bar.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/apm_rule_unified_search_bar.tsx index d91807ec08462..393492cfae9a0 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/apm_rule_unified_search_bar.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/apm_rule_unified_search_bar.tsx @@ -6,7 +6,8 @@ */ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { Query } from '@kbn/es-query'; +import { EuiFormErrorText } from '@elastic/eui'; +import { Query, fromKueryExpression } from '@kbn/es-query'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { ApmPluginStartDeps } from '../../../plugin'; import { useAdHocApmDataView } from '../../../hooks/use_adhoc_apm_data_view'; @@ -26,7 +27,7 @@ export function ApmRuleUnifiedSearchBar({ setRuleParams: (key: string, value: any) => void; }) { const { services } = useKibana(); - + const [queryError, setQueryError] = React.useState(); const { unifiedSearch: { ui: { SearchBar }, @@ -38,27 +39,38 @@ export function ApmRuleUnifiedSearchBar({ const handleSubmit = (payload: { query?: Query }) => { const { query } = payload; - setRuleParams('searchConfiguration', { query }); + try { + setQueryError(undefined); + fromKueryExpression(query?.query as string); + setRuleParams('searchConfiguration', { query }); + } catch (e) { + setQueryError(e.message); + } }; return ( - + <> + + {queryError && ( + {queryError} + )} + ); } From 0a196b979233f3f10544afc53d9549164f6ba4e7 Mon Sep 17 00:00:00 2001 From: Walter Rafelsberger Date: Thu, 5 Dec 2024 17:26:26 +0100 Subject: [PATCH 098/141] [ML] Improve some TS. (#202314) ## Summary - Follow up to #175178 to fix some breaking TS changes after the TS `v4.9.5` upgrade. - Follow up to #182344 to replace `any` in `useCallback` with proper types. - Fixes #176123. ### Checklist - [x] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations. --- .../src/use_cancellable_search.ts | 10 ++++++---- .../components/full_time_range_selector.test.tsx | 12 ++++++------ .../components/flyout_layout.tsx | 2 +- .../log_rate_analysis_results_table.tsx | 4 ++-- .../log_rate_analysis_results_table_groups.tsx | 6 +++--- .../aiops/public/hooks/use_cancellable_search.ts | 5 ++--- .../data_drift/use_data_drift_result.ts | 4 +--- .../ml_anomaly_alert_trigger.tsx | 2 +- .../plugins/ml/public/alerting/job_selector.tsx | 2 +- ...nomaly_detection_jobs_health_rule_trigger.tsx | 4 ++-- .../feature_importance/decision_path_chart.tsx | 2 +- .../components/analytics_list/analytics_list.tsx | 2 +- .../explorer/actions/load_explorer_data.ts | 2 +- .../application/explorer/anomaly_timeline.tsx | 2 +- .../ml/public/application/explorer/explorer.tsx | 2 +- .../filter_agg/components/filter_range_form.tsx | 10 ++++++++-- .../filter_agg/components/filter_term_form.tsx | 16 ++++++++++++++-- .../hooks/use_latest_function_config.ts | 2 +- 18 files changed, 53 insertions(+), 36 deletions(-) diff --git a/x-pack/packages/ml/cancellable_search/src/use_cancellable_search.ts b/x-pack/packages/ml/cancellable_search/src/use_cancellable_search.ts index 375fd6e44b435..5d144cc82ea9c 100644 --- a/x-pack/packages/ml/cancellable_search/src/use_cancellable_search.ts +++ b/x-pack/packages/ml/cancellable_search/src/use_cancellable_search.ts @@ -6,13 +6,16 @@ */ import { useCallback, useRef, useState } from 'react'; -import type { IKibanaSearchResponse } from '@kbn/search-types'; +import type { IKibanaSearchRequest, IKibanaSearchResponse } from '@kbn/search-types'; import { isRunningResponse } from '@kbn/data-plugin/common'; import { tap } from 'rxjs'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; export interface UseCancellableSearch { - runRequest: ( + runRequest: < + RequestBody extends IKibanaSearchRequest, + ResponseType extends IKibanaSearchResponse + >( requestBody: RequestBody, options?: object ) => Promise; @@ -26,13 +29,12 @@ export function useCancellableSearch(data: DataPublicPluginStart) { const [isLoading, setIsFetching] = useState(false); const runRequest = useCallback( - ( + ( requestBody: RequestBody, options = {} ): Promise => { return new Promise((resolve, reject) => { data.search - // @ts-expect-error upgrade typescript v4.9.5 .search(requestBody, { abortSignal: abortController.current.signal, ...options, diff --git a/x-pack/packages/ml/date_picker/src/components/full_time_range_selector.test.tsx b/x-pack/packages/ml/date_picker/src/components/full_time_range_selector.test.tsx index a217bbc4fb2cf..8c383b6439ef4 100644 --- a/x-pack/packages/ml/date_picker/src/components/full_time_range_selector.test.tsx +++ b/x-pack/packages/ml/date_picker/src/components/full_time_range_selector.test.tsx @@ -9,7 +9,8 @@ import moment from 'moment'; import React from 'react'; import { act, render, fireEvent } from '@testing-library/react'; -import type { Query } from '@kbn/es-query'; +import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; + import type { DataView } from '@kbn/data-views-plugin/public'; import type { TimefilterContract } from '@kbn/data-plugin/public'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; @@ -48,9 +49,10 @@ describe('FullTimeRangeSelector', () => { timeFieldName: '@timestamp', } as unknown as DataView; - const query: Query = { - language: 'kuery', - query: 'region:us-east-1', + const query: QueryDslQueryContainer = { + term: { + region: 'us-east-1', + }, }; const props = { @@ -70,7 +72,6 @@ describe('FullTimeRangeSelector', () => { const { getByText } = render( - {/* @ts-expect-error upgrade typescript v4.9.5*/} @@ -99,7 +100,6 @@ describe('FullTimeRangeSelector', () => { const { getByText } = render( - {/* @ts-expect-error upgrade typescript v4.9.5*/} diff --git a/x-pack/packages/ml/inference_integration_flyout/components/flyout_layout.tsx b/x-pack/packages/ml/inference_integration_flyout/components/flyout_layout.tsx index 22c904e63561e..77b7f623099a3 100644 --- a/x-pack/packages/ml/inference_integration_flyout/components/flyout_layout.tsx +++ b/x-pack/packages/ml/inference_integration_flyout/components/flyout_layout.tsx @@ -51,7 +51,7 @@ export const InferenceFlyout: React.FC = ({ }, [inferenceEndpointError]); const onChangingInferenceEndpoint = useCallback( - (value: any) => { + (value: string) => { setInferenceEndpointId(value); onInferenceEndpointChange(value); }, diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx index e9072c2929f14..ded175a89dfbc 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table.tsx @@ -10,7 +10,7 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { orderBy, isEqual } from 'lodash'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import type { EuiTableSortingType } from '@elastic/eui'; +import type { Criteria, EuiTableSortingType } from '@elastic/eui'; import { useEuiBackgroundColor, EuiBasicTable } from '@elastic/eui'; import type { SignificantItem } from '@kbn/ml-agg-utils'; @@ -109,7 +109,7 @@ export const LogRateAnalysisResultsTable: FC = groupFilter !== undefined ); - const onChange = useCallback((tableSettings: any) => { + const onChange = useCallback((tableSettings: Criteria) => { if (tableSettings.page) { const { index, size } = tableSettings.page; setPageIndex(index); diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx index 6bd0a5e4ce213..ceeeb79c1232c 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis_results_table/log_rate_analysis_results_table_groups.tsx @@ -9,7 +9,7 @@ import type { FC } from 'react'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { orderBy, isEqual } from 'lodash'; -import type { EuiBasicTableColumn, EuiTableSortingType } from '@elastic/eui'; +import type { EuiBasicTableColumn, EuiTableSortingType, Criteria } from '@elastic/eui'; import { useEuiBackgroundColor, EuiBadge, @@ -77,7 +77,7 @@ export const LogRateAnalysisResultsGroupsTable: FC( + const [sortField, setSortField] = useState( zeroDocsFallback ? DEFAULT_SORT_FIELD_ZERO_DOCS_FALLBACK : DEFAULT_SORT_FIELD ); const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>( @@ -247,7 +247,7 @@ export const LogRateAnalysisResultsGroupsTable: FC { + const onChange = useCallback((tableSettings: Criteria) => { if (tableSettings.page) { const { index, size } = tableSettings.page; setPageIndex(index); diff --git a/x-pack/plugins/aiops/public/hooks/use_cancellable_search.ts b/x-pack/plugins/aiops/public/hooks/use_cancellable_search.ts index 4d721d64c987f..77373a7d490e9 100644 --- a/x-pack/plugins/aiops/public/hooks/use_cancellable_search.ts +++ b/x-pack/plugins/aiops/public/hooks/use_cancellable_search.ts @@ -6,7 +6,7 @@ */ import { useCallback, useRef, useState } from 'react'; -import type { IKibanaSearchResponse } from '@kbn/search-types'; +import type { IKibanaSearchRequest, IKibanaSearchResponse } from '@kbn/search-types'; import { isRunningResponse } from '@kbn/data-plugin/common'; import { tap } from 'rxjs'; import { useAiopsAppContext } from './use_aiops_app_context'; @@ -17,12 +17,11 @@ export function useCancellableSearch() { const [isLoading, setIsFetching] = useState(false); const runRequest = useCallback( - ( + ( requestBody: RequestBody ): Promise => { return new Promise((resolve, reject) => { data.search - // @ts-expect-error upgrade typescript v4.9.5 .search(requestBody, { abortSignal: abortController.current.signal, }) diff --git a/x-pack/plugins/data_visualizer/public/application/data_drift/use_data_drift_result.ts b/x-pack/plugins/data_visualizer/public/application/data_drift/use_data_drift_result.ts index 158b3477b5cb1..e8d2a48f56d08 100644 --- a/x-pack/plugins/data_visualizer/public/application/data_drift/use_data_drift_result.ts +++ b/x-pack/plugins/data_visualizer/public/application/data_drift/use_data_drift_result.ts @@ -506,9 +506,7 @@ const fetchComparisonDriftedData = async ({ ); fieldsWithNoOverlap.forEach((field) => { - // @ts-expect-error upgrade typescript v4.9.5 - if (driftedResp.aggregations) { - // @ts-expect-error upgrade typescript v4.9.5 + if (driftedResp?.aggregations) { driftedResp.aggregations[`${field}_ks_test`] = { // Setting -Infinity to represent astronomically small number // which would be represented as < 0.000001 in table diff --git a/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/ml_anomaly_alert_trigger.tsx b/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/ml_anomaly_alert_trigger.tsx index 3d70b4bbdc16d..445df758f4c9d 100644 --- a/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/ml_anomaly_alert_trigger.tsx +++ b/x-pack/plugins/ml/public/alerting/anomaly_detection_rule/ml_anomaly_alert_trigger.tsx @@ -226,7 +226,7 @@ const MlAnomalyAlertTrigger: FC = ({ { + onChange={useCallback((update: Partial) => { Object.keys(update).forEach((k) => { setRuleParams(k, update[k as keyof MlAnomalyDetectionAlertAdvancedSettings]); }); diff --git a/x-pack/plugins/ml/public/alerting/job_selector.tsx b/x-pack/plugins/ml/public/alerting/job_selector.tsx index 68bc75e2de2b5..0bee10c0c6a81 100644 --- a/x-pack/plugins/ml/public/alerting/job_selector.tsx +++ b/x-pack/plugins/ml/public/alerting/job_selector.tsx @@ -18,7 +18,7 @@ import type { MlApi } from '../application/services/ml_api_service'; import { ALL_JOBS_SELECTION } from '../../common/constants/alerts'; import { LoadingIndicator } from '../application/components/loading_indicator'; -interface JobSelection { +export interface JobSelection { jobIds?: JobId[]; groupIds?: string[]; } diff --git a/x-pack/plugins/ml/public/alerting/jobs_health_rule/anomaly_detection_jobs_health_rule_trigger.tsx b/x-pack/plugins/ml/public/alerting/jobs_health_rule/anomaly_detection_jobs_health_rule_trigger.tsx index 2b51db2859714..c798cf3911f48 100644 --- a/x-pack/plugins/ml/public/alerting/jobs_health_rule/anomaly_detection_jobs_health_rule_trigger.tsx +++ b/x-pack/plugins/ml/public/alerting/jobs_health_rule/anomaly_detection_jobs_health_rule_trigger.tsx @@ -16,7 +16,7 @@ import type { RuleTypeParamsExpressionProps } from '@kbn/triggers-actions-ui-plu import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { isDefined } from '@kbn/ml-is-defined'; import type { MlAnomalyDetectionJobsHealthRuleParams } from '../../../common/types/alerts'; -import { JobSelectorControl } from '../job_selector'; +import { JobSelectorControl, type JobSelection } from '../job_selector'; import { jobsApiProvider } from '../../application/services/ml_api_service/jobs'; import { HttpService } from '../../application/services/http_service'; import { useMlKibana } from '../../application/contexts/kibana'; @@ -129,7 +129,7 @@ const AnomalyDetectionJobsHealthRuleTrigger: FC = ({ { + onChange={useCallback((update: JobSelection) => { const callback = onAlertParamChange('excludeJobs'); if (isPopulatedObject(update)) { callback(update); diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/feature_importance/decision_path_chart.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/feature_importance/decision_path_chart.tsx index 2805563eeb7fd..b2532b225db2b 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/feature_importance/decision_path_chart.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_exploration/components/feature_importance/decision_path_chart.tsx @@ -122,7 +122,7 @@ export const DecisionPathChart = ({ ); // if regression, guarantee up to num_precision significant digits without having it in scientific notation // if classification, hide the numeric values since we only want to show the path - const tickFormatter = useCallback((d: any) => formatSingleValue(d, '').toString(), []); + const tickFormatter = useCallback((d: number) => formatSingleValue(d, '').toString(), []); return (
    diff --git a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx index 8f192f3919e16..a63f0851a87bf 100644 --- a/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx +++ b/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_management/components/analytics_list/analytics_list.tsx @@ -100,7 +100,7 @@ export const DataFrameAnalyticsList: FC = ({ const searchQueryText = pageState.queryText ?? ''; const setSearchQueryText = useCallback( - (value: any) => { + (value: string) => { updatePageState({ queryText: value }); }, [updatePageState] diff --git a/x-pack/plugins/ml/public/application/explorer/actions/load_explorer_data.ts b/x-pack/plugins/ml/public/application/explorer/actions/load_explorer_data.ts index 41a3da0586e02..19bf333e0d2bd 100644 --- a/x-pack/plugins/ml/public/application/explorer/actions/load_explorer_data.ts +++ b/x-pack/plugins/ml/public/application/explorer/actions/load_explorer_data.ts @@ -236,7 +236,7 @@ export const useExplorerData = (): [Partial | undefined, (d: any) const explorerData$ = useMemo(() => loadExplorerData$.pipe(switchMap(loadExplorerData)), []); const explorerData = useObservable(explorerData$); - const update = useCallback((c: any) => { + const update = useCallback((c: LoadExplorerDataConfig) => { loadExplorerData$.next(c); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); diff --git a/x-pack/plugins/ml/public/application/explorer/anomaly_timeline.tsx b/x-pack/plugins/ml/public/application/explorer/anomaly_timeline.tsx index ae12b8b1fa4ac..b64afb345f5bc 100644 --- a/x-pack/plugins/ml/public/application/explorer/anomaly_timeline.tsx +++ b/x-pack/plugins/ml/public/application/explorer/anomaly_timeline.tsx @@ -465,7 +465,7 @@ export const AnomalyTimeline: FC = React.memo( { + onChange={useCallback((update: number | undefined) => { setSeverityUpdate(update); }, [])} /> diff --git a/x-pack/plugins/ml/public/application/explorer/explorer.tsx b/x-pack/plugins/ml/public/application/explorer/explorer.tsx index ab503c11d7955..ba95fc6671bcb 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer.tsx +++ b/x-pack/plugins/ml/public/application/explorer/explorer.tsx @@ -232,7 +232,7 @@ export const Explorer: FC = ({ ); const onPanelWidthChange = useCallback( - (newSizes: any) => { + (newSizes: { [key: string]: number }) => { setAnomalyExplorerPanelState({ mainPage: { size: newSizes.mainPage, diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_range_form.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_range_form.tsx index ec4520ef87fd7..1304ca1c6e131 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_range_form.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_range_form.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useCallback } from 'react'; +import React, { useCallback, type ComponentProps } from 'react'; import { EuiFieldNumber, EuiFormRow, @@ -18,6 +18,12 @@ import { FormattedMessage } from '@kbn/i18n-react'; import type { FilterAggConfigRange } from '../types'; const BUTTON_SIZE = 40; + +// The config prop of the component, to be used for the `updateConfig` function. +type FilterRangeFormConfig = ComponentProps< + Exclude +>['config']; + /** * Form component for the range filter aggregation for number type fields. */ @@ -31,7 +37,7 @@ export const FilterRangeForm: FilterAggConfigRange['aggTypeConfig']['FilterAggFo const includeTo = config?.includeTo ?? false; const updateConfig = useCallback( - (update: any) => { + (update: FilterRangeFormConfig) => { onChange({ config: { ...config, diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_term_form.tsx b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_term_form.tsx index 2e52eb67ac49a..04793ee426cca 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_term_form.tsx +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/common/filter_agg/components/filter_term_form.tsx @@ -6,7 +6,14 @@ */ import { debounce } from 'lodash'; -import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react'; +import React, { + useCallback, + useContext, + useEffect, + useMemo, + useState, + type ComponentProps, +} from 'react'; import useUpdateEffect from 'react-use/lib/useUpdateEffect'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; @@ -24,6 +31,11 @@ import { useToastNotifications } from '../../../../../../../app_dependencies'; import type { FilterAggConfigTerm } from '../types'; +// The config prop of the component, to be used for the `updateConfig` function. +type FilterRangeFormConfig = ComponentProps< + Exclude +>['config']; + /** * Form component for the term filter aggregation. */ @@ -51,7 +63,7 @@ export const FilterTermForm: FilterAggConfigTerm['aggTypeConfig']['FilterAggForm }, []); const updateConfig = useCallback( - (update: any) => { + (update: FilterRangeFormConfig) => { onChange({ config: { ...config, diff --git a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/hooks/use_latest_function_config.ts b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/hooks/use_latest_function_config.ts index f0530ee9afa70..1fb865055c0d4 100644 --- a/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/hooks/use_latest_function_config.ts +++ b/x-pack/plugins/transform/public/app/sections/create_transform/components/step_define/hooks/use_latest_function_config.ts @@ -161,7 +161,7 @@ export function useLatestFunctionConfig( }, [dataView, data.search.aggs, runtimeMappings]); const updateLatestFunctionConfig = useCallback( - (update: any) => + (update: Partial) => setLatestFunctionConfig({ ...config, ...update, From 574b49fd9a76869896d688862bf0107a053be071 Mon Sep 17 00:00:00 2001 From: Sergi Massaneda Date: Thu, 5 Dec 2024 17:29:51 +0100 Subject: [PATCH 099/141] [SecuritySolution][Onboarding] Siem migration start card and flyout - Part 1 (#202886) ## Summary Part of: https://github.com/elastic/security-team/issues/10667 Implementation of the Onboarding card to create migrations using the flyout > [!NOTE] > This feature needs `siemMigrationsEnabled` experimental flag enabled to work. Otherwise only the default topic will be available and the topic selector won't be displayed. image #### To do in part 2: - Complete implementation of migration finished panel: chart and stats - Improve implementation of migration ready panel: should only allow open the flyout - Implement missing steps in the flyout: Macros and Lookups ### Test Enable experimental flag Use file: [1733135547_1420.json](https://github.com/user-attachments/files/18010116/1733135547_1420.json) --------- Co-authored-by: Elastic Machine Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../common/api/quickstart_client.gen.ts | 4 +- .../common/siem_migrations/constants.ts | 2 + .../model/api/rules/rule_migration.gen.ts | 13 +- .../api/rules/rule_migration.schema.yaml | 211 +++++++++-------- .../siem_migrations/model/common.gen.ts | 9 - .../siem_migrations/model/common.schema.yaml | 5 - .../model/rule_migration.gen.ts | 23 +- .../model/rule_migration.schema.yaml | 42 ++-- .../components/onboarding_body/body_config.ts | 7 + .../cards/common/card_content_panel.tsx | 2 +- .../ai_connector/ai_connector_card.tsx | 23 +- .../ai_connector/connectors_check_complete.ts | 2 +- .../siem_migrations/ai_connector/index.ts | 6 +- .../start_migration/context.tsx | 35 +++ .../images/card_header_icon.png | Bin 0 -> 1251 bytes .../siem_migrations/start_migration/index.ts | 28 +++ .../missing_ai_connector_callout.tsx | 38 +++ .../panels/migration_progress_panel.tsx | 45 ++++ .../panels/migration_ready_panel.tsx | 68 ++++++ .../panels/migration_result_panel.tsx | 87 +++++++ .../panels/upload_rules_panel.styles.ts | 19 ++ .../panels/upload_rules_panel.tsx | 80 +++++++ .../start_migration_card.styles.ts | 20 ++ .../start_migration/start_migration_card.tsx | 79 +++++++ .../start_migration_check_complete.ts | 16 ++ .../start_migration/translations.ts | 118 ++++++++++ .../start_migration/upload_rules_panels.tsx | 46 ++++ .../public/onboarding/constants.ts | 1 + .../siem_migrations/common/icon/index.tsx | 8 + .../common/icon/siem_migrations.svg | 28 +++ .../public/siem_migrations/rules/api/index.ts | 219 ++++++++++-------- .../components/data_input_flyout/constants.ts | 26 +++ .../data_input_flyout/data_input_flyout.tsx | 112 +++++++++ .../components/data_input_flyout/index.ts | 8 + .../steps/common/sub_step_wrapper.tsx | 26 +++ .../steps/rules/rules_data_input.tsx | 95 ++++++++ .../rules/sub_steps/check_resources/index.tsx | 30 +++ .../sub_steps/check_resources/translations.ts | 20 ++ .../copy_export_query/copy_export_query.tsx | 53 +++++ .../sub_steps/copy_export_query/index.tsx | 26 +++ .../copy_export_query/translations.ts | 18 ++ .../sub_steps/rules_file_upload/index.tsx | 58 +++++ .../rules_file_upload/parse_rules_file.ts | 79 +++++++ .../rules_file_upload/rules_file_upload.tsx | 122 ++++++++++ .../rules_file_upload/translations.ts | 70 ++++++ .../steps/rules/translations.ts | 13 ++ .../components/data_input_flyout/types.ts | 10 + .../rules/components/header_buttons/index.tsx | 4 +- .../siem_migrations/rules/pages/index.tsx | 2 +- .../hooks/common/api_request_reducer.ts | 26 +++ .../rules/service/hooks/translations.ts | 17 ++ .../service/hooks/use_create_migration.ts | 55 +++++ .../{ => service}/hooks/use_latest_stats.ts | 2 +- .../service/hooks/use_start_migration.ts | 52 +++++ .../rules/service/rule_migrations_service.ts | 145 +++++++++--- .../siem_migrations/rules/service/storage.ts | 30 ++- .../rules/service/success_notification.tsx | 6 +- .../rules/service/translations.ts | 23 ++ .../public/siem_migrations/rules/types.ts | 4 +- .../lib/siem_migrations/rules/api/create.ts | 13 +- .../lib/siem_migrations/rules/api/get.ts | 20 +- .../rules/api/util/installation.ts | 6 +- .../data/rule_migrations_data_rules_client.ts | 108 ++++----- .../rules/data/rule_migrations_field_maps.ts | 3 +- .../match_prebuilt_rule.ts | 2 +- .../services/security_solution_api.gen.ts | 13 +- 66 files changed, 2194 insertions(+), 387 deletions(-) create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/context.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/images/card_header_icon.png create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/index.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/missing_ai_connector_callout.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_progress_panel.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_ready_panel.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_result_panel.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/upload_rules_panel.styles.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/upload_rules_panel.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.styles.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.tsx create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_check_complete.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/translations.ts create mode 100644 x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/upload_rules_panels.tsx create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/common/icon/index.tsx create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/common/icon/siem_migrations.svg create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/constants.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/data_input_flyout.tsx create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/index.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/common/sub_step_wrapper.tsx create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/rules_data_input.tsx create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/check_resources/index.tsx create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/check_resources/translations.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/copy_export_query.tsx create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/index.tsx create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/translations.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/index.tsx create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/parse_rules_file.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/rules_file_upload.tsx create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/translations.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/translations.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/types.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/common/api_request_reducer.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/translations.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/use_create_migration.ts rename x-pack/plugins/security_solution/public/siem_migrations/rules/{ => service}/hooks/use_latest_stats.ts (91%) create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/use_start_migration.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/service/translations.ts diff --git a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts index 994fb70deaa25..0ef67f164409b 100644 --- a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts +++ b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts @@ -356,6 +356,7 @@ import type { ResolveTimelineResponse, } from './timeline/resolve_timeline/resolve_timeline_route.gen'; import type { + CreateRuleMigrationRequestParamsInput, CreateRuleMigrationRequestBodyInput, CreateRuleMigrationResponse, GetAllStatsRuleMigrationResponse, @@ -686,7 +687,7 @@ If a record already exists for the specified entity, that record is overwritten this.log.info(`${new Date().toISOString()} Calling API CreateRuleMigration`); return this.kbnClient .request({ - path: '/internal/siem_migrations/rules', + path: replaceParams('/internal/siem_migrations/rules/{migration_id}', props.params), headers: { [ELASTIC_HTTP_VERSION_HEADER]: '1', }, @@ -2267,6 +2268,7 @@ export interface CreateRuleProps { body: CreateRuleRequestBodyInput; } export interface CreateRuleMigrationProps { + params: CreateRuleMigrationRequestParamsInput; body: CreateRuleMigrationRequestBodyInput; } export interface CreateTimelinesProps { diff --git a/x-pack/plugins/security_solution/common/siem_migrations/constants.ts b/x-pack/plugins/security_solution/common/siem_migrations/constants.ts index 789947150a67e..e04130e7f44d7 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/constants.ts +++ b/x-pack/plugins/security_solution/common/siem_migrations/constants.ts @@ -11,6 +11,8 @@ export const SIEM_MIGRATIONS_PATH = '/internal/siem_migrations' as const; export const SIEM_RULE_MIGRATIONS_PATH = `${SIEM_MIGRATIONS_PATH}/rules` as const; export const SIEM_RULE_MIGRATIONS_ALL_STATS_PATH = `${SIEM_RULE_MIGRATIONS_PATH}/stats` as const; +export const SIEM_RULE_MIGRATION_CREATE_PATH = + `${SIEM_RULE_MIGRATIONS_PATH}/{migration_id?}` as const; export const SIEM_RULE_MIGRATION_PATH = `${SIEM_RULE_MIGRATIONS_PATH}/{migration_id}` as const; export const SIEM_RULE_MIGRATION_START_PATH = `${SIEM_RULE_MIGRATION_PATH}/start` as const; export const SIEM_RULE_MIGRATION_RETRY_PATH = `${SIEM_RULE_MIGRATION_PATH}/retry` as const; diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts index aa69f3b3c27f0..8a549e8e11817 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts @@ -17,19 +17,28 @@ import { z } from '@kbn/zod'; import { ArrayFromString } from '@kbn/zod-helpers'; +import { NonEmptyString } from '../../../../api/model/primitives.gen'; import { - OriginalRule, ElasticRulePartial, RuleMigrationTranslationResult, RuleMigrationComments, RuleMigrationTaskStats, + OriginalRule, RuleMigration, RuleMigrationTranslationStats, RuleMigrationResourceData, RuleMigrationResourceType, RuleMigrationResource, } from '../../rule_migration.gen'; -import { NonEmptyString, ConnectorId, LangSmithOptions } from '../../common.gen'; +import { ConnectorId, LangSmithOptions } from '../../common.gen'; + +export type CreateRuleMigrationRequestParams = z.infer; +export const CreateRuleMigrationRequestParams = z.object({ + migration_id: NonEmptyString.optional(), +}); +export type CreateRuleMigrationRequestParamsInput = z.input< + typeof CreateRuleMigrationRequestParams +>; export type CreateRuleMigrationRequestBody = z.infer; export const CreateRuleMigrationRequestBody = z.array(OriginalRule); diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml index a062b75d41699..8b9d264cf4104 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml @@ -4,38 +4,7 @@ info: version: '1' paths: # Rule migrations APIs - /internal/siem_migrations/rules: - post: - summary: Creates a new rule migration - operationId: CreateRuleMigration - x-codegen-enabled: true - x-internal: true - description: Creates a new SIEM rules migration using the original vendor rules provided - tags: - - SIEM Rule Migrations - requestBody: - required: true - content: - application/json: - schema: - type: array - items: - $ref: '../../rule_migration.schema.yaml#/components/schemas/OriginalRule' - responses: - 200: - description: Indicates migration have been created correctly. - content: - application/json: - schema: - type: object - required: - - migration_id - properties: - migration_id: - description: The migration id created. - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' - put: summary: Updates rules migrations operationId: UpdateRuleMigration @@ -57,7 +26,7 @@ paths: properties: id: description: The rule migration id - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' elastic_rule: description: The migrated elastic rule attributes to update. $ref: '../../rule_migration.schema.yaml#/components/schemas/ElasticRulePartial' @@ -81,95 +50,64 @@ paths: type: boolean description: Indicates rules migrations have been updated. - /internal/siem_migrations/rules/{migration_id}/install: - post: - summary: Installs translated migration rules - operationId: InstallMigrationRules + /internal/siem_migrations/rules/stats: + get: + summary: Retrieves the stats for all rule migrations + operationId: GetAllStatsRuleMigration x-codegen-enabled: true - description: Installs migration rules + x-internal: true + description: Retrieves the rule migrations stats for all migrations stored in the system tags: - SIEM Rule Migrations - parameters: - - name: migration_id - in: path - required: true - schema: - description: The migration id to isnstall rules for - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' - requestBody: - required: true - content: - application/json: - schema: - type: array - items: - description: The rule migration id - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' responses: 200: - description: Indicates rules migrations have been installed correctly. + description: Indicates rule migrations have been retrieved correctly. content: application/json: schema: - type: object - required: - - installed - properties: - installed: - type: boolean - description: Indicates rules migrations have been installed. + type: array + items: + $ref: '../../rule_migration.schema.yaml#/components/schemas/RuleMigrationTaskStats' - /internal/siem_migrations/rules/{migration_id}/install_translated: + ## Specific rule migration APIs + + /internal/siem_migrations/rules/{migration_id}: post: - summary: Installs all translated migration rules - operationId: InstallTranslatedMigrationRules + summary: Creates a new rule migration + operationId: CreateRuleMigration x-codegen-enabled: true - description: Installs all translated migration rules + x-internal: true + description: Creates a new SIEM rules migration using the original vendor rules provided tags: - SIEM Rule Migrations parameters: - name: migration_id in: path - required: true + required: false schema: - description: The migration id to install translated rules for - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' + description: The migration id to create rules for + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + $ref: '../../rule_migration.schema.yaml#/components/schemas/OriginalRule' responses: 200: - description: Indicates rules migrations have been installed correctly. + description: Indicates migration have been created correctly. content: application/json: schema: type: object required: - - installed + - migration_id properties: - installed: - type: boolean - description: Indicates rules migrations have been installed. - - /internal/siem_migrations/rules/stats: - get: - summary: Retrieves the stats for all rule migrations - operationId: GetAllStatsRuleMigration - x-codegen-enabled: true - x-internal: true - description: Retrieves the rule migrations stats for all migrations stored in the system - tags: - - SIEM Rule Migrations - responses: - 200: - description: Indicates rule migrations have been retrieved correctly. - content: - application/json: - schema: - type: array - items: - $ref: '../../rule_migration.schema.yaml#/components/schemas/RuleMigrationTaskStats' - - ## Specific rule migration APIs - - /internal/siem_migrations/rules/{migration_id}: + migration_id: + description: The migration id created. + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' get: summary: Retrieves all the rules of a migration operationId: GetRuleMigration @@ -184,7 +122,7 @@ paths: required: true schema: description: The migration id to start - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' - name: page in: query required: false @@ -222,6 +160,73 @@ paths: 204: description: Indicates the migration id was not found. + /internal/siem_migrations/rules/{migration_id}/install: + post: + summary: Installs translated migration rules + operationId: InstallMigrationRules + x-codegen-enabled: true + description: Installs migration rules + tags: + - SIEM Rule Migrations + parameters: + - name: migration_id + in: path + required: true + schema: + description: The migration id to install rules for + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' + requestBody: + required: true + content: + application/json: + schema: + type: array + items: + description: The rule migration id + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' + responses: + 200: + description: Indicates rules migrations have been installed correctly. + content: + application/json: + schema: + type: object + required: + - installed + properties: + installed: + type: boolean + description: Indicates rules migrations have been installed. + + /internal/siem_migrations/rules/{migration_id}/install_translated: + post: + summary: Installs all translated migration rules + operationId: InstallTranslatedMigrationRules + x-codegen-enabled: true + description: Installs all translated migration rules + tags: + - SIEM Rule Migrations + parameters: + - name: migration_id + in: path + required: true + schema: + description: The migration id to install translated rules for + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' + responses: + 200: + description: Indicates rules migrations have been installed correctly. + content: + application/json: + schema: + type: object + required: + - installed + properties: + installed: + type: boolean + description: Indicates rules migrations have been installed. + /internal/siem_migrations/rules/{migration_id}/start: put: summary: Starts a rule migration @@ -237,7 +242,7 @@ paths: required: true schema: description: The migration id to start - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' requestBody: required: true content: @@ -282,7 +287,7 @@ paths: required: true schema: description: The migration id to fetch stats for - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' responses: 200: description: Indicates the migration stats has been retrieved correctly. @@ -307,7 +312,7 @@ paths: required: true schema: description: The migration id to fetch translation stats for - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' responses: 200: description: Indicates the migration stats has been retrieved correctly. @@ -333,7 +338,7 @@ paths: required: true schema: description: The migration id to stop - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' responses: 200: description: Indicates migration task stop has been processed successfully. @@ -368,7 +373,7 @@ paths: required: true schema: description: The migration id to attach the resources - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' requestBody: required: true content: @@ -406,7 +411,7 @@ paths: required: true schema: description: The migration id to attach the resources - $ref: '../../common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' - name: type in: query required: false diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/common.gen.ts b/x-pack/plugins/security_solution/common/siem_migrations/model/common.gen.ts index 9b1d0756c3a3b..c6d0959cc10cf 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/common.gen.ts +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/common.gen.ts @@ -16,15 +16,6 @@ import { z } from '@kbn/zod'; -/** - * A string that is not empty and does not contain only whitespace - */ -export type NonEmptyString = z.infer; -export const NonEmptyString = z - .string() - .min(1) - .regex(/^(?! *$).+$/); - /** * The GenAI connector id to use. */ diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/common.schema.yaml b/x-pack/plugins/security_solution/common/siem_migrations/model/common.schema.yaml index a50225df778ad..14a5160427f8a 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/common.schema.yaml +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/common.schema.yaml @@ -6,11 +6,6 @@ paths: {} components: x-codegen-enabled: true schemas: - NonEmptyString: - type: string - pattern: ^(?! *$).+$ - minLength: 1 - description: A string that is not empty and does not contain only whitespace ConnectorId: type: string description: The GenAI connector id to use. diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts index 61706077d9549..b52cdb1c91f19 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts @@ -16,7 +16,7 @@ import { z } from '@kbn/zod'; -import { NonEmptyString } from './common.gen'; +import { NonEmptyString } from '../../api/model/primitives.gen'; /** * The original rule vendor identifier. @@ -24,6 +24,19 @@ import { NonEmptyString } from './common.gen'; export type OriginalRuleVendor = z.infer; export const OriginalRuleVendor = z.literal('splunk'); +/** + * The original rule annotations containing additional information. + */ +export type OriginalRuleAnnotations = z.infer; +export const OriginalRuleAnnotations = z + .object({ + /** + * The original rule Mitre Attack IDs. + */ + mitre_attack: z.array(z.string()).optional(), + }) + .catchall(z.unknown()); + /** * The original rule to migrate. */ @@ -40,7 +53,7 @@ export const OriginalRule = z.object({ /** * The original rule name. */ - title: z.string(), + title: NonEmptyString, /** * The original rule description. */ @@ -48,15 +61,15 @@ export const OriginalRule = z.object({ /** * The original rule query. */ - query: z.string(), + query: z.string().min(1), /** * The original rule query language. */ query_language: z.string(), /** - * The original rule Mitre Attack technique IDs. + * The original rule annotations containing additional information. */ - mitre_attack_ids: z.array(z.string()).optional(), + annotations: OriginalRuleAnnotations.optional(), }); /** diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml index fdcbb7b04515a..4c88c66fc604d 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml @@ -12,6 +12,17 @@ components: enum: - splunk + OriginalRuleAnnotations: + type: object + description: The original rule annotations containing additional information. + additionalProperties: true + properties: + mitre_attack: + type: array + description: The original rule Mitre Attack IDs. + items: + type: string + OriginalRule: type: object description: The original rule to migrate. @@ -25,27 +36,26 @@ components: properties: id: description: The original rule id. - $ref: './common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' vendor: description: The original rule vendor identifier. $ref: '#/components/schemas/OriginalRuleVendor' title: - type: string description: The original rule name. + $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' description: type: string description: The original rule description. query: type: string + minLength: 1 description: The original rule query. query_language: type: string description: The original rule query language. - mitre_attack_ids: - type: array - items: - type: string - description: The original rule Mitre Attack technique IDs. + annotations: + description: The original rule annotations containing additional information. + $ref: '#/components/schemas/OriginalRuleAnnotations' ElasticRule: type: object @@ -72,7 +82,7 @@ components: - esql prebuilt_rule_id: description: The Elastic prebuilt rule id matched. - $ref: './common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' integration_ids: type: array items: @@ -80,7 +90,7 @@ components: description: The Elastic integration IDs related to the rule. id: description: The Elastic rule id installed as a result. - $ref: './common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' ElasticRulePartial: description: The partial version of the migrated elastic rule. @@ -96,7 +106,7 @@ components: properties: id: description: The rule migration id - $ref: './common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' - $ref: '#/components/schemas/RuleMigrationData' RuleMigrationData: @@ -114,10 +124,10 @@ components: description: The moment of creation migration_id: description: The migration id. - $ref: './common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' created_by: description: The username of the user who created the migration. - $ref: './common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' original_rule: description: The original rule to migrate. $ref: '#/components/schemas/OriginalRule' @@ -153,7 +163,7 @@ components: properties: id: description: The migration id - $ref: './common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' status: description: Indicates if the migration task status. $ref: '#/components/schemas/RuleMigrationTaskStatus' @@ -207,7 +217,7 @@ components: properties: id: description: The migration id - $ref: './common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' rules: type: object description: The rules migration translation stats. @@ -293,10 +303,10 @@ components: properties: id: description: The rule resource migration id - $ref: './common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' migration_id: description: The migration id - $ref: './common.schema.yaml#/components/schemas/NonEmptyString' + $ref: '../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' updated_at: type: string description: The moment of the last update diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts index 93690f98b48e8..59d11314171a6 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts @@ -13,6 +13,7 @@ import { rulesCardConfig } from './cards/rules'; import { alertsCardConfig } from './cards/alerts'; import { assistantCardConfig } from './cards/assistant'; import { aiConnectorCardConfig } from './cards/siem_migrations/ai_connector'; +import { startMigrationCardConfig } from './cards/siem_migrations/start_migration'; export const defaultBodyConfig: OnboardingGroupConfig[] = [ { @@ -43,4 +44,10 @@ export const siemMigrationsBodyConfig: OnboardingGroupConfig[] = [ }), cards: [aiConnectorCardConfig], }, + { + title: i18n.translate('xpack.securitySolution.onboarding.migrate.title', { + defaultMessage: 'Migrate rules & add data', + }), + cards: [startMigrationCardConfig], + }, ]; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx index be1b01fc77081..7f3ba00593fc0 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_content_panel.tsx @@ -17,7 +17,7 @@ export const OnboardingCardContentPanel = React.memo - + {children} diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/ai_connector_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/ai_connector_card.tsx index 127e6b4d57ebd..e42834e85d488 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/ai_connector_card.tsx +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/ai_connector_card.tsx @@ -6,19 +6,14 @@ */ import React, { useCallback } from 'react'; -import { - EuiFlexGroup, - EuiFlexItem, - EuiText, - useEuiTheme, - COLOR_MODES_STANDARD, -} from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { useKibana } from '../../../../../../common/lib/kibana/kibana_react'; import { useDefinedLocalStorage } from '../../../../hooks/use_stored_state'; import type { OnboardingCardComponent } from '../../../../../types'; import * as i18n from './translations'; import { OnboardingCardContentPanel } from '../../common/card_content_panel'; import { ConnectorCards } from '../../common/connectors/connector_cards'; +import { CardSubduedText } from '../../common/card_subdued_text'; import type { AIConnectorCardMetadata } from './types'; import { MissingPrivilegesCallOut } from '../../common/connectors/missing_privileges'; @@ -28,9 +23,6 @@ export const AIConnectorCard: OnboardingCardComponent = setComplete, }) => { const { siemMigrations } = useKibana().services; - const { euiTheme, colorMode } = useEuiTheme(); - const isDarkMode = colorMode === COLOR_MODES_STANDARD.dark; - const [storedConnectorId, setStoredConnectorId] = useDefinedLocalStorage( siemMigrations.rules.connectorIdStorage.key, null @@ -48,18 +40,11 @@ export const AIConnectorCard: OnboardingCardComponent = const canCreateConnectors = checkCompleteMetadata?.canCreateConnectors; return ( - + {canExecuteConnectors ? ( - - {i18n.AI_CONNECTOR_CARD_DESCRIPTION} - + {i18n.AI_CONNECTOR_CARD_DESCRIPTION} = async ({ http, application, siemMigrations }) => { let isComplete = false; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/index.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/index.ts index 45080123889d5..d0b32eb1bd638 100644 --- a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/index.ts +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/index.ts @@ -6,11 +6,11 @@ */ import React from 'react'; -import { AssistantAvatar } from '@kbn/elastic-assistant'; +import { AssistantAvatar } from '@kbn/elastic-assistant/impl/assistant/assistant_avatar/assistant_avatar'; import type { OnboardingCardConfig } from '../../../../../types'; import { OnboardingCardId } from '../../../../../constants'; import { AI_CONNECTOR_CARD_TITLE } from './translations'; -import { checkAssistantCardComplete } from './connectors_check_complete'; +import { checkAiConnectorsCardComplete } from './connectors_check_complete'; import type { AIConnectorCardMetadata } from './types'; export const aiConnectorCardConfig: OnboardingCardConfig = { @@ -24,6 +24,6 @@ export const aiConnectorCardConfig: OnboardingCardConfig void; + closeFlyout: () => void; +} + +const StartMigrationContext = createContext(null); + +export const StartMigrationContextProvider: React.FC< + PropsWithChildren +> = React.memo(({ children, openFlyout, closeFlyout }) => { + const value = useMemo( + () => ({ openFlyout, closeFlyout }), + [openFlyout, closeFlyout] + ); + return {children}; +}); +StartMigrationContextProvider.displayName = 'StartMigrationContextProvider'; + +export const useStartMigrationContext = (): StartMigrationContextValue => { + const context = useContext(StartMigrationContext); + if (context == null) { + throw new Error('useStartMigrationContext must be used within a StartMigrationContextProvider'); + } + return context; +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/images/card_header_icon.png b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/images/card_header_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b2b4848e0be1d7442fb00b012629861feec095cf GIT binary patch literal 1251 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9EO-XP4l)OOlRpde#$ zkh>GZx^prwfgF}}M_)$E)e-c@N+zL+@$B+ufw{znCq8vqzo#)w-S+mJ{f%OH^ z4(<$~ke$5vK{HX@K3 zuds_=_^he=`P&X13%_5lvov&9;ClI(!z~7aOi!+v8*47*W6awW_+8Wg-QC9R+b8`G zsa8DlPKCpzqaOTzH zfz@{{UpR#^e15{sm?|M?%>LA$$&>NSEdB>m6&1gzC#K(>KUq$N)uZuNXGGbpUn}p4 zI_b@F&i||&oE7K(v--%C&E@~p{P>HQe)#VXYJCt`_}A&g&&yR?YohEkzOJ7qQ@h({ zbvU=I;{6%bP4TNYsr9lZO%PVl-4k#;9Ov{ zQN%_mtMF5ma#P%*Z_Llbk{CN23-|+y9m7+#w(@VBxOT!$V+WqD*#!@*YKy)+6-xT_ z{oe#RVflH1qfjB{*sQ&DVx_|3)i-%-8IqeM zFIfe!t}l*{I4QonUh{m3t>UBqzPFw=uyHsU@qS$$*>Hp@?b)I#E4OWY7Pjlce69<- z9XXTujA_vXy(2!?gYEa;Hi-Fm&uqPEF+<{s@I%jDUd?^>|LgDh3qJpyc7L1NpC{jE za)i4q-d!hNGAr`i?W+ z5g0&;j0n{E$Eb6kwB?zFYD>2FK61OBl`6q)L zJ^e3aQ{q|gr{6j8ue@g4l?%8%}rcAO}inZM(Q}a&?ZuIq+ob9#I*!EaC zwpf|J@9vKozBe?@KM6$i@&jEvaox^|?8k~~mSpEWY1}9y|8kaeWkAkx_g&B2n)7Iojc`SCjMhJ!QCGXvf9opt9EH#xT1 zA3t6Wn11KP;RItl{?Z2RyeEkpMdz!x&fv~_61YKde)`l8TXs)$SAF@z<#tesl + import( + /* webpackChunkName: "onboarding_siem_migrations_start_migration_card" */ + './start_migration_card' + ) + ), + checkComplete: checkStartMigrationCardComplete, + licenseTypeRequired: 'enterprise', +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/missing_ai_connector_callout.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/missing_ai_connector_callout.tsx new file mode 100644 index 0000000000000..324dd405d5141 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/missing_ai_connector_callout.tsx @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink } from '@elastic/eui'; +import { OnboardingCardContentPanel } from '../../common/card_content_panel'; +import { CardCallOut } from '../../common/card_callout'; +import * as i18n from './translations'; + +interface MissingAIConnectorCalloutProps { + onExpandAiConnectorsCard: () => void; +} + +export const MissingAIConnectorCallout = React.memo( + ({ onExpandAiConnectorsCard }) => ( + + + + {i18n.START_MIGRATION_CARD_CONNECTOR_MISSING_BUTTON} + + + + + + } + /> + + ) +); +MissingAIConnectorCallout.displayName = 'MissingAIConnectorCallout'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_progress_panel.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_progress_panel.tsx new file mode 100644 index 0000000000000..0527e1cfbdf17 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_progress_panel.tsx @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useMemo } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiText, EuiPanel, EuiProgress } from '@elastic/eui'; +import type { RuleMigrationStats } from '../../../../../../../siem_migrations/rules/types'; +import * as i18n from '../translations'; +import { TITLE_CLASS_NAME } from '../start_migration_card.styles'; + +export interface MigrationProgressPanelProps { + migrationStats: RuleMigrationStats; +} +export const MigrationProgressPanel = React.memo( + ({ migrationStats }) => { + const progressValue = useMemo(() => { + const finished = migrationStats.rules.completed + migrationStats.rules.failed; + return (finished / migrationStats.rules.total) * 100; + }, [migrationStats.rules]); + + return ( + + + + +

    {i18n.START_MIGRATION_CARD_MIGRATION_TITLE(migrationStats.number)}

    +
    +
    + + +

    {i18n.START_MIGRATION_CARD_PROGRESS_DESCRIPTION}

    +
    +
    + + + +
    +
    + ); + } +); +MigrationProgressPanel.displayName = 'MigrationProgressPanel'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_ready_panel.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_ready_panel.tsx new file mode 100644 index 0000000000000..8603511fa2d6f --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_ready_panel.tsx @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback } from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiText, + EuiButton, + EuiButtonEmpty, + EuiPanel, +} from '@elastic/eui'; +import { useStartMigration } from '../../../../../../../siem_migrations/rules/service/hooks/use_start_migration'; +import type { RuleMigrationStats } from '../../../../../../../siem_migrations/rules/types'; +import * as i18n from '../translations'; +import { useStartMigrationContext } from '../context'; +import { TITLE_CLASS_NAME } from '../start_migration_card.styles'; + +export interface MigrationReadyPanelProps { + migrationStats: RuleMigrationStats; +} +export const MigrationReadyPanel = React.memo(({ migrationStats }) => { + const { openFlyout } = useStartMigrationContext(); + const onOpenFlyout = useCallback(() => { + openFlyout(migrationStats); + }, [openFlyout, migrationStats]); + + const { startMigration, isLoading } = useStartMigration(); + const onStartMigration = useCallback(() => { + startMigration(migrationStats.id); + }, [migrationStats.id, startMigration]); + + return ( + + + + + + +

    {i18n.START_MIGRATION_CARD_MIGRATION_TITLE(migrationStats.number)}

    +
    +
    + + +

    {i18n.START_MIGRATION_CARD_MIGRATION_READY_DESCRIPTION}

    +
    +
    +
    +
    + + + {i18n.START_MIGRATION_CARD_TRANSLATE_BUTTON} + + + + + {i18n.START_MIGRATION_CARD_UPLOAD_MACROS_BUTTON} + + +
    +
    + ); +}); +MigrationReadyPanel.displayName = 'MigrationReadyPanel'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_result_panel.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_result_panel.tsx new file mode 100644 index 0000000000000..b73b3cc8b4921 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/migration_result_panel.tsx @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import moment from 'moment'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiText, + EuiPanel, + EuiHorizontalRule, + EuiIcon, +} from '@elastic/eui'; +import { SecurityPageName } from '@kbn/security-solution-navigation'; +import { AssistantAvatar } from '@kbn/elastic-assistant/impl/assistant/assistant_avatar/assistant_avatar'; +import { SecuritySolutionLinkButton } from '../../../../../../../common/components/links'; +import type { RuleMigrationStats } from '../../../../../../../siem_migrations/rules/types'; +import * as i18n from '../translations'; +import { TITLE_CLASS_NAME } from '../start_migration_card.styles'; + +export interface MigrationResultPanelProps { + migrationStats: RuleMigrationStats; +} +export const MigrationResultPanel = React.memo(({ migrationStats }) => { + return ( + + + + + +

    {i18n.START_MIGRATION_CARD_RESULT_TITLE(migrationStats.number)}

    +
    +
    + + +

    + {i18n.START_MIGRATION_CARD_RESULT_DESCRIPTION( + moment(migrationStats.created_at).format('MMMM Do YYYY, h:mm:ss a'), + moment(migrationStats.last_updated_at).fromNow() + )} +

    +
    +
    +
    +
    + + + + + + + + + + +

    {i18n.VIEW_TRANSLATED_RULES_TITLE}

    +
    +
    +
    +
    + + + + +

    {'TODO: chart'}

    +
    + + + {i18n.VIEW_TRANSLATED_RULES_BUTTON} + + +
    +
    +
    +
    +
    +
    + ); +}); +MigrationResultPanel.displayName = 'MigrationResultPanel'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/upload_rules_panel.styles.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/upload_rules_panel.styles.ts new file mode 100644 index 0000000000000..0aef40dfeb442 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/upload_rules_panel.styles.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 { css } from '@emotion/css'; + +export const useStyles = (compressed: boolean) => { + const logoSize = compressed ? '32px' : '88px'; + return css` + .siemMigrationsIcon { + width: ${logoSize}; + block-size: ${logoSize}; + inline-size: ${logoSize}; + } + `; +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/upload_rules_panel.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/upload_rules_panel.tsx new file mode 100644 index 0000000000000..edcff3646c5aa --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/panels/upload_rules_panel.tsx @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback } from 'react'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiText, + EuiIcon, + EuiButton, + EuiButtonEmpty, + EuiPanel, +} from '@elastic/eui'; +import { SiemMigrationsIcon } from '../../../../../../../siem_migrations/common/icon'; +import * as i18n from '../translations'; +import { useStartMigrationContext } from '../context'; +import { TITLE_CLASS_NAME } from '../start_migration_card.styles'; +import { useStyles } from './upload_rules_panel.styles'; + +export interface UploadRulesPanelProps { + isUploadMore?: boolean; +} +export const UploadRulesPanel = React.memo(({ isUploadMore = false }) => { + const styles = useStyles(isUploadMore); + const { openFlyout } = useStartMigrationContext(); + const onOpenFlyout = useCallback(() => { + openFlyout(); + }, [openFlyout]); + + return ( + + + + + + + {isUploadMore ? ( + +

    {i18n.START_MIGRATION_CARD_UPLOAD_MORE_TITLE}

    +
    + ) : ( + + + +

    {i18n.START_MIGRATION_CARD_UPLOAD_TITLE}

    +
    +
    + + +

    {i18n.START_MIGRATION_CARD_UPLOAD_DESCRIPTION}

    +
    +
    + + +

    {i18n.START_MIGRATION_CARD_UPLOAD_READ_MORE}

    +
    +
    +
    + )} +
    + + {isUploadMore ? ( + + {i18n.START_MIGRATION_CARD_UPLOAD_MORE_BUTTON} + + ) : ( + + {i18n.START_MIGRATION_CARD_UPLOAD_BUTTON} + + )} + +
    +
    + ); +}); +UploadRulesPanel.displayName = 'UploadRulesPanel'; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.styles.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.styles.ts new file mode 100644 index 0000000000000..82446ba308402 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.styles.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 { css } from '@emotion/css'; +import { useEuiTheme } from '@elastic/eui'; + +export const TITLE_CLASS_NAME = 'siemMigrationsStartTitle'; + +export const useStyles = () => { + const { euiTheme } = useEuiTheme(); + return css` + .${TITLE_CLASS_NAME} { + font-weight: ${euiTheme.font.weight.semiBold}; + } + `; +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.tsx new file mode 100644 index 0000000000000..c1e7539c8e101 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.tsx @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useState } from 'react'; +import { EuiSpacer, EuiText } from '@elastic/eui'; +import { OnboardingCardId } from '../../../../../constants'; +import type { RuleMigrationTaskStats } from '../../../../../../../common/siem_migrations/model/rule_migration.gen'; +import { useLatestStats } from '../../../../../../siem_migrations/rules/service/hooks/use_latest_stats'; +import { MigrationDataInputFlyout } from '../../../../../../siem_migrations/rules/components/data_input_flyout'; +import { CenteredLoadingSpinner } from '../../../../../../common/components/centered_loading_spinner'; +import type { OnboardingCardComponent } from '../../../../../types'; +import { OnboardingCardContentPanel } from '../../common/card_content_panel'; +import { UploadRulesPanels } from './upload_rules_panels'; +import { StartMigrationContextProvider } from './context'; +import { useStyles } from './start_migration_card.styles'; +import * as i18n from './translations'; +import { MissingAIConnectorCallout } from './missing_ai_connector_callout'; + +export const StartMigrationCard: OnboardingCardComponent = React.memo( + ({ checkComplete, isCardComplete, setExpandedCardId }) => { + const styles = useStyles(); + const { data: migrationsStats, isLoading } = useLatestStats(); + + const [isFlyoutOpen, setIsFlyoutOpen] = useState(); + const [flyoutMigrationStats, setFlyoutMigrationStats] = useState< + RuleMigrationTaskStats | undefined + >(); + + const closeFlyout = useCallback(() => { + setIsFlyoutOpen(false); + setFlyoutMigrationStats(undefined); + if (!isCardComplete(OnboardingCardId.siemMigrationsStart)) { + checkComplete(); + } + }, [checkComplete, isCardComplete]); + + const openFlyout = useCallback((migrationStats?: RuleMigrationTaskStats) => { + setFlyoutMigrationStats(migrationStats); + setIsFlyoutOpen(true); + }, []); + + if (!isCardComplete(OnboardingCardId.siemMigrationsAiConnectors)) { + return ( + + setExpandedCardId(OnboardingCardId.siemMigrationsAiConnectors) + } + /> + ); + } + + return ( + + + {isLoading ? ( + + ) : ( + + )} + + +

    {i18n.START_MIGRATION_CARD_FOOTER_NOTE}

    +
    +
    + {isFlyoutOpen && ( + + )} +
    + ); + } +); +StartMigrationCard.displayName = 'StartMigrationCard'; + +// eslint-disable-next-line import/no-default-export +export default StartMigrationCard; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_check_complete.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_check_complete.ts new file mode 100644 index 0000000000000..41e65352d4bc3 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_check_complete.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { OnboardingCardCheckComplete } from '../../../../../types'; + +export const checkStartMigrationCardComplete: OnboardingCardCheckComplete = async ({ + siemMigrations, +}) => { + const migrationsStats = await siemMigrations.rules.getRuleMigrationsStats(); + const isComplete = migrationsStats.length > 0; + return isComplete; +}; diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/translations.ts b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/translations.ts new file mode 100644 index 0000000000000..bdb3f31842549 --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/translations.ts @@ -0,0 +1,118 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const START_MIGRATION_CARD_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.title', + { defaultMessage: 'Translate your existing SIEM Rules to Elastic' } +); +export const START_MIGRATION_CARD_FOOTER_NOTE = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.footerNote', + { + defaultMessage: + 'Splunk and related marks are trademarks or registered trademarks of Splunk LLC in the United States and other countries.', + } +); +export const START_MIGRATION_CARD_CONNECTOR_MISSING_TEXT = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.connectorMissingText', + { + defaultMessage: 'Rule migrations require an AI connector to be configured.', + } +); +export const START_MIGRATION_CARD_CONNECTOR_MISSING_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.connectorMissingText', + { defaultMessage: 'AI provider step' } +); + +export const START_MIGRATION_CARD_UPLOAD_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.upload.title', + { defaultMessage: 'Export your Splunk® SIEM rules to start translation.' } +); + +export const START_MIGRATION_CARD_UPLOAD_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.upload.description', + { + defaultMessage: + 'Upload your rules before importing data to identify the integrations, data streams, and available details of your SIEM rules. Click “Upload Rules” to view step-by-step instructions to export and uploading the rules.', + } +); + +export const START_MIGRATION_CARD_UPLOAD_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.upload.button', + { defaultMessage: 'Upload rules' } +); + +export const START_MIGRATION_CARD_UPLOAD_MORE_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.uploadMore.title', + { defaultMessage: 'Need to migrate more rules?' } +); +export const START_MIGRATION_CARD_UPLOAD_MORE_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.uploadMore.button', + { defaultMessage: 'Upload more rules' } +); + +export const START_MIGRATION_CARD_UPLOAD_READ_MORE = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.upload.readMore', + { defaultMessage: 'Read more about our AI powered translations and other features.' } +); + +export const START_MIGRATION_CARD_UPLOAD_READ_DOCS = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.upload.readAiDocsLink', + { defaultMessage: 'Read AI docs' } +); + +export const START_MIGRATION_CARD_MIGRATION_READY_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.ready.description', + { + defaultMessage: + 'Migration is created and ready but the translation has not started yet. You can either upload macros & lookups or start the translation process', + } +); +export const START_MIGRATION_CARD_TRANSLATE_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.translate.button', + { defaultMessage: 'Start translation' } +); +export const START_MIGRATION_CARD_UPLOAD_MACROS_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.uploadMacros.button', + { defaultMessage: 'Upload macros' } +); + +export const START_MIGRATION_CARD_MIGRATION_TITLE = (number: number) => + i18n.translate('xpack.securitySolution.onboarding.startMigration.migrationTitle', { + defaultMessage: 'SIEM rules migration #{number}', + values: { number }, + }); + +export const START_MIGRATION_CARD_PROGRESS_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.progress.description', + { + defaultMessage: `This may take a few minutes & the task will work in the background. Just stay logged in and we'll notify you when done.`, + } +); + +export const START_MIGRATION_CARD_RESULT_TITLE = (number: number) => + i18n.translate('xpack.securitySolution.onboarding.startMigration.result.title', { + defaultMessage: 'SIEM rules migration #{number} complete', + values: { number }, + }); + +export const START_MIGRATION_CARD_RESULT_DESCRIPTION = (createdAt: string, finishedAt: string) => + i18n.translate('xpack.securitySolution.onboarding.startMigration.result.description', { + defaultMessage: 'Export uploaded on {createdAt} and translation finished {finishedAt}.', + values: { createdAt, finishedAt }, + }); + +export const VIEW_TRANSLATED_RULES_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.result.translatedRules.title', + { defaultMessage: 'Translation Summary' } +); + +export const VIEW_TRANSLATED_RULES_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.startMigration.result.translatedRules.button', + { defaultMessage: 'View translated rules' } +); diff --git a/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/upload_rules_panels.tsx b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/upload_rules_panels.tsx new file mode 100644 index 0000000000000..95b53d921fd1f --- /dev/null +++ b/x-pack/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/upload_rules_panels.tsx @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { SiemMigrationTaskStatus } from '../../../../../../../common/siem_migrations/constants'; +import type { RuleMigrationStats } from '../../../../../../siem_migrations/rules/types'; +import { UploadRulesPanel } from './panels/upload_rules_panel'; +import { MigrationProgressPanel } from './panels/migration_progress_panel'; +import { MigrationResultPanel } from './panels/migration_result_panel'; +import { MigrationReadyPanel } from './panels/migration_ready_panel'; + +export interface UploadRulesPanelsProps { + migrationsStats: RuleMigrationStats[]; +} +export const UploadRulesPanels = React.memo(({ migrationsStats }) => { + if (migrationsStats.length === 0) { + return ; + } + + return ( + + + + + {migrationsStats.map((migrationStats) => ( + + {migrationStats.status === SiemMigrationTaskStatus.READY && ( + + )} + {migrationStats.status === SiemMigrationTaskStatus.RUNNING && ( + + )} + {migrationStats.status === SiemMigrationTaskStatus.FINISHED && ( + + )} + + ))} + + ); +}); +UploadRulesPanels.displayName = 'UploadRulesPanels'; diff --git a/x-pack/plugins/security_solution/public/onboarding/constants.ts b/x-pack/plugins/security_solution/public/onboarding/constants.ts index e360e4591bb37..94b87721513bc 100644 --- a/x-pack/plugins/security_solution/public/onboarding/constants.ts +++ b/x-pack/plugins/security_solution/public/onboarding/constants.ts @@ -21,4 +21,5 @@ export enum OnboardingCardId { // siem_migrations topic cards siemMigrationsAiConnectors = 'ai_connectors', + siemMigrationsStart = 'start', } diff --git a/x-pack/plugins/security_solution/public/siem_migrations/common/icon/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/common/icon/index.tsx new file mode 100644 index 0000000000000..c0528a9a04afe --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/common/icon/index.tsx @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import SiemMigrationsIconSVG from './siem_migrations.svg'; +export const SiemMigrationsIcon = SiemMigrationsIconSVG; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/common/icon/siem_migrations.svg b/x-pack/plugins/security_solution/public/siem_migrations/common/icon/siem_migrations.svg new file mode 100644 index 0000000000000..e8568a943f70c --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/common/icon/siem_migrations.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts index 592b93f438197..db6f0117d4a77 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts @@ -7,161 +7,188 @@ import { replaceParams } from '@kbn/openapi-common/shared'; +import type { LangSmithOptions } from '../../../../common/siem_migrations/model/common.gen'; import { KibanaServices } from '../../../common/lib/kibana'; import { + SIEM_RULE_MIGRATIONS_PATH, SIEM_RULE_MIGRATIONS_ALL_STATS_PATH, SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH, SIEM_RULE_MIGRATION_INSTALL_PATH, SIEM_RULE_MIGRATION_PATH, SIEM_RULE_MIGRATION_START_PATH, + SIEM_RULE_MIGRATION_STATS_PATH, SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, } from '../../../../common/siem_migrations/constants'; import type { + CreateRuleMigrationRequestBody, + CreateRuleMigrationResponse, GetAllStatsRuleMigrationResponse, GetRuleMigrationResponse, GetRuleMigrationTranslationStatsResponse, InstallTranslatedMigrationRulesResponse, InstallMigrationRulesResponse, StartRuleMigrationRequestBody, + GetRuleMigrationStatsResponse, } from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; -/** - * Retrieves the stats for all the existing migrations, aggregated by `migration_id`. - * - * @param signal AbortSignal for cancelling request - * - * @throws An error if response is not OK - */ +export interface GetRuleMigrationStatsParams { + /** `id` of the migration to get stats for */ + migrationId: string; + /** Optional AbortSignal for cancelling request */ + signal?: AbortSignal; +} +/** Retrieves the stats for all the existing migrations, aggregated by `migration_id`. */ +export const getRuleMigrationStats = async ({ + migrationId, + signal, +}: GetRuleMigrationStatsParams): Promise => { + return KibanaServices.get().http.get( + replaceParams(SIEM_RULE_MIGRATION_STATS_PATH, { migration_id: migrationId }), + { version: '1', signal } + ); +}; + +export interface GetRuleMigrationsStatsAllParams { + /** Optional AbortSignal for cancelling request */ + signal?: AbortSignal; +} +/** Retrieves the stats for all the existing migrations, aggregated by `migration_id`. */ export const getRuleMigrationsStatsAll = async ({ signal, -}: { - signal: AbortSignal | undefined; -}): Promise => { - return KibanaServices.get().http.fetch( +}: GetRuleMigrationsStatsAllParams = {}): Promise => { + return KibanaServices.get().http.get( SIEM_RULE_MIGRATIONS_ALL_STATS_PATH, - { method: 'GET', version: '1', signal } + { version: '1', signal } ); }; -/** - * Starts a new migration with the provided rules. - * - * @param migrationId `id` of the migration to start - * @param body The body containing the `connectorId` to use for the migration - * @param signal AbortSignal for cancelling request - * - * @throws An error if response is not OK - */ -export const startRuleMigration = async ({ +export interface CreateRuleMigrationParams { + /** Optional `id` of migration to add the rules to. + * The id is necessary only for batching the migration creation in multiple requests */ + migrationId?: string; + /** The body containing the `connectorId` to use for the migration */ + body: CreateRuleMigrationRequestBody; + /** Optional AbortSignal for cancelling request */ + signal?: AbortSignal; +} +/** Starts a new migration with the provided rules. */ +export const createRuleMigration = async ({ migrationId, body, signal, -}: { - migrationId: string; - body: StartRuleMigrationRequestBody; - signal: AbortSignal | undefined; -}): Promise => { - return KibanaServices.get().http.put( - replaceParams(SIEM_RULE_MIGRATION_START_PATH, { migration_id: migrationId }), +}: CreateRuleMigrationParams): Promise => { + return KibanaServices.get().http.post( + `${SIEM_RULE_MIGRATIONS_PATH}${migrationId ? `/${migrationId}` : ''}`, { body: JSON.stringify(body), version: '1', signal } ); }; -/** - * Retrieves the translation stats for the migraion. - * - * @param migrationId `id` of the migration to retrieve translation stats for - * @param signal AbortSignal for cancelling request - * - * @throws An error if response is not OK - */ -export const getRuleMigrationTranslationStats = async ({ +export interface StartRuleMigrationParams { + /** `id` of the migration to start */ + migrationId: string; + /** The connector id to use for the migration */ + connectorId: string; + /** Optional LangSmithOptions to use for the for the migration */ + langSmithOptions?: LangSmithOptions; + /** Optional AbortSignal for cancelling request */ + signal?: AbortSignal; +} +/** Starts a new migration with the provided rules. */ +export const startRuleMigration = async ({ migrationId, + connectorId, + langSmithOptions, signal, -}: { - migrationId: string; - signal: AbortSignal | undefined; -}): Promise => { - return KibanaServices.get().http.fetch( - replaceParams(SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, { migration_id: migrationId }), - { - method: 'GET', - version: '1', - signal, - } +}: StartRuleMigrationParams): Promise => { + const body: StartRuleMigrationRequestBody = { connector_id: connectorId }; + if (langSmithOptions) { + body.langsmith_options = langSmithOptions; + } + return KibanaServices.get().http.put( + replaceParams(SIEM_RULE_MIGRATION_START_PATH, { migration_id: migrationId }), + { body: JSON.stringify(body), version: '1', signal } ); }; -/** - * Retrieves all the migration rule documents of a specific migration. - * - * @param migrationId `id` of the migration to retrieve rule documents for - * @param signal AbortSignal for cancelling request - * - * @throws An error if response is not OK - */ +export interface GetRuleMigrationParams { + /** `id` of the migration to get rules documents for */ + migrationId: string; + /** Optional page number to retrieve */ + page?: number; + /** Optional number of documents per page to retrieve */ + perPage?: number; + /** Optional search term to filter documents */ + searchTerm?: string; + /** Optional AbortSignal for cancelling request */ + signal?: AbortSignal; +} +/** Retrieves all the migration rule documents of a specific migration. */ export const getRuleMigrations = async ({ migrationId, page, perPage, searchTerm, signal, -}: { - migrationId: string; - page?: number; - perPage?: number; - searchTerm?: string; - signal: AbortSignal | undefined; -}): Promise => { - return KibanaServices.get().http.fetch( +}: GetRuleMigrationParams): Promise => { + return KibanaServices.get().http.get( replaceParams(SIEM_RULE_MIGRATION_PATH, { migration_id: migrationId }), - { - method: 'GET', - version: '1', - query: { - page, - per_page: perPage, - search_term: searchTerm, - }, - signal, - } + { version: '1', query: { page, per_page: perPage, search_term: searchTerm }, signal } ); }; -export const installMigrationRules = async ({ +export interface GetRuleMigrationTranslationStatsParams { + /** `id` of the migration to get translation stats for */ + migrationId: string; + /** Optional AbortSignal for cancelling request */ + signal?: AbortSignal; +} +/** + * Retrieves the translation stats for the migration. + */ +export const getRuleMigrationTranslationStats = async ({ migrationId, - ids, signal, -}: { +}: GetRuleMigrationTranslationStatsParams): Promise => { + return KibanaServices.get().http.get( + replaceParams(SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, { migration_id: migrationId }), + { version: '1', signal } + ); +}; + +export interface InstallRulesParams { + /** `id` of the migration to install rules for */ migrationId: string; + /** The rule ids to install */ ids: string[]; + /** Optional AbortSignal for cancelling request */ signal?: AbortSignal; -}): Promise => { - return KibanaServices.get().http.fetch( +} +/** Installs the provided rule ids for a specific migration. */ +export const installMigrationRules = async ({ + migrationId, + ids, + signal, +}: InstallRulesParams): Promise => { + return KibanaServices.get().http.post( replaceParams(SIEM_RULE_MIGRATION_INSTALL_PATH, { migration_id: migrationId }), - { - method: 'POST', - version: '1', - body: JSON.stringify(ids), - signal, - } + { version: '1', body: JSON.stringify(ids), signal } ); }; +export interface InstallTranslatedRulesParams { + /** `id` of the migration to install rules for */ + migrationId: string; + /** Optional AbortSignal for cancelling request */ + signal?: AbortSignal; +} +/** Installs all the translated rules for a specific migration. */ export const installTranslatedMigrationRules = async ({ migrationId, signal, -}: { - migrationId: string; - signal?: AbortSignal; -}): Promise => { - return KibanaServices.get().http.fetch( +}: InstallTranslatedRulesParams): Promise => { + return KibanaServices.get().http.post( replaceParams(SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH, { migration_id: migrationId }), - { - method: 'POST', - version: '1', - signal, - } + { version: '1', signal } ); }; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/constants.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/constants.ts new file mode 100644 index 0000000000000..aa331bf17c832 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/constants.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export enum DataInputStep { + rules = 'rules', + macros = 'macros', + lookups = 'lookups', +} + +export const SPL_RULES_COLUMNS = [ + 'id', + 'title', + 'search', + 'description', + 'action.escu.eli5', + 'action.correlationsearch.annotations', +] as const; + +export const RULES_SPLUNK_QUERY = `| rest /servicesNS/-/-/saved/searches +| search action.correlationsearch.enabled = "1" OR (eai:acl.app = "Splunk_Security_Essentials" AND is_scheduled=1) +| where disabled=0 +| table ${SPL_RULES_COLUMNS.join(', ')}`; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/data_input_flyout.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/data_input_flyout.tsx new file mode 100644 index 0000000000000..6a4916a5e54b3 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/data_input_flyout.tsx @@ -0,0 +1,112 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useState } from 'react'; +import { + EuiFlyoutResizable, + EuiFlyoutHeader, + EuiTitle, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlexGroup, + EuiFlexItem, + EuiButton, +} from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import type { RuleMigrationTaskStats } from '../../../../../common/siem_migrations/model/rule_migration.gen'; +import { DataInputStep } from './constants'; +import { RulesDataInput } from './steps/rules/rules_data_input'; +import { useStartMigration } from '../../service/hooks/use_start_migration'; + +export interface MigrationDataInputFlyoutProps { + onClose: () => void; + migrationStats?: RuleMigrationTaskStats; +} +export const MigrationDataInputFlyout = React.memo( + ({ onClose, migrationStats: initialMigrationSats }) => { + const [migrationStats, setMigrationStats] = useState( + initialMigrationSats + ); + + const { startMigration, isLoading: isStartLoading } = useStartMigration(onClose); + const onStartMigration = useCallback(() => { + if (migrationStats?.id) { + startMigration(migrationStats.id); + } + }, [migrationStats, startMigration]); + + const [dataInputStep, setDataInputStep] = useState(() => { + if (migrationStats) { + return DataInputStep.macros; + } + return DataInputStep.rules; + }); + + const onMigrationCreated = useCallback( + (createdMigrationStats: RuleMigrationTaskStats) => { + if (createdMigrationStats) { + setMigrationStats(createdMigrationStats); + setDataInputStep(DataInputStep.macros); + } + }, + [setDataInputStep] + ); + + return ( + + + +

    + +

    +
    +
    + + + + + + + + + + + + + + + + + +
    + ); + } +); +MigrationDataInputFlyout.displayName = 'MigrationDataInputFlyout'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/index.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/index.ts new file mode 100644 index 0000000000000..709623f992f72 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export { MigrationDataInputFlyout, type MigrationDataInputFlyoutProps } from './data_input_flyout'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/common/sub_step_wrapper.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/common/sub_step_wrapper.tsx new file mode 100644 index 0000000000000..438134b0ad99a --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/common/sub_step_wrapper.tsx @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiPanel } from '@elastic/eui'; +import { css } from '@emotion/css'; +import type { PropsWithChildren } from 'react'; +import React from 'react'; + +const style = css` + .euiStep__title { + font-size: 14px; + } +`; + +export const SubStepWrapper = React.memo>(({ children }) => { + return ( + + {children} + + ); +}); +SubStepWrapper.displayName = 'SubStepWrapper'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/rules_data_input.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/rules_data_input.tsx new file mode 100644 index 0000000000000..2b20dcda0cea7 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/rules_data_input.tsx @@ -0,0 +1,95 @@ +/* + * 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 { EuiStepProps, EuiStepStatus } from '@elastic/eui'; +import { + EuiFlexGroup, + EuiFlexItem, + EuiPanel, + EuiStepNumber, + EuiSteps, + EuiTitle, +} from '@elastic/eui'; +import React, { useMemo, useState } from 'react'; +import { SubStepWrapper } from '../common/sub_step_wrapper'; +import type { OnMigrationCreated } from '../../types'; +import { useCopyExportQueryStep } from './sub_steps/copy_export_query'; +import { useRulesFileUploadStep } from './sub_steps/rules_file_upload'; +import * as i18n from './translations'; +import { useCheckResourcesStep } from './sub_steps/check_resources'; + +type Step = 1 | 2 | 3 | 4; +const getStatus = (step: Step, currentStep: Step): EuiStepStatus => { + if (step === currentStep) { + return 'current'; + } + if (step < currentStep) { + return 'complete'; + } + return 'incomplete'; +}; + +interface RulesDataInputProps { + selected: boolean; + onMigrationCreated: OnMigrationCreated; +} + +export const RulesDataInput = React.memo( + ({ selected, onMigrationCreated }) => { + const [step, setStep] = useState(1); + + const copyStep = useCopyExportQueryStep({ + status: getStatus(1, step), + onCopied: () => setStep(2), + }); + + const uploadStep = useRulesFileUploadStep({ + status: getStatus(2, step), + onMigrationCreated: (stats) => { + onMigrationCreated(stats); + setStep(3); + }, + }); + + const resourcesStep = useCheckResourcesStep({ + status: getStatus(3, step), + onComplete: () => { + setStep(4); + }, + }); + + const steps = useMemo( + () => [copyStep, uploadStep, resourcesStep], + [copyStep, uploadStep, resourcesStep] + ); + + return ( + + + + + + + + + + {i18n.RULES_DATA_INPUT_TITLE} + + + + + + + + + + + + ); + } +); +RulesDataInput.displayName = 'RulesDataInput'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/check_resources/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/check_resources/index.tsx new file mode 100644 index 0000000000000..3b081eb203267 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/check_resources/index.tsx @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiText, type EuiStepProps, type EuiStepStatus } from '@elastic/eui'; +import * as i18n from './translations'; + +export interface CheckResourcesStepProps { + status: EuiStepStatus; + onComplete: () => void; +} +export const useCheckResourcesStep = ({ + status, + onComplete, +}: CheckResourcesStepProps): EuiStepProps => { + // onComplete(); // TODO: check the resources + return { + title: i18n.RULES_DATA_INPUT_CHECK_RESOURCES_TITLE, + status, + children: ( + + {i18n.RULES_DATA_INPUT_CHECK_RESOURCES_DESCRIPTION} + + ), + }; +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/check_resources/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/check_resources/translations.ts new file mode 100644 index 0000000000000..159b4033fafd6 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/check_resources/translations.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 { i18n } from '@kbn/i18n'; + +export const RULES_DATA_INPUT_CHECK_RESOURCES_TITLE = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.checkResources.title', + { defaultMessage: 'Check for macros and lookups' } +); + +export const RULES_DATA_INPUT_CHECK_RESOURCES_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.checkResources.description', + { + defaultMessage: `For best translation results, we will automatically review your rules for macros and lookups and ask you to upload them. Once uploaded, we'll be able to deliver a more complete rule translation for all rules using those macros or lookups.`, + } +); diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/copy_export_query.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/copy_export_query.tsx new file mode 100644 index 0000000000000..11fb88a1cade2 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/copy_export_query.tsx @@ -0,0 +1,53 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback } from 'react'; +import { EuiCodeBlock, EuiSpacer, EuiText } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { RULES_SPLUNK_QUERY } from '../../../../constants'; +import * as i18n from './translations'; + +interface CopyExportQueryProps { + onCopied: () => void; +} +export const CopyExportQuery = React.memo(({ onCopied }) => { + const onClick: React.MouseEventHandler = useCallback( + (ev) => { + // The only button inside the element is the "copy" button. + if ((ev.target as Element).tagName === 'BUTTON') { + onCopied(); + } + }, + [onCopied] + ); + + return ( + <> + {/* The click event is also dispatched when using the keyboard actions (space or enter) for "copy" button. + No need to use keyboard specific events, disabling the a11y lint rule:*/} + {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */} +
    + {/* onCopy react event is dispatched when the user copies text manually */} + + {RULES_SPLUNK_QUERY} + +
    + + + {i18n.RULES_DATA_INPUT_COPY_DESCRIPTION_SECTION}
    , + format: {'JSON'}, + }} + /> + + + ); +}); +CopyExportQuery.displayName = 'CopyExportQuery'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/index.tsx new file mode 100644 index 0000000000000..3d2adcc78857b --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/index.tsx @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { EuiStepProps, EuiStepStatus } from '@elastic/eui'; +import { CopyExportQuery } from './copy_export_query'; +import * as i18n from './translations'; + +export interface CopyExportQueryStepProps { + status: EuiStepStatus; + onCopied: () => void; +} +export const useCopyExportQueryStep = ({ + status, + onCopied, +}: CopyExportQueryStepProps): EuiStepProps => { + return { + title: i18n.RULES_DATA_INPUT_COPY_TITLE, + status, + children: , + }; +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/translations.ts new file mode 100644 index 0000000000000..d76eb71f2e378 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/copy_export_query/translations.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const RULES_DATA_INPUT_COPY_TITLE = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.copyExportQuery.title', + { defaultMessage: 'Copy and export query' } +); + +export const RULES_DATA_INPUT_COPY_DESCRIPTION_SECTION = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.copyExportQuery.description.section', + { defaultMessage: 'Search and Reporting' } +); diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/index.tsx new file mode 100644 index 0000000000000..ab7838b28908b --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/index.tsx @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo, useState } from 'react'; +import type { EuiStepProps, EuiStepStatus } from '@elastic/eui'; +import type { OnMigrationCreated } from '../../../../types'; +import { RulesFileUpload } from './rules_file_upload'; +import { + useCreateMigration, + type OnSuccess, +} from '../../../../../../service/hooks/use_create_migration'; +import * as i18n from './translations'; + +export interface RulesFileUploadStepProps { + status: EuiStepStatus; + onMigrationCreated: OnMigrationCreated; +} +export const useRulesFileUploadStep = ({ + status, + onMigrationCreated, +}: RulesFileUploadStepProps): EuiStepProps => { + const [isCreated, setIsCreated] = useState(false); + const onSuccess = useCallback( + (stats) => { + setIsCreated(true); + onMigrationCreated(stats); + }, + [onMigrationCreated] + ); + const { createMigration, isLoading, error } = useCreateMigration(onSuccess); + + const uploadStepStatus = useMemo(() => { + if (isLoading) { + return 'loading'; + } + if (error) { + return 'danger'; + } + return status; + }, [isLoading, error, status]); + + return { + title: i18n.RULES_DATA_INPUT_FILE_UPLOAD_TITLE, + status: uploadStepStatus, + children: ( + + ), + }; +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/parse_rules_file.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/parse_rules_file.ts new file mode 100644 index 0000000000000..3d5dbb32ccde8 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/parse_rules_file.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { isPlainObject } from 'lodash/fp'; +import type { OriginalRule } from '../../../../../../../../../common/siem_migrations/model/rule_migration.gen'; +import type { SPL_RULES_COLUMNS } from '../../../../constants'; +import * as i18n from './translations'; + +type SplunkResult = Partial>; +interface SplunkRow { + result: SplunkResult; +} + +export const parseContent = (fileContent: string): OriginalRule[] => { + const trimmedContent = fileContent.trim(); + let arrayContent: SplunkRow[]; + if (trimmedContent.startsWith('[')) { + arrayContent = parseJSONArray(trimmedContent); + } else { + arrayContent = parseNDJSON(trimmedContent); + } + if (arrayContent.length === 0) { + throw new Error(i18n.RULES_DATA_INPUT_FILE_UPLOAD_ERROR.EMPTY); + } + return arrayContent.map(convertFormat); +}; + +const parseNDJSON = (fileContent: string): SplunkRow[] => { + return fileContent + .split(/\n(?=\{)/) // split at newline followed by '{'. + .filter((entry) => entry.trim() !== '') // Remove empty entries. + .map(parseJSON); // Parse each entry as JSON. +}; + +const parseJSONArray = (fileContent: string): SplunkRow[] => { + const parsedContent = parseJSON(fileContent); + if (!Array.isArray(parsedContent)) { + throw new Error(i18n.RULES_DATA_INPUT_FILE_UPLOAD_ERROR.NOT_ARRAY); + } + return parsedContent; +}; + +const parseJSON = (fileContent: string) => { + try { + return JSON.parse(fileContent); + } catch (error) { + if (error instanceof RangeError) { + throw new Error(i18n.RULES_DATA_INPUT_FILE_UPLOAD_ERROR.TOO_LARGE_TO_PARSE); + } + throw new Error(i18n.RULES_DATA_INPUT_FILE_UPLOAD_ERROR.CAN_NOT_PARSE); + } +}; + +const convertFormat = (row: SplunkRow): OriginalRule => { + if (!isPlainObject(row) || !isPlainObject(row.result)) { + throw new Error(i18n.RULES_DATA_INPUT_FILE_UPLOAD_ERROR.NOT_OBJECT); + } + const originalRule: Partial = { + id: row.result.id, + vendor: 'splunk', + title: row.result.title, + query: row.result.search, + query_language: 'spl', + description: row.result['action.escu.eli5']?.trim() || row.result.description, + }; + + if (row.result['action.correlationsearch.annotations']) { + try { + originalRule.annotations = JSON.parse(row.result['action.correlationsearch.annotations']); + } catch (error) { + delete originalRule.annotations; + } + } + return originalRule as OriginalRule; +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/rules_file_upload.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/rules_file_upload.tsx new file mode 100644 index 0000000000000..0f9787a4ddf68 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/rules_file_upload.tsx @@ -0,0 +1,122 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo, useState } from 'react'; +import { EuiFilePicker, EuiFormRow, EuiText } from '@elastic/eui'; +import type { OriginalRule } from '../../../../../../../../../common/siem_migrations/model/rule_migration.gen'; +import type { CreateMigration } from '../../../../../../service/hooks/use_create_migration'; +import { parseContent } from './parse_rules_file'; +import * as i18n from './translations'; + +export interface RulesFileUploadProps { + createMigration: CreateMigration; + apiError?: string; + isLoading?: boolean; + isCreated?: boolean; +} +export const RulesFileUpload = React.memo( + ({ createMigration, apiError, isLoading, isCreated }) => { + const [isParsing, setIsParsing] = useState(false); + const [fileError, setFileError] = useState(); + + const onChangeFile = useCallback( + (files: FileList | null) => { + if (!files) { + return; + } + + setFileError(undefined); + + const rulesFile = files[0]; + const reader = new FileReader(); + + reader.onloadstart = () => setIsParsing(true); + reader.onloadend = () => setIsParsing(false); + + reader.onload = function (e) { + // We can safely cast to string since we call `readAsText` to load the file. + const fileContent = e.target?.result as string | undefined; + + if (fileContent == null) { + setFileError(i18n.RULES_DATA_INPUT_FILE_UPLOAD_ERROR.CAN_NOT_READ); + return; + } + + if (fileContent === '' && e.loaded > 100000) { + // V8-based browsers can't handle large files and return an empty string + // instead of an error; see https://stackoverflow.com/a/61316641 + setFileError(i18n.RULES_DATA_INPUT_FILE_UPLOAD_ERROR.TOO_LARGE_TO_PARSE); + return; + } + + let data: OriginalRule[]; + try { + data = parseContent(fileContent); + createMigration(data); + } catch (err) { + setFileError(err.message); + } + }; + + const handleReaderError = function () { + const message = reader.error?.message; + if (message) { + setFileError(i18n.RULES_DATA_INPUT_FILE_UPLOAD_ERROR.CAN_NOT_READ_WITH_REASON(message)); + } else { + setFileError(i18n.RULES_DATA_INPUT_FILE_UPLOAD_ERROR.CAN_NOT_READ); + } + }; + + reader.onerror = handleReaderError; + reader.onabort = handleReaderError; + + reader.readAsText(rulesFile); + }, + [createMigration] + ); + + const error = useMemo(() => { + if (apiError) { + return apiError; + } + return fileError; + }, [apiError, fileError]); + + return ( + + {error} + + } + isInvalid={error != null} + fullWidth + > + + + {i18n.RULES_DATA_INPUT_FILE_UPLOAD_PROMPT} + + + } + accept="application/json" + onChange={onChangeFile} + display="large" + aria-label="Upload logs sample file" + isLoading={isParsing || isLoading} + disabled={isLoading || isCreated} + data-test-subj="rulesFilePicker" + data-loading={isParsing} + /> + + ); + } +); +RulesFileUpload.displayName = 'RulesFileUpload'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/translations.ts new file mode 100644 index 0000000000000..675eed61f4973 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/sub_steps/rules_file_upload/translations.ts @@ -0,0 +1,70 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const RULES_DATA_INPUT_FILE_UPLOAD_TITLE = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.title', + { defaultMessage: 'Update your rule export' } +); +export const RULES_DATA_INPUT_FILE_UPLOAD_PROMPT = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.prompt', + { defaultMessage: 'Select or drag and drop the exported JSON file' } +); + +export const RULES_DATA_INPUT_FILE_UPLOAD_ERROR = { + CAN_NOT_READ: i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.error.canNotRead', + { defaultMessage: 'Failed to read the rules export file' } + ), + CAN_NOT_READ_WITH_REASON: (reason: string) => + i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.error.canNotReadWithReason', + { + defaultMessage: 'An error occurred when reading rules export file: {reason}', + values: { reason }, + } + ), + CAN_NOT_PARSE: i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.error.canNotParse', + { defaultMessage: 'Cannot parse the rules export file as either a JSON file' } + ), + TOO_LARGE_TO_PARSE: i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.error.tooLargeToParse', + { defaultMessage: 'This rules export file is too large to parse' } + ), + NOT_ARRAY: i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.error.notArray', + { defaultMessage: 'The rules export file is not an array' } + ), + EMPTY: i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.error.empty', + { defaultMessage: 'The rules export file is empty' } + ), + NOT_OBJECT: i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.error.notObject', + { defaultMessage: 'The rules export file contains non-object entries' } + ), + WRONG_FORMAT: (formatError: string) => { + return i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.error.wrongFormat', + { + defaultMessage: 'The rules export file has wrong format: {formatError}', + values: { formatError }, + } + ); + }, +}; + +export const RULES_DATA_INPUT_CREATE_MIGRATION_SUCCESS = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.createSuccess', + { defaultMessage: 'Rules uploaded successfully' } +); +export const RULES_DATA_INPUT_CREATE_MIGRATION_ERROR = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.createError', + { defaultMessage: 'Failed to upload rules file' } +); diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/translations.ts new file mode 100644 index 0000000000000..5446180d03a75 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/steps/rules/translations.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const RULES_DATA_INPUT_TITLE = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.title', + { defaultMessage: 'Upload rule export and check for macros and lookups' } +); diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/types.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/types.ts new file mode 100644 index 0000000000000..16d8f60043bcb --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/data_input_flyout/types.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { RuleMigrationTaskStats } from '../../../../../common/siem_migrations/model/rule_migration.gen'; + +export type OnMigrationCreated = (migrationStats: RuleMigrationTaskStats) => void; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx index 728873f046d2e..3f255a49f87c2 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/header_buttons/index.tsx @@ -10,13 +10,13 @@ import React, { useMemo } from 'react'; import type { EuiComboBoxOptionOption } from '@elastic/eui'; import { EuiComboBox, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import * as i18n from './translations'; -import type { RuleMigrationTask } from '../../types'; +import type { RuleMigrationStats } from '../../types'; export interface HeaderButtonsProps { /** * Available rule migrations stats */ - ruleMigrationsStats: RuleMigrationTask[]; + ruleMigrationsStats: RuleMigrationStats[]; /** * Selected rule migration id diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx index 018aa5d77559e..3877a6f46cbe7 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/pages/index.tsx @@ -21,7 +21,7 @@ import { NeedAdminForUpdateRulesCallOut } from '../../../detections/components/c import { MissingPrivilegesCallOut } from '../../../detections/components/callouts/missing_privileges_callout'; import { HeaderButtons } from '../components/header_buttons'; import { UnknownMigration } from '../components/unknown_migration'; -import { useLatestStats } from '../hooks/use_latest_stats'; +import { useLatestStats } from '../service/hooks/use_latest_stats'; type MigrationRulesPageProps = RouteComponentProps<{ migrationId?: string }>; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/common/api_request_reducer.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/common/api_request_reducer.ts new file mode 100644 index 0000000000000..a68432d48bf9c --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/common/api_request_reducer.ts @@ -0,0 +1,26 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface State { + loading: boolean; + error: Error | null; +} +export type Action = { type: 'start' } | { type: 'error'; error: Error } | { type: 'success' }; + +export const initialState: State = { loading: false, error: null }; +export const reducer = (state: State, action: Action) => { + switch (action.type) { + case 'start': + return { loading: true, error: null }; + case 'error': + return { loading: false, error: action.error }; + case 'success': + return { loading: false, error: null }; + default: + return state; + } +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/translations.ts new file mode 100644 index 0000000000000..936bc07e6576e --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/translations.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const RULES_DATA_INPUT_CREATE_MIGRATION_SUCCESS = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.createSuccess', + { defaultMessage: 'Rules uploaded successfully' } +); +export const RULES_DATA_INPUT_CREATE_MIGRATION_ERROR = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.dataInputFlyout.rules.rulesFileUpload.createError', + { defaultMessage: 'Failed to upload rules file' } +); diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/use_create_migration.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/use_create_migration.ts new file mode 100644 index 0000000000000..94082cf59d359 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/use_create_migration.ts @@ -0,0 +1,55 @@ +/* + * 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 { useCallback, useReducer } from 'react'; +import { i18n } from '@kbn/i18n'; +import type { RuleMigrationTaskStats } from '../../../../../common/siem_migrations/model/rule_migration.gen'; +import type { CreateRuleMigrationRequestBody } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { useKibana } from '../../../../common/lib/kibana/kibana_react'; +import { reducer, initialState } from './common/api_request_reducer'; + +export const RULES_DATA_INPUT_CREATE_MIGRATION_SUCCESS = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.service.createRuleSuccess', + { defaultMessage: 'Rules uploaded successfully' } +); +export const RULES_DATA_INPUT_CREATE_MIGRATION_ERROR = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.service.createRuleError', + { defaultMessage: 'Failed to upload rules file' } +); + +export type CreateMigration = (data: CreateRuleMigrationRequestBody) => void; +export type OnSuccess = (migrationStats: RuleMigrationTaskStats) => void; + +export const useCreateMigration = (onSuccess: OnSuccess) => { + const { siemMigrations, notifications } = useKibana().services; + const [state, dispatch] = useReducer(reducer, initialState); + + const createMigration = useCallback( + (data) => { + (async () => { + try { + dispatch({ type: 'start' }); + const migrationId = await siemMigrations.rules.createRuleMigration(data); + const stats = await siemMigrations.rules.getRuleMigrationStats(migrationId); + + notifications.toasts.addSuccess(RULES_DATA_INPUT_CREATE_MIGRATION_SUCCESS); + onSuccess(stats); + dispatch({ type: 'success' }); + } catch (err) { + const apiError = err.body ?? err; + notifications.toasts.addError(apiError, { + title: RULES_DATA_INPUT_CREATE_MIGRATION_ERROR, + }); + dispatch({ type: 'error', error: apiError }); + } + })(); + }, + [siemMigrations.rules, notifications.toasts, onSuccess] + ); + + return { isLoading: state.loading, error: state.error, createMigration }; +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_latest_stats.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/use_latest_stats.ts similarity index 91% rename from x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_latest_stats.ts rename to x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/use_latest_stats.ts index c681af0d2a21c..8b692f07eb3cb 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/hooks/use_latest_stats.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/use_latest_stats.ts @@ -7,7 +7,7 @@ import useObservable from 'react-use/lib/useObservable'; import { useEffect, useMemo } from 'react'; -import { useKibana } from '../../../common/lib/kibana'; +import { useKibana } from '../../../../common/lib/kibana/kibana_react'; export const useLatestStats = () => { const { siemMigrations } = useKibana().services; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/use_start_migration.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/use_start_migration.ts new file mode 100644 index 0000000000000..6794439d1298e --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/hooks/use_start_migration.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useCallback, useReducer } from 'react'; +import { i18n } from '@kbn/i18n'; +import { useKibana } from '../../../../common/lib/kibana/kibana_react'; +import { reducer, initialState } from './common/api_request_reducer'; + +export const RULES_DATA_INPUT_START_MIGRATION_SUCCESS = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.service.startMigrationSuccess', + { defaultMessage: 'Migration started successfully.' } +); +export const RULES_DATA_INPUT_START_MIGRATION_ERROR = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.service.startMigrationError', + { defaultMessage: 'Error starting migration.' } +); + +export type StartMigration = (migrationId: string) => void; +export type OnSuccess = () => void; + +export const useStartMigration = (onSuccess?: OnSuccess) => { + const { siemMigrations, notifications } = useKibana().services; + const [state, dispatch] = useReducer(reducer, initialState); + + const startMigration = useCallback( + (migrationId) => { + (async () => { + try { + dispatch({ type: 'start' }); + await siemMigrations.rules.startRuleMigration(migrationId); + + notifications.toasts.addSuccess(RULES_DATA_INPUT_START_MIGRATION_SUCCESS); + dispatch({ type: 'success' }); + onSuccess?.(); + } catch (err) { + const apiError = err.body ?? err; + notifications.toasts.addError(apiError, { + title: RULES_DATA_INPUT_START_MIGRATION_ERROR, + }); + dispatch({ type: 'error', error: apiError }); + } + })(); + }, + [siemMigrations.rules, notifications.toasts, onSuccess] + ); + + return { isLoading: state.loading, error: state.error, startMigration }; +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts index 3162cc3d58e63..c13b0606d771d 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts @@ -7,28 +7,55 @@ import { BehaviorSubject, type Observable } from 'rxjs'; import type { CoreStart } from '@kbn/core/public'; -import { i18n } from '@kbn/i18n'; +import type { TraceOptions } from '@kbn/elastic-assistant/impl/assistant/types'; +import { + DEFAULT_ASSISTANT_NAMESPACE, + TRACE_OPTIONS_SESSION_STORAGE_KEY, +} from '@kbn/elastic-assistant/impl/assistant_context/constants'; +import type { LangSmithOptions } from '../../../../common/siem_migrations/model/common.gen'; +import type { RuleMigrationTaskStats } from '../../../../common/siem_migrations/model/rule_migration.gen'; +import type { + CreateRuleMigrationRequestBody, + GetAllStatsRuleMigrationResponse, + GetRuleMigrationStatsResponse, +} from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; import { SiemMigrationTaskStatus } from '../../../../common/siem_migrations/constants'; import type { StartPluginsDependencies } from '../../../types'; import { ExperimentalFeaturesService } from '../../../common/experimental_features_service'; import { licenseService } from '../../../common/hooks/use_license'; -import { getRuleMigrationsStatsAll, startRuleMigration } from '../api'; -import type { RuleMigrationTask } from '../types'; +import { + createRuleMigration, + getRuleMigrationStats, + getRuleMigrationsStatsAll, + startRuleMigration, + type GetRuleMigrationsStatsAllParams, +} from '../api'; +import type { RuleMigrationStats } from '../types'; import { getSuccessToast } from './success_notification'; import { RuleMigrationsStorage } from './storage'; +import * as i18n from './translations'; + +// use the default assistant namespace since it's the only one we use +const NAMESPACE_TRACE_OPTIONS_SESSION_STORAGE_KEY = + `${DEFAULT_ASSISTANT_NAMESPACE}.${TRACE_OPTIONS_SESSION_STORAGE_KEY}` as const; + +const REQUEST_POLLING_INTERVAL_MS = 5000 as const; +const CREATE_MIGRATION_BODY_BATCH_SIZE = 50 as const; export class SiemRulesMigrationsService { - private readonly pollingInterval = 5000; - private readonly latestStats$: BehaviorSubject; - private readonly signal = new AbortController().signal; + private readonly latestStats$: BehaviorSubject; private isPolling = false; - public connectorIdStorage = new RuleMigrationsStorage('connectorId'); + public connectorIdStorage = new RuleMigrationsStorage('connectorId'); + public traceOptionsStorage = new RuleMigrationsStorage('traceOptions', { + customKey: NAMESPACE_TRACE_OPTIONS_SESSION_STORAGE_KEY, + storageType: 'session', + }); constructor( private readonly core: CoreStart, private readonly plugins: StartPluginsDependencies ) { - this.latestStats$ = new BehaviorSubject([]); + this.latestStats$ = new BehaviorSubject([]); this.plugins.spaces.getActiveSpace().then((space) => { this.connectorIdStorage.setSpaceId(space.id); @@ -36,7 +63,7 @@ export class SiemRulesMigrationsService { }); } - public getLatestStats$(): Observable { + public getLatestStats$(): Observable { return this.latestStats$.asObservable(); } @@ -48,27 +75,92 @@ export class SiemRulesMigrationsService { if (this.isPolling || !this.isAvailable()) { return; } - this.isPolling = true; - this.startStatsPolling() + this.startTaskStatsPolling() .catch((e) => { - this.core.notifications.toasts.addError(e, { - title: i18n.translate( - 'xpack.securitySolution.siemMigrations.rulesService.polling.errorTitle', - { defaultMessage: 'Error fetching rule migrations' } - ), - }); + this.core.notifications.toasts.addError(e, { title: i18n.POLLING_ERROR }); }) .finally(() => { this.isPolling = false; }); } - private async startStatsPolling(): Promise { + public async createRuleMigration(body: CreateRuleMigrationRequestBody): Promise { + if (body.length === 0) { + throw new Error(i18n.EMPTY_RULES_ERROR); + } + // Batching creation to avoid hitting the max payload size limit of the API + let migrationId: string | undefined; + for (let i = 0; i < body.length; i += CREATE_MIGRATION_BODY_BATCH_SIZE) { + const bodyBatch = body.slice(i, i + CREATE_MIGRATION_BODY_BATCH_SIZE); + const response = await createRuleMigration({ migrationId, body: bodyBatch }); + migrationId = response.migration_id; + } + return migrationId as string; + } + + public async startRuleMigration(migrationId: string): Promise { + const connectorId = this.connectorIdStorage.get(); + if (!connectorId) { + throw new Error(i18n.MISSING_CONNECTOR_ERROR); + } + + const langSmithSettings = this.traceOptionsStorage.get(); + let langSmithOptions: LangSmithOptions | undefined; + if (langSmithSettings) { + langSmithOptions = { + project_name: langSmithSettings.langSmithProject, + api_key: langSmithSettings.langSmithApiKey, + }; + } + + const result = await startRuleMigration({ migrationId, connectorId, langSmithOptions }); + this.startPolling(); + return result; + } + + public async getRuleMigrationStats(migrationId: string): Promise { + return getRuleMigrationStats({ migrationId }); + } + + public async getRuleMigrationsStats( + params: GetRuleMigrationsStatsAllParams = {} + ): Promise { + const allStats = await this.getRuleMigrationsStatsWithRetry(params); + const results = allStats.map( + // the array order (by creation) is guaranteed by the API + (stats, index) => ({ ...stats, number: index + 1 } as RuleMigrationStats) // needs cast because of the `status` enum override + ); + this.latestStats$.next(results); // Always update the latest stats + return results; + } + + private async getRuleMigrationsStatsWithRetry( + params: GetRuleMigrationsStatsAllParams = {}, + sleepSecs?: number + ): Promise { + if (sleepSecs) { + await new Promise((resolve) => setTimeout(resolve, sleepSecs * 1000)); + } + + return getRuleMigrationsStatsAll(params).catch((e) => { + // Retry only on network errors (no status) and 503s, otherwise throw + if (e.status && e.status !== 503) { + throw e; + } + const nextSleepSecs = sleepSecs ? sleepSecs * 2 : 1; // Exponential backoff + if (nextSleepSecs > 60) { + // Wait for a minutes max (two minutes total) for the API to be available again + throw e; + } + return this.getRuleMigrationsStatsWithRetry(params, nextSleepSecs); + }); + } + + private async startTaskStatsPolling(): Promise { let pendingMigrationIds: string[] = []; do { - const results = await this.fetchRuleMigrationTasksStats(); - this.latestStats$.next(results); + const results = await this.getRuleMigrationsStats(); if (pendingMigrationIds.length > 0) { // send notifications for finished migrations @@ -91,22 +183,13 @@ export class SiemRulesMigrationsService { const connectorId = this.connectorIdStorage.get(); if (connectorId) { // automatically resume stopped migrations when connector is available - await startRuleMigration({ - migrationId: result.id, - body: { connector_id: connectorId }, - signal: this.signal, - }); + await startRuleMigration({ migrationId: result.id, connectorId }); pendingMigrationIds.push(result.id); } } } - await new Promise((resolve) => setTimeout(resolve, this.pollingInterval)); + await new Promise((resolve) => setTimeout(resolve, REQUEST_POLLING_INTERVAL_MS)); } while (pendingMigrationIds.length > 0); } - - private async fetchRuleMigrationTasksStats(): Promise { - const stats = await getRuleMigrationsStatsAll({ signal: this.signal }); - return stats.map((stat, index) => ({ ...stat, number: index + 1 })); // the array order (by creation) is guaranteed by the API - } } diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/storage.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/storage.ts index bbf53ec3a5404..874f1b05dfab6 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/storage.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/storage.ts @@ -7,23 +7,37 @@ import { Storage } from '@kbn/kibana-utils-plugin/public'; -export class RuleMigrationsStorage { - private readonly storage = new Storage(localStorage); +const storages = { + local: new Storage(localStorage), + session: new Storage(sessionStorage), +} as const; + +interface Options { + customKey?: string; + storageType?: keyof typeof storages; +} + +export class RuleMigrationsStorage { + private readonly storage: Storage; public key: string; - constructor(private readonly objectName: string, spaceId?: string) { - this.key = this.getStorageKey(spaceId); + constructor(private readonly objectName: string, private readonly options?: Options) { + this.storage = storages[this.options?.storageType ?? 'local']; + this.key = this.getKey(); } - private getStorageKey(spaceId: string = 'default') { + private getKey(spaceId: string = 'default'): string { + if (this.options?.customKey) { + return this.options.customKey; + } return `siem_migrations.rules.${this.objectName}.${spaceId}`; } public setSpaceId(spaceId: string) { - this.key = this.getStorageKey(spaceId); + this.key = this.getKey(spaceId); } - public get = () => this.storage.get(this.key); - public set = (value: string) => this.storage.set(this.key, value); + public get = (): T | undefined => this.storage.get(this.key); + public set = (value: T) => this.storage.set(this.key, value); public remove = () => this.storage.remove(this.key); } diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/success_notification.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/success_notification.tsx index 830e3c5f4a531..f87755943f830 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/success_notification.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/success_notification.tsx @@ -17,9 +17,9 @@ import type { ToastInput } from '@kbn/core-notifications-browser'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiButton, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; -import type { RuleMigrationTask } from '../types'; +import type { RuleMigrationStats } from '../types'; -export const getSuccessToast = (migration: RuleMigrationTask, core: CoreStart): ToastInput => ({ +export const getSuccessToast = (migration: RuleMigrationStats, core: CoreStart): ToastInput => ({ color: 'success', iconType: 'check', toastLifeTimeMs: 1000 * 60 * 30, // 30 minutes @@ -34,7 +34,7 @@ export const getSuccessToast = (migration: RuleMigrationTask, core: CoreStart): ), }); -const SuccessToastContent: React.FC<{ migration: RuleMigrationTask }> = ({ migration }) => { +const SuccessToastContent: React.FC<{ migration: RuleMigrationStats }> = ({ migration }) => { const navigation = { deepLinkId: SecurityPageName.siemMigrationsRules, path: migration.id }; const { navigateTo, getAppUrl } = useNavigation(); diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/service/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/translations.ts new file mode 100644 index 0000000000000..41a897a56e9df --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/service/translations.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 { i18n } from '@kbn/i18n'; + +export const POLLING_ERROR = i18n.translate( + 'xpack.securitySolution.siemMigrations.rulesService.pollingError', + { defaultMessage: 'Error fetching rule migrations' } +); + +export const MISSING_CONNECTOR_ERROR = i18n.translate( + 'xpack.securitySolution.siemMigrations.rulesService.create.missingConnectorError', + { defaultMessage: 'Connector not defined. Please set a connector ID first.' } +); + +export const EMPTY_RULES_ERROR = i18n.translate( + 'xpack.securitySolution.siemMigrations.rulesService.create.emptyRulesError', + { defaultMessage: 'Can not create a migration without rules' } +); diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts index 4c704e97179c0..bcc11327d1051 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/types.ts @@ -5,9 +5,11 @@ * 2.0. */ +import type { SiemMigrationTaskStatus } from '../../../common/siem_migrations/constants'; import type { RuleMigrationTaskStats } from '../../../common/siem_migrations/model/rule_migration.gen'; -export interface RuleMigrationTask extends RuleMigrationTaskStats { +export interface RuleMigrationStats extends RuleMigrationTaskStats { + status: SiemMigrationTaskStatus; /** The sequential number of the migration */ number: number; } diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/create.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/create.ts index 21a17bb7834a1..7c94631be6b65 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/create.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/create.ts @@ -8,9 +8,10 @@ import type { IKibanaResponse, Logger } from '@kbn/core/server'; import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import { v4 as uuidV4 } from 'uuid'; -import { SIEM_RULE_MIGRATIONS_PATH } from '../../../../../common/siem_migrations/constants'; +import { SIEM_RULE_MIGRATION_CREATE_PATH } from '../../../../../common/siem_migrations/constants'; import { CreateRuleMigrationRequestBody, + CreateRuleMigrationRequestParams, type CreateRuleMigrationResponse, } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; import type { SecuritySolutionPluginRouter } from '../../../../types'; @@ -23,7 +24,7 @@ export const registerSiemRuleMigrationsCreateRoute = ( ) => { router.versioned .post({ - path: SIEM_RULE_MIGRATIONS_PATH, + path: SIEM_RULE_MIGRATION_CREATE_PATH, access: 'internal', security: { authz: { requiredPrivileges: ['securitySolution'] } }, }) @@ -31,18 +32,20 @@ export const registerSiemRuleMigrationsCreateRoute = ( { version: '1', validate: { - request: { body: buildRouteValidationWithZod(CreateRuleMigrationRequestBody) }, + request: { + body: buildRouteValidationWithZod(CreateRuleMigrationRequestBody), + params: buildRouteValidationWithZod(CreateRuleMigrationRequestParams), + }, }, }, withLicense( async (context, req, res): Promise> => { const originalRules = req.body; + const migrationId = req.params.migration_id ?? uuidV4(); try { const ctx = await context.resolve(['securitySolution']); const ruleMigrationsClient = ctx.securitySolution.getSiemRuleMigrationsClient(); - const migrationId = uuidV4(); - const ruleMigrations = originalRules.map((originalRule) => ({ migration_id: migrationId, original_rule: originalRule, diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get.ts index b9645a3de374e..dd13a75cdf83a 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get.ts @@ -14,6 +14,7 @@ import { } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; import { SIEM_RULE_MIGRATION_PATH } from '../../../../../common/siem_migrations/constants'; import type { SecuritySolutionPluginRouter } from '../../../../types'; +import type { RuleMigrationGetOptions } from '../data/rule_migrations_data_rules_client'; import { withLicense } from './util/with_license'; export const registerSiemRuleMigrationsGetRoute = ( @@ -43,20 +44,13 @@ export const registerSiemRuleMigrationsGetRoute = ( const ctx = await context.resolve(['securitySolution']); const ruleMigrationsClient = ctx.securitySolution.getSiemRuleMigrationsClient(); - let from = 0; - if (page && perPage) { - from = page * perPage; - } - const size = perPage; + const options: RuleMigrationGetOptions = { + filters: { searchTerm }, + size: perPage, + from: page && perPage ? page * perPage : 0, + }; - const result = await ruleMigrationsClient.data.rules.get( - { - migrationId, - searchTerm, - }, - from, - size - ); + const result = await ruleMigrationsClient.data.rules.get(migrationId, options); return res.ok({ body: result }); } catch (err) { diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts index df86a1f953656..2fce95be9dafe 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts @@ -177,10 +177,8 @@ export const installTranslated = async ({ const detectionRulesClient = securitySolutionContext.getDetectionRulesClient(); const ruleMigrationsClient = securitySolutionContext.getSiemRuleMigrationsClient(); - const { data: rulesToInstall } = await ruleMigrationsClient.data.rules.get({ - migrationId, - ids, - installable: true, + const { data: rulesToInstall } = await ruleMigrationsClient.data.rules.get(migrationId, { + filters: { ids, installable: true }, }); const { customRulesToInstall, prebuiltRulesToInstall } = rulesToInstall.reduce( diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts index 209f2e4416e16..716d19ce16cdf 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts @@ -38,32 +38,23 @@ export type UpdateRuleMigrationInput = { elastic_rule?: Partial } & export type RuleMigrationDataStats = Omit; export type RuleMigrationAllDataStats = RuleMigrationDataStats[]; -export interface RuleMigrationFilterOptions { - migrationId: string; +export interface RuleMigrationFilters { status?: SiemMigrationStatus | SiemMigrationStatus[]; ids?: string[]; installable?: boolean; searchTerm?: string; } +export interface RuleMigrationGetOptions { + filters?: RuleMigrationFilters; + from?: number; + size?: number; +} /* BULK_MAX_SIZE defines the number to break down the bulk operations by. * The 500 number was chosen as a reasonable number to avoid large payloads. It can be adjusted if needed. */ const BULK_MAX_SIZE = 500 as const; - -const getInstallableConditions = (): QueryDslQueryContainer[] => { - return [ - { term: { translation_result: SiemMigrationRuleTranslationResult.FULL } }, - { - nested: { - path: 'elastic_rule', - query: { - bool: { must_not: { exists: { field: 'elastic_rule.id' } } }, - }, - }, - }, - ]; -}; +/* The default number of rule migrations to retrieve in a single GET request. */ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient { /** Indexes an array of rule migrations to be processed */ @@ -128,12 +119,11 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient /** Retrieves an array of rule documents of a specific migrations */ async get( - filters: RuleMigrationFilterOptions, - from?: number, - size?: number + migrationId: string, + { filters = {}, from, size }: RuleMigrationGetOptions = {} ): Promise<{ total: number; data: StoredRuleMigration[] }> { const index = await this.getIndexName(); - const query = this.getFilterQuery(filters); + const query = this.getFilterQuery(migrationId, { ...filters }); const result = await this.esClient .search({ index, query, sort: '_doc', from, size }) @@ -155,7 +145,7 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient */ async takePending(migrationId: string, size: number): Promise { const index = await this.getIndexName(); - const query = this.getFilterQuery({ migrationId, status: SiemMigrationStatus.PENDING }); + const query = this.getFilterQuery(migrationId, { status: SiemMigrationStatus.PENDING }); const storedRuleMigrations = await this.esClient .search({ index, query, sort: '_doc', size }) @@ -234,7 +224,7 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient { refresh = false }: { refresh?: boolean } = {} ): Promise { const index = await this.getIndexName(); - const query = this.getFilterQuery({ migrationId, status: statusToQuery }); + const query = this.getFilterQuery(migrationId, { status: statusToQuery }); const script = { source: `ctx._source['status'] = '${statusToUpdate}'` }; await this.esClient.updateByQuery({ index, query, script, refresh }).catch((error) => { this.logger.error(`Error updating rule migrations status: ${error.message}`); @@ -245,24 +235,11 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient /** Retrieves the translation stats for the rule migrations with the provided id */ async getTranslationStats(migrationId: string): Promise { const index = await this.getIndexName(); - const query = this.getFilterQuery({ migrationId }); + const query = this.getFilterQuery(migrationId); const aggregations = { - prebuilt: { - filter: { - nested: { - path: 'elastic_rule', - query: { exists: { field: 'elastic_rule.prebuilt_rule_id' } }, - }, - }, - }, - installable: { - filter: { - bool: { - must: getInstallableConditions(), - }, - }, - }, + prebuilt: { filter: conditions.isPrebuilt() }, + installable: { filter: { bool: { must: conditions.isInstallable() } } }, }; const result = await this.esClient .search({ index, query, aggregations, _source: false }) @@ -288,7 +265,7 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient /** Retrieves the stats for the rule migrations with the provided id */ async getStats(migrationId: string): Promise { const index = await this.getIndexName(); - const query = this.getFilterQuery({ migrationId }); + const query = this.getFilterQuery(migrationId); const aggregations = { pending: { filter: { term: { status: SiemMigrationStatus.PENDING } } }, processing: { filter: { term: { status: SiemMigrationStatus.PROCESSING } } }, @@ -358,13 +335,10 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient })); } - private getFilterQuery({ - migrationId, - status, - ids, - installable, - searchTerm, - }: RuleMigrationFilterOptions): QueryDslQueryContainer { + private getFilterQuery( + migrationId: string, + { status, ids, installable, searchTerm }: RuleMigrationFilters = {} + ): QueryDslQueryContainer { const filter: QueryDslQueryContainer[] = [{ term: { migration_id: migrationId } }]; if (status) { if (Array.isArray(status)) { @@ -377,16 +351,44 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient filter.push({ terms: { _id: ids } }); } if (installable) { - filter.push(...getInstallableConditions()); + filter.push(...conditions.isInstallable()); } if (searchTerm?.length) { - filter.push({ - nested: { - path: 'elastic_rule', - query: { match: { 'elastic_rule.title': searchTerm } }, - }, - }); + filter.push(conditions.matchTitle(searchTerm)); } return { bool: { filter } }; } } + +const conditions = { + isFullyTranslated(): QueryDslQueryContainer { + return { term: { translation_result: SiemMigrationRuleTranslationResult.FULL } }; + }, + isNotInstalled(): QueryDslQueryContainer { + return { + nested: { + path: 'elastic_rule', + query: { bool: { must_not: { exists: { field: 'elastic_rule.id' } } } }, + }, + }; + }, + isPrebuilt(): QueryDslQueryContainer { + return { + nested: { + path: 'elastic_rule', + query: { exists: { field: 'elastic_rule.prebuilt_rule_id' } }, + }, + }; + }, + matchTitle(title: string): QueryDslQueryContainer { + return { + nested: { + path: 'elastic_rule', + query: { match: { 'elastic_rule.title': title } }, + }, + }; + }, + isInstallable(): QueryDslQueryContainer[] { + return [this.isFullyTranslated(), this.isNotInstalled()]; + }, +}; diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts index 09a4bef34c279..f63953192844b 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_field_maps.ts @@ -23,7 +23,8 @@ export const ruleMigrationsFieldMap: FieldMap async (state) => { - const mitreAttackIds = state.original_rule.mitre_attack_ids; + const mitreAttackIds = state.original_rule.annotations?.mitre_attack; if (!mitreAttackIds?.length) { return {}; } diff --git a/x-pack/test/api_integration/services/security_solution_api.gen.ts b/x-pack/test/api_integration/services/security_solution_api.gen.ts index 3561ff6fac35a..98fefc3a74aa4 100644 --- a/x-pack/test/api_integration/services/security_solution_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_api.gen.ts @@ -32,7 +32,10 @@ import { CopyTimelineRequestBodyInput } from '@kbn/security-solution-plugin/comm import { CreateAlertsMigrationRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/signals_migration/create_signals_migration/create_signals_migration.gen'; import { CreateAssetCriticalityRecordRequestBodyInput } from '@kbn/security-solution-plugin/common/api/entity_analytics/asset_criticality/create_asset_criticality.gen'; import { CreateRuleRequestBodyInput } from '@kbn/security-solution-plugin/common/api/detection_engine/rule_management/crud/create_rule/create_rule_route.gen'; -import { CreateRuleMigrationRequestBodyInput } from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; +import { + CreateRuleMigrationRequestParamsInput, + CreateRuleMigrationRequestBodyInput, +} from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; import { CreateTimelinesRequestBodyInput } from '@kbn/security-solution-plugin/common/api/timeline/create_timelines/create_timelines_route.gen'; import { CreateUpdateProtectionUpdatesNoteRequestParamsInput, @@ -374,7 +377,12 @@ If a record already exists for the specified entity, that record is overwritten */ createRuleMigration(props: CreateRuleMigrationProps, kibanaSpace: string = 'default') { return supertest - .post(routeWithNamespace('/internal/siem_migrations/rules', kibanaSpace)) + .post( + routeWithNamespace( + replaceParams('/internal/siem_migrations/rules/{migration_id}', props.params), + kibanaSpace + ) + ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '1') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') @@ -1595,6 +1603,7 @@ export interface CreateRuleProps { body: CreateRuleRequestBodyInput; } export interface CreateRuleMigrationProps { + params: CreateRuleMigrationRequestParamsInput; body: CreateRuleMigrationRequestBodyInput; } export interface CreateTimelinesProps { From 60cf6ab69831c1a93daccf977488ffc5732fe4f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loix?= Date: Thu, 5 Dec 2024 16:39:59 +0000 Subject: [PATCH 100/141] [DarkMode] Deprecate advanced setting (#202993) --- docs/management/advanced-options.asciidoc | 2 +- .../core-ui-settings-server-internal/src/settings/theme.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/management/advanced-options.asciidoc b/docs/management/advanced-options.asciidoc index fde70b5ffca0e..a2af3b91931af 100644 --- a/docs/management/advanced-options.asciidoc +++ b/docs/management/advanced-options.asciidoc @@ -187,7 +187,7 @@ this setting stores part of the URL in your browser session to keep the URL short. [[theme-darkmode]]`theme:darkMode`:: -The UI theme that the {kib} UI should use. +deprecated:[9.0.0] The UI theme that the {kib} UI should use. Set to `enabled` or `disabled` to enable or disable the dark theme. Set to `system` to have the {kib} UI theme follow the system theme. You must refresh the page to apply the setting. diff --git a/packages/core/ui-settings/core-ui-settings-server-internal/src/settings/theme.ts b/packages/core/ui-settings/core-ui-settings-server-internal/src/settings/theme.ts index 36324f951952e..7ee214fa5d071 100644 --- a/packages/core/ui-settings/core-ui-settings-server-internal/src/settings/theme.ts +++ b/packages/core/ui-settings/core-ui-settings-server-internal/src/settings/theme.ts @@ -65,6 +65,12 @@ export const getThemeSettings = ( defaultMessage: `Sync with system`, }), }, + deprecation: { + message: i18n.translate('core.ui_settings.params.darkModeDeprecation', { + defaultMessage: 'This setting is deprecated and will be removed in Kibana 10.0.', + }), + docLinksKey: 'generalSettings', + }, requiresPageReload: true, schema: schema.oneOf([ schema.literal('enabled'), From 24d9de187ddcde10c1c30898051d6f762d559d72 Mon Sep 17 00:00:00 2001 From: "Eyo O. Eyo" <7893459+eokoneyo@users.noreply.github.com> Date: Thu, 5 Dec 2024 19:20:43 +0100 Subject: [PATCH 101/141] make emotion typing global (#200958) ## Summary Informed by https://github.com/elastic/eui/discussions/6828#discussioncomment-11247425, closes https://github.com/elastic/kibana-team/issues/1299 This PR consolidates typings to provide adequate typing for the `css` prop EUI components accept. Placing the required typing file in the typing directory means that all other plugins that already reference this directory in their `tsconfig.json` would get this improvement by default. --- typings/emotion.d.ts | 16 ++++++++++++ x-pack/packages/ml/data_grid/emotion.d.ts | 14 ---------- x-pack/packages/ml/data_grid/tsconfig.json | 2 +- .../common/lib/kibana/kibana_react.mock.tsx | 6 ++--- .../empty_value/empty_value.test.tsx | 2 +- .../public/components/empty_value/index.tsx | 7 ++--- .../alert_details_app_section/index.tsx | 2 ++ .../public/pages/alerts/alerts.test.tsx | 7 ++--- x-pack/plugins/osquery/emotion.d.ts | 14 ---------- x-pack/plugins/osquery/tsconfig.json | 4 +-- .../components/expandable_panel.test.tsx | 26 +++++++++---------- 11 files changed, 40 insertions(+), 60 deletions(-) create mode 100644 typings/emotion.d.ts delete mode 100644 x-pack/packages/ml/data_grid/emotion.d.ts delete mode 100644 x-pack/plugins/osquery/emotion.d.ts diff --git a/typings/emotion.d.ts b/typings/emotion.d.ts new file mode 100644 index 0000000000000..cdcacdcc90f38 --- /dev/null +++ b/typings/emotion.d.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import '@emotion/react'; +import type { UseEuiTheme } from '@elastic/eui'; + +declare module '@emotion/react' { + // eslint-disable-next-line @typescript-eslint/no-empty-interface + export interface Theme extends UseEuiTheme {} +} diff --git a/x-pack/packages/ml/data_grid/emotion.d.ts b/x-pack/packages/ml/data_grid/emotion.d.ts deleted file mode 100644 index 213178080e536..0000000000000 --- a/x-pack/packages/ml/data_grid/emotion.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import '@emotion/react'; -import type { UseEuiTheme } from '@elastic/eui'; - -declare module '@emotion/react' { - // eslint-disable-next-line @typescript-eslint/no-empty-interface - export interface Theme extends UseEuiTheme {} -} diff --git a/x-pack/packages/ml/data_grid/tsconfig.json b/x-pack/packages/ml/data_grid/tsconfig.json index 590cb613b7bf0..16e44151edb55 100644 --- a/x-pack/packages/ml/data_grid/tsconfig.json +++ b/x-pack/packages/ml/data_grid/tsconfig.json @@ -14,7 +14,7 @@ "include": [ "**/*.ts", "**/*.tsx", - "./emotion.d.ts", // Emotion EUI theme typing + "../../../../typings/emotion.d.ts" ], "exclude": [ "target/**/*" diff --git a/x-pack/plugins/cases/public/common/lib/kibana/kibana_react.mock.tsx b/x-pack/plugins/cases/public/common/lib/kibana/kibana_react.mock.tsx index 48ef98c8dffa8..e644c9604d495 100644 --- a/x-pack/plugins/cases/public/common/lib/kibana/kibana_react.mock.tsx +++ b/x-pack/plugins/cases/public/common/lib/kibana/kibana_react.mock.tsx @@ -15,7 +15,7 @@ import { coreMock } from '@kbn/core/public/mocks'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import type { ILicense } from '@kbn/licensing-plugin/public'; import type { StartServices } from '../../../types'; -import type { EuiTheme } from '@kbn/kibana-react-plugin/common'; +import type { UseEuiTheme } from '@elastic/eui'; import { securityMock } from '@kbn/security-plugin/public/mocks'; import { spacesPluginMock } from '@kbn/spaces-plugin/public/mocks'; import { triggersActionsUiMock } from '@kbn/triggers-actions-ui-plugin/public/mocks'; @@ -118,5 +118,5 @@ export const createKibanaContextProviderMock = () => { React.createElement(KibanaContextProvider, { services }, children); }; -export const getMockTheme = (partialTheme: RecursivePartial): EuiTheme => - partialTheme as EuiTheme; +export const getMockTheme = (partialTheme: RecursivePartial): UseEuiTheme => + partialTheme as UseEuiTheme; diff --git a/x-pack/plugins/cases/public/components/empty_value/empty_value.test.tsx b/x-pack/plugins/cases/public/components/empty_value/empty_value.test.tsx index d49dd2c17bfb5..049a8e0d56635 100644 --- a/x-pack/plugins/cases/public/components/empty_value/empty_value.test.tsx +++ b/x-pack/plugins/cases/public/components/empty_value/empty_value.test.tsx @@ -21,7 +21,7 @@ import { import { getMockTheme } from '../../common/lib/kibana/kibana_react.mock'; describe('EmptyValue', () => { - const mockTheme = getMockTheme({ eui: { euiColorMediumShade: '#ece' } }); + const mockTheme = getMockTheme({ euiTheme: { colors: { mediumShade: '#ece' } } }); test('it renders against snapshot', () => { const wrapper = shallow(

    {getEmptyString()}

    ); diff --git a/x-pack/plugins/cases/public/components/empty_value/index.tsx b/x-pack/plugins/cases/public/components/empty_value/index.tsx index c89cd8fae91e6..8773174558de3 100644 --- a/x-pack/plugins/cases/public/components/empty_value/index.tsx +++ b/x-pack/plugins/cases/public/components/empty_value/index.tsx @@ -7,14 +7,11 @@ import { get, isString } from 'lodash/fp'; import React from 'react'; -import { css } from '@emotion/react'; -import { euiThemeVars } from '@kbn/ui-theme'; +import type { UseEuiTheme } from '@elastic/eui'; import * as i18n from './translations'; -const emptyWrapperCss = css` - color: ${euiThemeVars.euiColorMediumShade}; -`; +const emptyWrapperCss = ({ euiTheme }: UseEuiTheme) => ({ color: euiTheme.colors.mediumShade }); export const getEmptyValue = () => '—'; export const getEmptyString = () => `(${i18n.EMPTY_STRING})`; diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx index 36e2e91af9db0..2e8b417972e91 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx @@ -93,6 +93,7 @@ const AlertDetailsAppSection = ({ rule, alert }: AlertDetailsAppSectionProps) => ({ eui: { ...euiDarkVars, euiColorLightShade: '#ece' }, darkMode: true })} - > + {children} diff --git a/x-pack/plugins/osquery/emotion.d.ts b/x-pack/plugins/osquery/emotion.d.ts deleted file mode 100644 index 213178080e536..0000000000000 --- a/x-pack/plugins/osquery/emotion.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import '@emotion/react'; -import type { UseEuiTheme } from '@elastic/eui'; - -declare module '@emotion/react' { - // eslint-disable-next-line @typescript-eslint/no-empty-interface - export interface Theme extends UseEuiTheme {} -} diff --git a/x-pack/plugins/osquery/tsconfig.json b/x-pack/plugins/osquery/tsconfig.json index 2c3426ad033cd..141683d7e500f 100644 --- a/x-pack/plugins/osquery/tsconfig.json +++ b/x-pack/plugins/osquery/tsconfig.json @@ -13,9 +13,7 @@ "server/**/*", "../../../typings/**/*", // ECS and Osquery schema files - "public/common/schemas/*/**.json", - // Emotion theme typing - "./emotion.d.ts" + "public/common/schemas/*/**.json" ], "kbn_references": [ "@kbn/core", diff --git a/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.test.tsx b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.test.tsx index 87592b608613f..2be968669057c 100644 --- a/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/shared/components/expandable_panel.test.tsx @@ -14,11 +14,9 @@ import { EXPANDABLE_PANEL_HEADER_TITLE_ICON_TEST_ID, EXPANDABLE_PANEL_TOGGLE_ICON_TEST_ID, } from './test_ids'; -import { ThemeProvider } from '@emotion/react'; +import { EuiThemeProvider as ThemeProvider } from '@elastic/eui'; import { ExpandablePanel } from './expandable_panel'; -const mockTheme = { eui: { euiColorMediumShade: '#ece' } }; - const TEST_ID = 'test-id'; const defaultProps = { header: { @@ -33,7 +31,7 @@ describe('', () => { describe('panel is not expandable by default', () => { it('should render non-expandable panel by default', () => { const { getByTestId, queryByTestId } = render( - + {children} ); @@ -54,7 +52,7 @@ describe('', () => { }, }; const { getByTestId, queryByTestId } = render( - + {children} ); @@ -70,7 +68,7 @@ describe('', () => { it('should only render left section of panel header when headerContent is not passed', () => { const { getByTestId, queryByTestId } = render( - + {children} ); @@ -88,7 +86,7 @@ describe('', () => { header: { ...defaultProps.header, headerContent: <>{'test header content'} }, }; const { getByTestId } = render( - + {children} ); @@ -105,7 +103,7 @@ describe('', () => { it('should not render content when content is null', () => { const { queryByTestId } = render( - + ); @@ -123,7 +121,7 @@ describe('', () => { it('should render panel with toggle and collapsed by default', () => { const { getByTestId, queryByTestId } = render( - + {children} ); @@ -135,7 +133,7 @@ describe('', () => { it('click toggle button should expand the panel', () => { const { getByTestId } = render( - + {children} ); @@ -152,7 +150,7 @@ describe('', () => { it('should not render toggle or content when content is null', () => { const { queryByTestId } = render( - + ); @@ -169,7 +167,7 @@ describe('', () => { it('should render header and content', () => { const { getByTestId } = render( - + {children} ); @@ -184,7 +182,7 @@ describe('', () => { it('click toggle button should collapse the panel', () => { const { getByTestId, queryByTestId } = render( - + {children} ); @@ -200,7 +198,7 @@ describe('', () => { it('should not render content when content is null', () => { const { queryByTestId } = render( - + ); From 0d93454de3851c1467b1acfb4965f869c821e92e Mon Sep 17 00:00:00 2001 From: Kevin Delemme Date: Thu, 5 Dec 2024 13:51:03 -0500 Subject: [PATCH 102/141] feat(slo): SLO grouping values selector (#202364) --- .../src/rest_specs/routes/get_instances.ts | 22 --- .../rest_specs/routes/get_slo_groupings.ts | 37 +++++ .../src/rest_specs/routes/index.ts | 2 +- .../slo/public/components/loading_state.tsx | 19 +++ .../auto_refresh_button.tsx | 2 +- .../slo/public/hooks/query_key_factory.ts | 9 + .../groupings/slo_grouping_value_selector.tsx | 149 +++++++++++++++++ .../components/groupings/slo_groupings.tsx | 44 +++++ .../components/header_control.stories.tsx | 8 +- .../slo_details/components/header_control.tsx | 37 ++--- .../slo_details/components/header_title.tsx | 14 +- .../hooks/use_fetch_slo_instances.tsx | 67 ++++++++ .../hooks/use_slo_details_tabs.tsx | 6 +- .../public/pages/slo_details/slo_details.tsx | 27 +-- .../slo/server/domain/models/common.ts | 2 + .../slo/server/domain/models/slo.ts | 1 - .../slo/server/routes/slo/route.ts | 28 ++-- .../get_slo_instances.test.ts.snap | 41 ----- .../server/services/get_slo_groupings.test.ts | 93 +++++++++++ .../slo/server/services/get_slo_groupings.ts | 157 ++++++++++++++++++ .../server/services/get_slo_instances.test.ts | 70 -------- .../slo/server/services/get_slo_instances.ts | 50 ------ .../slo/server/services/index.ts | 2 +- .../slo/server/services/slo_settings.ts | 10 +- 24 files changed, 644 insertions(+), 253 deletions(-) delete mode 100644 x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts create mode 100644 x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_slo_groupings.ts create mode 100644 x-pack/plugins/observability_solution/slo/public/components/loading_state.tsx create mode 100644 x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/groupings/slo_grouping_value_selector.tsx create mode 100644 x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/groupings/slo_groupings.tsx create mode 100644 x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_fetch_slo_instances.tsx delete mode 100644 x-pack/plugins/observability_solution/slo/server/services/__snapshots__/get_slo_instances.test.ts.snap create mode 100644 x-pack/plugins/observability_solution/slo/server/services/get_slo_groupings.test.ts create mode 100644 x-pack/plugins/observability_solution/slo/server/services/get_slo_groupings.ts delete mode 100644 x-pack/plugins/observability_solution/slo/server/services/get_slo_instances.test.ts delete mode 100644 x-pack/plugins/observability_solution/slo/server/services/get_slo_instances.ts diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts deleted file mode 100644 index da8f59903eebf..0000000000000 --- a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -import * as t from 'io-ts'; -import { allOrAnyStringOrArray } from '../../schema'; - -const getSLOInstancesParamsSchema = t.type({ - path: t.type({ id: t.string }), -}); - -const getSLOInstancesResponseSchema = t.type({ - groupBy: allOrAnyStringOrArray, - instances: t.array(t.string), -}); - -type GetSLOInstancesResponse = t.OutputOf; - -export { getSLOInstancesParamsSchema, getSLOInstancesResponseSchema }; -export type { GetSLOInstancesResponse }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_slo_groupings.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_slo_groupings.ts new file mode 100644 index 0000000000000..e0418189e3ae2 --- /dev/null +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_slo_groupings.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 * as t from 'io-ts'; +import { toBooleanRt } from '@kbn/io-ts-utils'; + +const getSLOGroupingsParamsSchema = t.type({ + path: t.type({ id: t.string }), + query: t.intersection([ + t.type({ + instanceId: t.string, + groupingKey: t.string, + }), + t.partial({ + search: t.string, + afterKey: t.string, + size: t.string, + excludeStale: toBooleanRt, + remoteName: t.string, + }), + ]), +}); + +const getSLOGroupingsResponseSchema = t.type({ + groupingKey: t.string, + values: t.array(t.string), + afterKey: t.union([t.string, t.undefined]), +}); + +type GetSLOGroupingsParams = t.TypeOf; +type GetSLOGroupingsResponse = t.OutputOf; + +export { getSLOGroupingsParamsSchema, getSLOGroupingsResponseSchema }; +export type { GetSLOGroupingsResponse, GetSLOGroupingsParams }; diff --git a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/index.ts b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/index.ts index 93c06929dff29..32952e649beb8 100644 --- a/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/index.ts +++ b/x-pack/packages/kbn-slo-schema/src/rest_specs/routes/index.ts @@ -13,7 +13,7 @@ export * from './find_group'; export * from './find_definition'; export * from './get'; export * from './get_burn_rates'; -export * from './get_instances'; +export * from './get_slo_groupings'; export * from './get_preview_data'; export * from './reset'; export * from './manage'; diff --git a/x-pack/plugins/observability_solution/slo/public/components/loading_state.tsx b/x-pack/plugins/observability_solution/slo/public/components/loading_state.tsx new file mode 100644 index 0000000000000..6cda8bc13b58e --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/components/loading_state.tsx @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner } from '@elastic/eui'; +import React from 'react'; + +export function LoadingState({ dataTestSubj }: { dataTestSubj?: string }) { + return ( + + + + + + ); +} diff --git a/x-pack/plugins/observability_solution/slo/public/components/slo/auto_refresh_button/auto_refresh_button.tsx b/x-pack/plugins/observability_solution/slo/public/components/slo/auto_refresh_button/auto_refresh_button.tsx index bb766f2ad4230..9304bfa9cdb76 100644 --- a/x-pack/plugins/observability_solution/slo/public/components/slo/auto_refresh_button/auto_refresh_button.tsx +++ b/x-pack/plugins/observability_solution/slo/public/components/slo/auto_refresh_button/auto_refresh_button.tsx @@ -32,7 +32,7 @@ export function AutoRefreshButton({ disabled, isAutoRefreshing, onClick }: Props data-test-subj="autoRefreshButton" disabled={disabled} iconSide="left" - iconType="play" + iconType="refresh" onClick={onClick} > {i18n.translate('xpack.slo.slosPage.autoRefreshButtonLabel', { diff --git a/x-pack/plugins/observability_solution/slo/public/hooks/query_key_factory.ts b/x-pack/plugins/observability_solution/slo/public/hooks/query_key_factory.ts index 93f8a76b71db0..fd795ad328b97 100644 --- a/x-pack/plugins/observability_solution/slo/public/hooks/query_key_factory.ts +++ b/x-pack/plugins/observability_solution/slo/public/hooks/query_key_factory.ts @@ -67,6 +67,15 @@ export const sloKeys = { groupings?: Record ) => [...sloKeys.all, 'preview', indicator, range, groupings] as const, burnRateRules: (search: string) => [...sloKeys.all, 'burnRateRules', search], + groupings: (params: { + sloId: string; + instanceId: string; + groupingKey: string; + search?: string; + afterKey?: string; + excludeStale?: boolean; + remoteName?: string; + }) => [...sloKeys.all, 'fetch_slo_groupings', params] as const, }; export type SloKeys = typeof sloKeys; diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/groupings/slo_grouping_value_selector.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/groupings/slo_grouping_value_selector.tsx new file mode 100644 index 0000000000000..f53acffc12625 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/groupings/slo_grouping_value_selector.tsx @@ -0,0 +1,149 @@ +/* + * 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 { + EuiButtonIcon, + EuiComboBox, + EuiComboBoxOptionOption, + EuiCopy, + EuiFlexItem, +} from '@elastic/eui'; +import { css } from '@emotion/react'; +import { i18n } from '@kbn/i18n'; +import { ALL_VALUE, SLOWithSummaryResponse } from '@kbn/slo-schema'; +import React, { useEffect, useState } from 'react'; +import { useHistory, useLocation } from 'react-router-dom'; +import useDebounce from 'react-use/lib/useDebounce'; +import { SLOS_BASE_PATH } from '../../../../../common/locators/paths'; +import { useFetchSloGroupings } from '../../hooks/use_fetch_slo_instances'; +import { useGetQueryParams } from '../../hooks/use_get_query_params'; + +interface Props { + slo: SLOWithSummaryResponse; + groupingKey: string; + value?: string; +} + +interface Field { + label: string; + value: string; +} + +export function SLOGroupingValueSelector({ slo, groupingKey, value }: Props) { + const isAvailable = window.location.pathname.includes(SLOS_BASE_PATH); + const { search: searchParams } = useLocation(); + const history = useHistory(); + const { remoteName } = useGetQueryParams(); + + const [currentValue, setCurrentValue] = useState(value); + const [options, setOptions] = useState([]); + const [search, setSearch] = useState(undefined); + const [debouncedSearch, setDebouncedSearch] = useState(undefined); + useDebounce(() => setDebouncedSearch(search), 500, [search]); + + const { isLoading, isError, data } = useFetchSloGroupings({ + sloId: slo.id, + groupingKey, + instanceId: slo.instanceId ?? ALL_VALUE, + search: debouncedSearch, + remoteName, + }); + + useEffect(() => { + if (data) { + setSearch(undefined); + setDebouncedSearch(undefined); + setOptions(data.values.map(toField)); + } + }, [data]); + + const onChange = (selected: Array>) => { + const newValue = selected[0].value; + if (!newValue) return; + setCurrentValue(newValue); + + const urlSearchParams = new URLSearchParams(searchParams); + const newGroupings = { ...slo.groupings, [groupingKey]: newValue }; + urlSearchParams.set('instanceId', toInstanceId(newGroupings, slo.groupBy)); + history.replace({ + search: urlSearchParams.toString(), + }); + }; + + return ( + + + css={css` + max-width: 500px; + `} + isClearable={false} + compressed + prepend={groupingKey} + append={ + currentValue ? ( + + {(copy) => ( + + )} + + ) : ( + + ) + } + singleSelection={{ asPlainText: true }} + options={options} + isLoading={isLoading} + isDisabled={isError || !isAvailable} + placeholder={i18n.translate('xpack.slo.sLOGroupingValueSelector.placeholder', { + defaultMessage: 'Select a group value', + })} + selectedOptions={currentValue ? [toField(currentValue)] : []} + onChange={onChange} + truncationProps={{ + truncation: 'end', + }} + onSearchChange={(searchValue: string) => { + if (searchValue !== '') { + setSearch(searchValue); + } + }} + /> + + ); +} + +function toField(value: string): Field { + return { label: value, value }; +} + +function toInstanceId( + groupings: Record, + groupBy: string | string[] +): string { + const groups = [groupBy].flat(); + return groups.map((group) => groupings[group]).join(','); +} diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/groupings/slo_groupings.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/groupings/slo_groupings.tsx new file mode 100644 index 0000000000000..9d5a72695777c --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/groupings/slo_groupings.tsx @@ -0,0 +1,44 @@ +/* + * 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 { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { SLOWithSummaryResponse } from '@kbn/slo-schema'; +import React from 'react'; +import { SLOGroupingValueSelector } from './slo_grouping_value_selector'; + +export function SLOGroupings({ slo }: { slo: SLOWithSummaryResponse }) { + const groupings = Object.entries(slo.groupings ?? {}); + + if (!groupings.length) { + return null; + } + + return ( + + + +

    + {i18n.translate('xpack.slo.sloDetails.groupings.title', { + defaultMessage: 'Instance', + })} +

    +
    +
    + {groupings.map(([groupingKey, groupingValue]) => { + return ( + + ); + })} +
    + ); +} diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/header_control.stories.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/header_control.stories.tsx index af6338d4a3977..f2c3259b601cc 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/header_control.stories.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/components/header_control.stories.tsx @@ -5,11 +5,10 @@ * 2.0. */ -import React from 'react'; import { ComponentStory } from '@storybook/react'; - -import { KibanaReactStorybookDecorator } from '../../../utils/kibana_react.storybook_decorator'; +import React from 'react'; import { buildSlo } from '../../../data/slo/slo'; +import { KibanaReactStorybookDecorator } from '../../../utils/kibana_react.storybook_decorator'; import { HeaderControl as Component, Props } from './header_control'; export default { @@ -22,11 +21,10 @@ const Template: ComponentStory = (props: Props) => setIsPopoverOpen((value) => !value); const closePopover = () => setIsPopoverOpen(false); @@ -92,10 +91,6 @@ export function HeaderControl({ isLoading, slo }: Props) { }); const handleNavigateToApm = () => { - if (!slo) { - return undefined; - } - const url = convertSliApmParamsToApmAppDeeplinkUrl(slo); if (url) { navigateToUrl(basePath.prepend(url)); @@ -105,10 +100,8 @@ export function HeaderControl({ isLoading, slo }: Props) { const navigateToClone = useCloneSlo(); const handleClone = async () => { - if (slo) { - setIsPopoverOpen(false); - navigateToClone(slo); - } + setIsPopoverOpen(false); + navigateToClone(slo); }; const handleDelete = () => { @@ -140,11 +133,9 @@ export function HeaderControl({ isLoading, slo }: Props) { }; const handleResetConfirm = async () => { - if (slo) { - await resetSlo({ id: slo.id, name: slo.name }); - removeResetQueryParam(); - setResetConfirmationModalOpen(false); - } + await resetSlo({ id: slo.id, name: slo.name }); + removeResetQueryParam(); + setResetConfirmationModalOpen(false); }; const handleResetCancel = () => { @@ -182,8 +173,6 @@ export function HeaderControl({ isLoading, slo }: Props) { iconType="arrowDown" iconSize="s" onClick={handleActionsClick} - isLoading={isLoading} - disabled={isLoading} > {i18n.translate('xpack.slo.sloDetails.headerControl.actions', { defaultMessage: 'Actions', @@ -315,7 +304,7 @@ export function HeaderControl({ isLoading, slo }: Props) { refetchRules={refetchRules} /> - {slo && isRuleFlyoutVisible ? ( + {isRuleFlyoutVisible ? ( ) : null} - {slo && isDeleteConfirmationModalOpen ? ( + {isDeleteConfirmationModalOpen ? ( ) : null} - {slo && isResetConfirmationModalOpen ? ( + {isResetConfirmationModalOpen ? ( ; + return ; } return ( - - - + - + ); } diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_fetch_slo_instances.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_fetch_slo_instances.tsx new file mode 100644 index 0000000000000..0fc78e553e7d3 --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_fetch_slo_instances.tsx @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ALL_VALUE, GetSLOGroupingsResponse } from '@kbn/slo-schema'; +import { useQuery } from '@tanstack/react-query'; +import { sloKeys } from '../../../hooks/query_key_factory'; +import { usePluginContext } from '../../../hooks/use_plugin_context'; + +interface Params { + sloId: string; + groupingKey: string; + instanceId: string; + afterKey?: string; + search?: string; + remoteName?: string; +} + +interface UseFetchSloGroupingsResponse { + data: GetSLOGroupingsResponse | undefined; + isLoading: boolean; + isError: boolean; +} + +export function useFetchSloGroupings({ + sloId, + groupingKey, + instanceId, + afterKey, + search, + remoteName, +}: Params): UseFetchSloGroupingsResponse { + const { sloClient } = usePluginContext(); + + const { isLoading, isError, data } = useQuery({ + queryKey: sloKeys.groupings({ sloId, groupingKey, instanceId, afterKey, search, remoteName }), + queryFn: async ({ signal }) => { + try { + return await sloClient.fetch(`GET /internal/observability/slos/{id}/_groupings`, { + params: { + path: { id: sloId }, + query: { + search, + instanceId, + groupingKey, + afterKey, + excludeStale: true, + remoteName, + }, + }, + signal, + }); + } catch (error) { + throw new Error(`Something went wrong. Error: ${error}`); + } + }, + enabled: Boolean(!!sloId && !!groupingKey && instanceId !== ALL_VALUE), + staleTime: 60 * 1000, + retry: false, + refetchOnWindowFocus: false, + }); + + return { isLoading, isError, data }; +} diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_slo_details_tabs.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_slo_details_tabs.tsx index 83acc81a68716..4b7389e969f32 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_slo_details_tabs.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/hooks/use_slo_details_tabs.tsx @@ -5,13 +5,13 @@ * 2.0. */ -import { i18n } from '@kbn/i18n'; import { EuiNotificationBadge, EuiToolTip } from '@elastic/eui'; -import React from 'react'; +import { i18n } from '@kbn/i18n'; import { ALL_VALUE, SLOWithSummaryResponse } from '@kbn/slo-schema'; +import React from 'react'; import { paths } from '../../../../common/locators/paths'; -import { useKibana } from '../../../hooks/use_kibana'; import { useFetchActiveAlerts } from '../../../hooks/use_fetch_active_alerts'; +import { useKibana } from '../../../hooks/use_kibana'; import { ALERTS_TAB_ID, HISTORY_TAB_ID, diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/slo_details.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/slo_details.tsx index 38f65bb341070..491c850bf03b8 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slo_details/slo_details.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_details/slo_details.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { EuiLoadingSpinner, EuiSkeletonText } from '@elastic/eui'; +import { EuiSkeletonText } from '@elastic/eui'; import type { ChromeBreadcrumb } from '@kbn/core-chrome-browser'; import type { IBasePath } from '@kbn/core-http-browser'; import { usePerformanceContext } from '@kbn/ebt-tools'; @@ -16,15 +16,16 @@ import { useIsMutating } from '@tanstack/react-query'; import dedent from 'dedent'; import React, { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; +import { LoadingState } from '../../components/loading_state'; import { paths } from '../../../common/locators/paths'; import { HeaderMenu } from '../../components/header_menu/header_menu'; import { AutoRefreshButton } from '../../components/slo/auto_refresh_button'; import { useAutoRefreshStorage } from '../../components/slo/auto_refresh_button/hooks/use_auto_refresh_storage'; import { useFetchSloDetails } from '../../hooks/use_fetch_slo_details'; +import { useKibana } from '../../hooks/use_kibana'; import { useLicense } from '../../hooks/use_license'; import { usePermissions } from '../../hooks/use_permissions'; import { usePluginContext } from '../../hooks/use_plugin_context'; -import { useKibana } from '../../hooks/use_kibana'; import PageNotFound from '../404'; import { HeaderControl } from './components/header_control'; import { HeaderTitle } from './components/header_title'; @@ -125,21 +126,23 @@ export function SloDetailsPage() { pageHeader={{ pageTitle: slo?.name ?? , children: , - rightSideItems: [ - , - , - ], + rightSideItems: !isLoading + ? [ + , + , + ] + : undefined, tabs, }} data-test-subj="sloDetailsPage" > - {isLoading && } - {!isLoading && ( + {isLoading ? ( + + ) : ( )} diff --git a/x-pack/plugins/observability_solution/slo/server/domain/models/common.ts b/x-pack/plugins/observability_solution/slo/server/domain/models/common.ts index 06eb5e11fd2ba..4c58c3e51624c 100644 --- a/x-pack/plugins/observability_solution/slo/server/domain/models/common.ts +++ b/x-pack/plugins/observability_solution/slo/server/domain/models/common.ts @@ -29,6 +29,7 @@ type Meta = t.TypeOf; type GroupSummary = t.TypeOf; type GroupBy = t.TypeOf; type StoredSLOSettings = t.OutputOf; +type SLOSettings = t.TypeOf; export type { Objective, @@ -41,4 +42,5 @@ export type { GroupBy, GroupSummary, StoredSLOSettings, + SLOSettings, }; diff --git a/x-pack/plugins/observability_solution/slo/server/domain/models/slo.ts b/x-pack/plugins/observability_solution/slo/server/domain/models/slo.ts index 1fbaae2b81706..953d0a621b6bd 100644 --- a/x-pack/plugins/observability_solution/slo/server/domain/models/slo.ts +++ b/x-pack/plugins/observability_solution/slo/server/domain/models/slo.ts @@ -10,7 +10,6 @@ import * as t from 'io-ts'; type SLODefinition = t.TypeOf; type StoredSLODefinition = t.OutputOf; - type SLOId = t.TypeOf; export type { SLODefinition, StoredSLODefinition, SLOId }; diff --git a/x-pack/plugins/observability_solution/slo/server/routes/slo/route.ts b/x-pack/plugins/observability_solution/slo/server/routes/slo/route.ts index ed2542bb67cb5..a7589de5d0909 100644 --- a/x-pack/plugins/observability_solution/slo/server/routes/slo/route.ts +++ b/x-pack/plugins/observability_solution/slo/server/routes/slo/route.ts @@ -20,7 +20,7 @@ import { findSloDefinitionsParamsSchema, getPreviewDataParamsSchema, getSLOBurnRatesParamsSchema, - getSLOInstancesParamsSchema, + getSLOGroupingsParamsSchema, getSLOParamsSchema, manageSLOParamsSchema, putSLOServerlessSettingsParamsSchema, @@ -49,7 +49,7 @@ import { FindSLODefinitions } from '../../services/find_slo_definitions'; import { getBurnRates } from '../../services/get_burn_rates'; import { getGlobalDiagnosis } from '../../services/get_diagnosis'; import { GetPreviewData } from '../../services/get_preview_data'; -import { GetSLOInstances } from '../../services/get_slo_instances'; +import { GetSLOGroupings } from '../../services/get_slo_groupings'; import { GetSLOSuggestions } from '../../services/get_slo_suggestions'; import { GetSLOsOverview } from '../../services/get_slos_overview'; import { DefaultHistoricalSummaryClient } from '../../services/historical_summary_client'; @@ -598,24 +598,32 @@ const fetchHistoricalSummary = createSloServerRoute({ }, }); -const getSLOInstancesRoute = createSloServerRoute({ - endpoint: 'GET /internal/observability/slos/{id}/_instances', +const getSLOGroupingsRoute = createSloServerRoute({ + endpoint: 'GET /internal/observability/slos/{id}/_groupings', options: { access: 'internal' }, security: { authz: { requiredPrivileges: ['slo_read'], }, }, - params: getSLOInstancesParamsSchema, - handler: async ({ context, params, logger, plugins }) => { + params: getSLOGroupingsParamsSchema, + handler: async ({ context, params, request, logger, plugins }) => { await assertPlatinumLicense(plugins); - const soClient = (await context.core).savedObjects.client; const esClient = (await context.core).elasticsearch.client.asCurrentUser; + const [spaceId, settings] = await Promise.all([ + getSpaceId(plugins, request), + getSloSettings(soClient), + ]); + const repository = new KibanaSavedObjectsSLORepository(soClient, logger); - const getSLOInstances = new GetSLOInstances(repository, esClient); + const definitionClient = new SloDefinitionClient(repository, esClient, logger); + + const getSLOGroupings = new GetSLOGroupings(definitionClient, esClient, settings, spaceId); - return await executeWithErrorHandler(() => getSLOInstances.execute(params.path.id)); + return await executeWithErrorHandler(() => + getSLOGroupings.execute(params.path.id, params.query) + ); }, }); @@ -819,7 +827,7 @@ export const getSloRouteRepository = (isServerless?: boolean) => { ...getDiagnosisRoute, ...getSloBurnRates, ...getPreviewData, - ...getSLOInstancesRoute, + ...getSLOGroupingsRoute, ...resetSLORoute, ...findSLOGroupsRoute, ...getSLOSuggestionsRoute, diff --git a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/get_slo_instances.test.ts.snap b/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/get_slo_instances.test.ts.snap deleted file mode 100644 index 8ad9792a22b24..0000000000000 --- a/x-pack/plugins/observability_solution/slo/server/services/__snapshots__/get_slo_instances.test.ts.snap +++ /dev/null @@ -1,41 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Get SLO Instances returns all instances of a SLO defined with a 'groupBy' 1`] = ` -Array [ - Object { - "aggs": Object { - "instances": Object { - "terms": Object { - "field": "slo.instanceId", - "size": 1000, - }, - }, - }, - "index": ".slo-observability.sli-v3*", - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "range": Object { - "@timestamp": Object { - "gte": "now-7d", - }, - }, - }, - Object { - "term": Object { - "slo.id": "slo-id", - }, - }, - Object { - "term": Object { - "slo.revision": 2, - }, - }, - ], - }, - }, - "size": 0, - }, -] -`; diff --git a/x-pack/plugins/observability_solution/slo/server/services/get_slo_groupings.test.ts b/x-pack/plugins/observability_solution/slo/server/services/get_slo_groupings.test.ts new file mode 100644 index 0000000000000..8884e377afefb --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/server/services/get_slo_groupings.test.ts @@ -0,0 +1,93 @@ +/* + * 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 { ElasticsearchClientMock, elasticsearchServiceMock } from '@kbn/core/server/mocks'; +import { loggerMock } from '@kbn/logging-mocks'; +import { ALL_VALUE } from '@kbn/slo-schema'; +import { GetSLOGroupings, SLORepository } from '.'; +import { createSLO } from './fixtures/slo'; +import { createSLORepositoryMock } from './mocks'; +import { SloDefinitionClient } from './slo_definition_client'; + +const DEFAULT_SETTINGS = { + selectedRemoteClusters: [], + staleThresholdInHours: 1, + useAllRemoteClusters: false, +}; + +describe('Get SLO Instances', () => { + let repositoryMock: jest.Mocked; + let esClientMock: ElasticsearchClientMock; + let definitionClient: SloDefinitionClient; + + beforeEach(() => { + repositoryMock = createSLORepositoryMock(); + esClientMock = elasticsearchServiceMock.createElasticsearchClient(); + definitionClient = new SloDefinitionClient( + repositoryMock, + elasticsearchServiceMock.createElasticsearchClient(), + loggerMock.create() + ); + }); + + it('throws when the SLO is ungrouped', async () => { + const slo = createSLO({ groupBy: ALL_VALUE }); + repositoryMock.findById.mockResolvedValue(slo); + + const service = new GetSLOGroupings( + definitionClient, + esClientMock, + DEFAULT_SETTINGS, + 'default' + ); + + await expect( + service.execute(slo.id, { + instanceId: 'irrelevant', + groupingKey: 'irrelevant', + }) + ).rejects.toThrowError('Ungrouped SLO cannot be queried for available groupings'); + }); + + it('throws when the provided groupingKey is not part of the SLO groupBy field', async () => { + const slo = createSLO({ groupBy: ['abc.efg', 'host.name'] }); + repositoryMock.findById.mockResolvedValue(slo); + + const service = new GetSLOGroupings( + definitionClient, + esClientMock, + DEFAULT_SETTINGS, + 'default' + ); + + await expect( + service.execute(slo.id, { + instanceId: 'irrelevant', + groupingKey: 'not.found', + }) + ).rejects.toThrowError("Provided groupingKey doesn't match the SLO's groupBy field"); + }); + + it('throws when the provided instanceId cannot be matched against the SLO grouping keys', async () => { + const slo = createSLO({ groupBy: ['abc.efg', 'host.name'] }); + repositoryMock.findById.mockResolvedValue(slo); + + const service = new GetSLOGroupings( + definitionClient, + esClientMock, + DEFAULT_SETTINGS, + 'default' + ); + + await expect( + service.execute(slo.id, { + instanceId: 'too,many,values', + groupingKey: 'host.name', + }) + ).rejects.toThrowError('Provided instanceId does not match the number of grouping keys'); + }); +}); diff --git a/x-pack/plugins/observability_solution/slo/server/services/get_slo_groupings.ts b/x-pack/plugins/observability_solution/slo/server/services/get_slo_groupings.ts new file mode 100644 index 0000000000000..81ed1c0c7518f --- /dev/null +++ b/x-pack/plugins/observability_solution/slo/server/services/get_slo_groupings.ts @@ -0,0 +1,157 @@ +/* + * 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 { AggregationsCompositeAggregation } from '@elastic/elasticsearch/lib/api/types'; +import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { ALL_VALUE, GetSLOGroupingsParams, GetSLOGroupingsResponse } from '@kbn/slo-schema'; +import { SLO_SUMMARY_DESTINATION_INDEX_NAME } from '../../common/constants'; +import { SLODefinition, SLOSettings } from '../domain/models'; +import { SloDefinitionClient } from './slo_definition_client'; + +const DEFAULT_SIZE = 100; + +export class GetSLOGroupings { + constructor( + private definitionClient: SloDefinitionClient, + private esClient: ElasticsearchClient, + private sloSettings: SLOSettings, + private spaceId: string + ) {} + + public async execute( + sloId: string, + params: GetSLOGroupingsParams + ): Promise { + const { slo } = await this.definitionClient.execute(sloId, this.spaceId, params.remoteName); + + const groupingKeys = [slo.groupBy].flat(); + if (groupingKeys.includes(ALL_VALUE) || params.instanceId === ALL_VALUE) { + throw new Error('Ungrouped SLO cannot be queried for available groupings'); + } + + if (!groupingKeys.includes(params.groupingKey)) { + throw new Error("Provided groupingKey doesn't match the SLO's groupBy field"); + } + + const groupingValues = params.instanceId.split(',') ?? []; + if (groupingKeys.length !== groupingValues.length) { + throw new Error('Provided instanceId does not match the number of grouping keys'); + } + + const response = await this.esClient.search< + unknown, + { + groupingValues: { + buckets: Array<{ key: { value: string } }>; + after_key: { value: string }; + }; + } + >({ + index: params.remoteName + ? `${params.remoteName}:${SLO_SUMMARY_DESTINATION_INDEX_NAME}` + : SLO_SUMMARY_DESTINATION_INDEX_NAME, + ...generateQuery(slo, params, this.sloSettings), + }); + + return { + groupingKey: params.groupingKey, + values: response.aggregations?.groupingValues.buckets.map((bucket) => bucket.key.value) ?? [], + afterKey: + response.aggregations?.groupingValues.buckets.length === Number(params.size ?? DEFAULT_SIZE) + ? response.aggregations?.groupingValues.after_key.value + : undefined, + }; + } +} + +function generateQuery(slo: SLODefinition, params: GetSLOGroupingsParams, settings: SLOSettings) { + const groupingKeys = [slo.groupBy].flat(); + const groupingValues = params.instanceId.split(',') ?? []; + + const groupingKeyValuePairs = groupingKeys.map((groupingKey, index) => [ + groupingKey, + groupingValues[index], + ]); + + const aggs = generateAggs(params); + + const query = { + size: 0, + query: { + bool: { + filter: [ + { + term: { + 'slo.id': slo.id, + }, + }, + { + term: { + 'slo.revision': slo.revision, + }, + }, + // exclude stale summary documents if specified + ...(!!params.excludeStale + ? [ + { + range: { + summaryUpdatedAt: { + gte: `now-${settings.staleThresholdInHours}h`, + }, + }, + }, + ] + : []), + // Set other groupings as term filters + ...groupingKeyValuePairs + .filter(([groupingKey]) => groupingKey !== params.groupingKey) + .map(([groupingKey, groupingValue]) => ({ + term: { + [`slo.groupings.${groupingKey}`]: groupingValue, + }, + })), + // search on the specified groupingKey + ...(params.search + ? [ + { + query_string: { + default_field: `slo.groupings.${params.groupingKey}`, + query: `*${params.search.replace(/^\*/, '').replace(/\*$/, '')}*`, + }, + }, + ] + : []), + ], + }, + }, + aggs, + }; + + return query; +} + +function generateAggs(params: GetSLOGroupingsParams): { + groupingValues: { composite: AggregationsCompositeAggregation }; +} { + return { + groupingValues: { + composite: { + size: Number(params.size ?? DEFAULT_SIZE), + sources: [ + { + value: { + terms: { + field: `slo.groupings.${params.groupingKey}`, + }, + }, + }, + ], + ...(params.afterKey ? { after: { value: params.afterKey } } : {}), + }, + }, + }; +} diff --git a/x-pack/plugins/observability_solution/slo/server/services/get_slo_instances.test.ts b/x-pack/plugins/observability_solution/slo/server/services/get_slo_instances.test.ts deleted file mode 100644 index e8bce36fd18ef..0000000000000 --- a/x-pack/plugins/observability_solution/slo/server/services/get_slo_instances.test.ts +++ /dev/null @@ -1,70 +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 { ElasticsearchClientMock, elasticsearchServiceMock } from '@kbn/core/server/mocks'; -import { createSLO } from './fixtures/slo'; -import { GetSLOInstances, SLORepository } from '.'; -import { createSLORepositoryMock } from './mocks'; -import { ALL_VALUE } from '@kbn/slo-schema'; - -describe('Get SLO Instances', () => { - let repositoryMock: jest.Mocked; - let esClientMock: ElasticsearchClientMock; - - beforeEach(() => { - repositoryMock = createSLORepositoryMock(); - esClientMock = elasticsearchServiceMock.createElasticsearchClient(); - }); - - it("returns an empty response when the SLO has no 'groupBy' defined", async () => { - const slo = createSLO({ groupBy: ALL_VALUE }); - repositoryMock.findById.mockResolvedValue(slo); - - const service = new GetSLOInstances(repositoryMock, esClientMock); - - const result = await service.execute(slo.id); - - expect(result).toEqual({ groupBy: ALL_VALUE, instances: [] }); - }); - - it("returns all instances of a SLO defined with a 'groupBy'", async () => { - const slo = createSLO({ id: 'slo-id', revision: 2, groupBy: 'field.to.host' }); - repositoryMock.findById.mockResolvedValue(slo); - esClientMock.search.mockResolvedValue({ - took: 100, - timed_out: false, - _shards: { - total: 0, - successful: 0, - skipped: 0, - failed: 0, - }, - hits: { - hits: [], - }, - aggregations: { - instances: { - buckets: [ - { key: 'host-aaa', doc_value: 100 }, - { key: 'host-bbb', doc_value: 200 }, - { key: 'host-ccc', doc_value: 500 }, - ], - }, - }, - }); - - const service = new GetSLOInstances(repositoryMock, esClientMock); - - const result = await service.execute(slo.id); - - expect(result).toEqual({ - groupBy: 'field.to.host', - instances: ['host-aaa', 'host-bbb', 'host-ccc'], - }); - expect(esClientMock.search.mock.calls[0]).toMatchSnapshot(); - }); -}); diff --git a/x-pack/plugins/observability_solution/slo/server/services/get_slo_instances.ts b/x-pack/plugins/observability_solution/slo/server/services/get_slo_instances.ts deleted file mode 100644 index c95c2275547ae..0000000000000 --- a/x-pack/plugins/observability_solution/slo/server/services/get_slo_instances.ts +++ /dev/null @@ -1,50 +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 { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import { ALL_VALUE, GetSLOInstancesResponse } from '@kbn/slo-schema'; -import { SLO_DESTINATION_INDEX_PATTERN } from '../../common/constants'; -import { SLORepository } from './slo_repository'; - -export class GetSLOInstances { - constructor(private repository: SLORepository, private esClient: ElasticsearchClient) {} - - public async execute(sloId: string): Promise { - const slo = await this.repository.findById(sloId); - - if ([slo.groupBy].flat().includes(ALL_VALUE)) { - return { groupBy: ALL_VALUE, instances: [] }; - } - - const result = await this.esClient.search({ - index: SLO_DESTINATION_INDEX_PATTERN, - size: 0, - query: { - bool: { - filter: [ - { range: { '@timestamp': { gte: 'now-7d' } } }, - { term: { 'slo.id': slo.id } }, - { term: { 'slo.revision': slo.revision } }, - ], - }, - }, - aggs: { - instances: { - terms: { - size: 1000, - field: 'slo.instanceId', - }, - }, - }, - }); - - // @ts-ignore - const buckets = result?.aggregations?.instances.buckets ?? []; - const instances = buckets.map((bucket: { key: string }) => bucket.key); - return { groupBy: slo.groupBy, instances }; - } -} diff --git a/x-pack/plugins/observability_solution/slo/server/services/index.ts b/x-pack/plugins/observability_solution/slo/server/services/index.ts index 6c9bdc906914c..4688a34740c63 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/index.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/index.ts @@ -19,6 +19,6 @@ export * from './transform_manager'; export * from './summay_transform_manager'; export * from './update_slo'; export * from './summary_client'; -export * from './get_slo_instances'; +export * from './get_slo_groupings'; export * from './find_slo_groups'; export * from './get_slo_health'; diff --git a/x-pack/plugins/observability_solution/slo/server/services/slo_settings.ts b/x-pack/plugins/observability_solution/slo/server/services/slo_settings.ts index e3bce05843374..3874ab808dc34 100644 --- a/x-pack/plugins/observability_solution/slo/server/services/slo_settings.ts +++ b/x-pack/plugins/observability_solution/slo/server/services/slo_settings.ts @@ -14,10 +14,12 @@ import { SLO_SUMMARY_DESTINATION_INDEX_PATTERN, } from '../../common/constants'; import { getListOfSloSummaryIndices } from '../../common/summary_indices'; -import { StoredSLOSettings } from '../domain/models'; -import { sloSettingsObjectId, SO_SLO_SETTINGS_TYPE } from '../saved_objects/slo_settings'; +import { SLOSettings, StoredSLOSettings } from '../domain/models'; +import { SO_SLO_SETTINGS_TYPE, sloSettingsObjectId } from '../saved_objects/slo_settings'; -export const getSloSettings = async (soClient: SavedObjectsClientContract) => { +export const getSloSettings = async ( + soClient: SavedObjectsClientContract +): Promise => { try { const soObject = await soClient.get( SO_SLO_SETTINGS_TYPE, @@ -41,7 +43,7 @@ export const getSloSettings = async (soClient: SavedObjectsClientContract) => { export const storeSloSettings = async ( soClient: SavedObjectsClientContract, params: PutSLOSettingsParams -) => { +): Promise => { const object = await soClient.create( SO_SLO_SETTINGS_TYPE, sloSettingsSchema.encode(params), From 7a98da6971b0af8d0c0cead1e869f4f84cbca8f1 Mon Sep 17 00:00:00 2001 From: Bharat Pasupula <123897612+bhapas@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:18:08 +0100 Subject: [PATCH 103/141] [Automatic Import] Restrict unsupported log formats (#202994) --- .../common/api/generation_error.ts | 1 + .../common/api/model/common_attributes.gen.ts | 2 ++ .../api/model/common_attributes.schema.yaml | 2 ++ .../steps/data_stream_step/translations.ts | 18 +++++++--- .../graphs/log_type_detection/prompts.ts | 2 ++ .../server/lib/errors/unsupported_error.ts | 35 ++++++++++++++++--- .../server/routes/analyze_logs_routes.ts | 16 +++++++-- 7 files changed, 64 insertions(+), 12 deletions(-) diff --git a/x-pack/plugins/integration_assistant/common/api/generation_error.ts b/x-pack/plugins/integration_assistant/common/api/generation_error.ts index 03f01e96bee53..9c7fe4888712c 100644 --- a/x-pack/plugins/integration_assistant/common/api/generation_error.ts +++ b/x-pack/plugins/integration_assistant/common/api/generation_error.ts @@ -34,6 +34,7 @@ export function isGenerationErrorBody(obj: unknown | undefined): obj is Generati export interface GenerationErrorAttributes { errorCode: GenerationErrorCode; underlyingMessages?: string[] | undefined; + logFormat?: string | undefined; errorMessageWithLink?: ErrorMessageWithLink | undefined; } diff --git a/x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts b/x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts index 3b8dac7af22ca..a70610aeaaaab 100644 --- a/x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts +++ b/x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts @@ -85,6 +85,8 @@ export const SamplesFormatName = z.enum([ 'unstructured', 'unsupported', 'cef', + 'leef', + 'fix', ]); export type SamplesFormatNameEnum = typeof SamplesFormatName.enum; export const SamplesFormatNameEnum = SamplesFormatName.enum; diff --git a/x-pack/plugins/integration_assistant/common/api/model/common_attributes.schema.yaml b/x-pack/plugins/integration_assistant/common/api/model/common_attributes.schema.yaml index 23ad137d8d83a..35bd6b7ad6755 100644 --- a/x-pack/plugins/integration_assistant/common/api/model/common_attributes.schema.yaml +++ b/x-pack/plugins/integration_assistant/common/api/model/common_attributes.schema.yaml @@ -65,6 +65,8 @@ components: - unstructured - unsupported - cef + - leef + - fix SamplesFormat: type: object diff --git a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts index 8f2aab49622f0..cbabd8aa0d62b 100644 --- a/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts +++ b/x-pack/plugins/integration_assistant/public/components/create_integration/create_integration_assistant/steps/data_stream_step/translations.ts @@ -212,12 +212,20 @@ export const GENERATION_ERROR_TRANSLATION: Record< defaultMessage: 'Max attempts exceeded. Please try again.', } ), - [GenerationErrorCode.UNSUPPORTED_LOG_SAMPLES_FORMAT]: i18n.translate( - 'xpack.integrationAssistant.errors.unsupportedLogSamples', - { - defaultMessage: 'Unsupported log format in the samples.', + [GenerationErrorCode.UNSUPPORTED_LOG_SAMPLES_FORMAT]: (attributes) => { + if (attributes.logFormat !== undefined && attributes.logFormat?.length !== 0) { + return i18n.translate('xpack.integrationAssistant.errors.uparseableCSV.withReason', { + values: { + format: attributes.logFormat, + }, + defaultMessage: `Unsupported log format in the samples (format: {format}).`, + }); + } else { + return i18n.translate('xpack.integrationAssistant.errors.unsupportedLogSamples', { + defaultMessage: `Unsupported log format in the samples.`, + }); } - ), + }, [GenerationErrorCode.CEF_ERROR]: i18n.translate('xpack.integrationAssistant.errors.cefError', { // This is a default error message if the linking does not work. defaultMessage: diff --git a/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts index 09a7249a3786c..cc30e90605897 100644 --- a/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts +++ b/x-pack/plugins/integration_assistant/server/graphs/log_type_detection/prompts.ts @@ -24,6 +24,8 @@ Follow these steps to do this: * 'structured': If the log samples have structured message body with key-value pairs then classify it as "name: structured". Look for a flat list of key-value pairs, often separated by some delimiters. Consider variations in formatting, such as quotes around values ("key=value", key="value"), special characters in keys or values, or escape sequences. * 'unstructured': If the log samples have unstructured body like a free-form text then classify it as "name: unstructured". * 'cef': If the log samples have Common Event Format (CEF) then classify it as "name: cef". + * 'leef': If the log samples have Log Event Extended Format (LEEF) then classify it as "name: leef". + * 'fix': If the log samples have Financial Information eXchange (FIX) then classify it as "name: fix". * 'unsupported': If you cannot put the format into any of the above categories then classify it with "name: unsupported". 2. Header: for structured and unstructured format: - if the samples have any or all of priority, timestamp, loglevel, hostname, ipAddress, messageId in the beginning information then set "header: true". diff --git a/x-pack/plugins/integration_assistant/server/lib/errors/unsupported_error.ts b/x-pack/plugins/integration_assistant/server/lib/errors/unsupported_error.ts index 7ab4e0569ca83..0d21faefa4432 100644 --- a/x-pack/plugins/integration_assistant/server/lib/errors/unsupported_error.ts +++ b/x-pack/plugins/integration_assistant/server/lib/errors/unsupported_error.ts @@ -9,18 +9,45 @@ import { KibanaResponseFactory } from '@kbn/core/server'; import { ErrorThatHandlesItsOwnResponse } from './types'; import { GenerationErrorCode } from '../../../common/constants'; +interface UnsupportedLogFormat { + message: string; + logFormat?: string; +} + +interface UnsupportedLogFormatResponseBody { + message: string; + attributes: { + errorCode: string; + logFormat?: string; + }; +} + export class UnsupportedLogFormatError extends Error implements ErrorThatHandlesItsOwnResponse { private readonly errorCode: string = GenerationErrorCode.UNSUPPORTED_LOG_SAMPLES_FORMAT; + private logFormat: string | undefined; - // eslint-disable-next-line @typescript-eslint/no-useless-constructor - constructor(message: string) { - super(message); + constructor(unsupportedLogFormat: UnsupportedLogFormat) { + super(unsupportedLogFormat.message); + if (unsupportedLogFormat.logFormat) { + this.logFormat = unsupportedLogFormat.logFormat; + } } public sendResponse(res: KibanaResponseFactory) { + const responseBody: UnsupportedLogFormatResponseBody = { + message: this.message, + attributes: { + errorCode: this.errorCode, + }, + }; + + if (this.logFormat) { + responseBody.attributes.logFormat = this.logFormat; + } + return res.customError({ statusCode: 501, - body: { message: this.message, attributes: { errorCode: this.errorCode } }, + body: responseBody, }); } } diff --git a/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts b/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts index 37926dac19156..93ac55f6f712c 100644 --- a/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts +++ b/x-pack/plugins/integration_assistant/server/routes/analyze_logs_routes.ts @@ -106,11 +106,21 @@ export function registerAnalyzeLogsRoutes( switch (graphLogFormat) { case 'unsupported': - throw new UnsupportedLogFormatError( - GenerationErrorCode.UNSUPPORTED_LOG_SAMPLES_FORMAT - ); + throw new UnsupportedLogFormatError({ + message: GenerationErrorCode.UNSUPPORTED_LOG_SAMPLES_FORMAT, + }); case 'cef': throw new CefError(GenerationErrorCode.CEF_ERROR); + case 'leef': + throw new UnsupportedLogFormatError({ + message: GenerationErrorCode.UNSUPPORTED_LOG_SAMPLES_FORMAT, + logFormat: 'Log Event Extended Format (LEEF)', + }); + case 'fix': + throw new UnsupportedLogFormatError({ + message: GenerationErrorCode.UNSUPPORTED_LOG_SAMPLES_FORMAT, + logFormat: 'Financial Information eXchange (FIX)', + }); } return res.ok({ body: AnalyzeLogsResponse.parse(graphResults) }); From 44d1158e4febb9ee9edad022426fea9a17507911 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Thu, 5 Dec 2024 12:55:40 -0700 Subject: [PATCH 104/141] [embeddable] remove legacy embeddable factories from 'Add from library' flyout (#202823) Part of https://github.com/elastic/kibana/issues/180059 PR removes legacy embeddable factory support from Canvas and Dashboard `Add from library` flyout PR also does the following clean-ups 1) Renames folder, files, and component from `add_panel_flyout` to `add_from_library_flyout`. When component was originally created, dashboard `Add panel` button did not exist, and `Add from library` button was called `Add panel`. Now that dashboard contains `Add panel` and `Add from library` buttons, the old naming convention is super confusing and not longer lines up with the current UI. 2) moves registry to `add_from_library` folder so that the registry is in closer proximity to its usage. 2) Renames `registerReactEmbeddableSavedObject` to `registerAddFromLibraryType` because `registerReactEmbeddableSavedObject` does not clearly specifying what the registry enables. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine --- .../public/app/register_embeddable.tsx | 11 +- .../register_saved_object_example.ts | 3 +- .../embeddable/api/add_panel_from_library.ts | 8 +- src/plugins/discover/public/plugin.tsx | 3 +- .../add_from_library_flyout.test.tsx | 111 +++++++++ .../add_from_library_flyout.tsx | 109 +++++++++ .../open_add_from_library_flyout.tsx} | 19 +- .../registry.ts} | 51 ++-- .../add_panel_flyout.test.tsx | 196 --------------- .../add_panel_flyout/add_panel_flyout.tsx | 224 ------------------ src/plugins/embeddable/public/index.ts | 4 +- .../embeddable_saved_object_registry/index.ts | 14 -- src/plugins/embeddable/public/lib/index.ts | 1 - src/plugins/embeddable/public/mocks.tsx | 11 +- src/plugins/embeddable/public/plugin.tsx | 30 +-- .../registry/saved_object_to_panel_methods.ts | 28 --- src/plugins/links/public/plugin.ts | 3 +- src/plugins/visualizations/public/plugin.ts | 3 +- .../embeddable_flyout/flyout.component.tsx | 97 +------- x-pack/plugins/lens/public/plugin.ts | 3 +- .../react_embeddable/setup_map_embeddable.ts | 3 +- .../add_from_library_button/index.tsx | 4 +- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 25 files changed, 284 insertions(+), 658 deletions(-) create mode 100644 src/plugins/embeddable/public/add_from_library/add_from_library_flyout.test.tsx create mode 100644 src/plugins/embeddable/public/add_from_library/add_from_library_flyout.tsx rename src/plugins/embeddable/public/{add_panel_flyout/open_add_panel_flyout.tsx => add_from_library/open_add_from_library_flyout.tsx} (74%) rename src/plugins/embeddable/public/{lib/embeddable_saved_object_registry/embeddable_saved_object_registry.ts => add_from_library/registry.ts} (56%) delete mode 100644 src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.test.tsx delete mode 100644 src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx delete mode 100644 src/plugins/embeddable/public/lib/embeddable_saved_object_registry/index.ts delete mode 100644 src/plugins/embeddable/public/registry/saved_object_to_panel_methods.ts diff --git a/examples/embeddable_examples/public/app/register_embeddable.tsx b/examples/embeddable_examples/public/app/register_embeddable.tsx index 0f3217824f943..836eaa8f06209 100644 --- a/examples/embeddable_examples/public/app/register_embeddable.tsx +++ b/examples/embeddable_examples/public/app/register_embeddable.tsx @@ -81,13 +81,14 @@ export const RegisterEmbeddable = () => { -

    Saved object embeddables

    +

    + Show saved object type in Add from library menu +

    Embeddable factories, such as Lens, Maps, Links, that can reference saved objects should - register their saved object types using{' '} - registerReactEmbeddableSavedObject. The Add from library flyout - on Dashboards uses this registry to list saved objects. The example function below could - be called from the public start contract for a plugin. + register their saved object types using registerAddFromLibraryType. The{' '} + Add from library flyout on Dashboards uses this registry to list saved objects. + The example function below could be called from the public start contract for a plugin.

    diff --git a/examples/embeddable_examples/public/react_embeddables/register_saved_object_example.ts b/examples/embeddable_examples/public/react_embeddables/register_saved_object_example.ts index b43bffd42d87b..15082ef701693 100644 --- a/examples/embeddable_examples/public/react_embeddables/register_saved_object_example.ts +++ b/examples/embeddable_examples/public/react_embeddables/register_saved_object_example.ts @@ -14,14 +14,13 @@ const MY_SAVED_OBJECT_TYPE = 'mySavedObjectType'; const APP_ICON = 'logoKibana'; export const registerMyEmbeddableSavedObject = (embeddableSetup: EmbeddableSetup) => - embeddableSetup.registerReactEmbeddableSavedObject({ + embeddableSetup.registerAddFromLibraryType({ onAdd: (container, savedObject) => { container.addNewPanel({ panelType: MY_EMBEDDABLE_TYPE, initialState: savedObject.attributes, }); }, - embeddableType: MY_EMBEDDABLE_TYPE, savedObjectType: MY_SAVED_OBJECT_TYPE, savedObjectName: 'Some saved object', getIconForSavedObject: () => APP_ICON, diff --git a/src/plugins/dashboard/public/dashboard_container/embeddable/api/add_panel_from_library.ts b/src/plugins/dashboard/public/dashboard_container/embeddable/api/add_panel_from_library.ts index ba31677840aca..f5e76cff53b08 100644 --- a/src/plugins/dashboard/public/dashboard_container/embeddable/api/add_panel_from_library.ts +++ b/src/plugins/dashboard/public/dashboard_container/embeddable/api/add_panel_from_library.ts @@ -7,18 +7,14 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { isErrorEmbeddable, openAddPanelFlyout } from '@kbn/embeddable-plugin/public'; +import { isErrorEmbeddable, openAddFromLibraryFlyout } from '@kbn/embeddable-plugin/public'; import { DashboardContainer } from '../dashboard_container'; export function addFromLibrary(this: DashboardContainer) { if (isErrorEmbeddable(this)) return; this.openOverlay( - openAddPanelFlyout({ + openAddFromLibraryFlyout({ container: this, - onAddPanel: (id: string) => { - this.setScrollToPanelId(id); - this.setHighlightPanelId(id); - }, onClose: () => { this.clearOverlays(); }, diff --git a/src/plugins/discover/public/plugin.tsx b/src/plugins/discover/public/plugin.tsx index e29922d05f2c0..959ea78d50ecb 100644 --- a/src/plugins/discover/public/plugin.tsx +++ b/src/plugins/discover/public/plugin.tsx @@ -412,7 +412,7 @@ export class DiscoverPlugin return this.getDiscoverServices(coreStart, deps, profilesManager, ebtManager); }; - plugins.embeddable.registerReactEmbeddableSavedObject({ + plugins.embeddable.registerAddFromLibraryType({ onAdd: async (container, savedObject) => { const services = await getDiscoverServicesForEmbeddable(); const initialState = await deserializeState({ @@ -427,7 +427,6 @@ export class DiscoverPlugin initialState, }); }, - embeddableType: SEARCH_EMBEDDABLE_TYPE, savedObjectType: SavedSearchType, savedObjectName: i18n.translate('discover.savedSearch.savedObjectName', { defaultMessage: 'Saved search', diff --git a/src/plugins/embeddable/public/add_from_library/add_from_library_flyout.test.tsx b/src/plugins/embeddable/public/add_from_library/add_from_library_flyout.test.tsx new file mode 100644 index 0000000000000..2dbf61aa7ebbd --- /dev/null +++ b/src/plugins/embeddable/public/add_from_library/add_from_library_flyout.test.tsx @@ -0,0 +1,111 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import * as React from 'react'; +import { fireEvent, render, screen } from '@testing-library/react'; +import { SavedObjectCommon } from '@kbn/saved-objects-finder-plugin/common'; + +import { AddFromLibraryFlyout } from './add_from_library_flyout'; +import { usageCollection } from '../kibana_services'; +import { getMockPresentationContainer } from '@kbn/presentation-containers/mocks'; +import { registerAddFromLibraryType } from './registry'; +import { PresentationContainer } from '@kbn/presentation-containers'; +import { HasType } from '@kbn/presentation-publishing'; + +// Mock saved objects finder component so we can call the onChoose method. +jest.mock('@kbn/saved-objects-finder-plugin/public', () => { + return { + SavedObjectFinder: jest + .fn() + .mockImplementation( + ({ + onChoose, + }: { + onChoose: (id: string, type: string, name: string, so: unknown) => Promise; + }) => ( + <> + + + ) + ), + }; +}); + +describe('add from library flyout', () => { + let container: PresentationContainer & HasType; + const onAdd = jest.fn(); + + beforeAll(() => { + registerAddFromLibraryType({ + onAdd, + savedObjectType: 'AWESOME_EMBEDDABLE', + savedObjectName: 'Awesome sauce', + getIconForSavedObject: () => 'happyface', + }); + }); + + beforeEach(() => { + onAdd.mockClear(); + container = { + type: 'DASHBOARD_CONTAINER', + ...getMockPresentationContainer(), + }; + }); + + test('renders SavedObjectFinder', async () => { + const { container: componentContainer } = render( + + ); + + // component should not contain an extra flyout + // https://github.com/elastic/kibana/issues/64789 + const flyout = componentContainer.querySelector('.euiFlyout'); + expect(flyout).toBeNull(); + const dummyButton = screen.queryAllByTestId('soFinderAddButton'); + expect(dummyButton).toHaveLength(1); + }); + + test('calls the registered onAdd method', async () => { + render(); + expect(Object.values(container.children$.value).length).toBe(0); + fireEvent.click(screen.getByTestId('soFinderAddButton')); + // flush promises + await new Promise((r) => setTimeout(r, 1)); + + expect(onAdd).toHaveBeenCalledWith(container, {}); + }); + + test('runs telemetry function on add embeddable', async () => { + render(); + + expect(Object.values(container.children$.value).length).toBe(0); + fireEvent.click(screen.getByTestId('soFinderAddButton')); + // flush promises + await new Promise((r) => setTimeout(r, 1)); + + expect(usageCollection.reportUiCounter).toHaveBeenCalledWith( + 'DASHBOARD_CONTAINER', + 'click', + 'AWESOME_EMBEDDABLE:add' + ); + }); +}); diff --git a/src/plugins/embeddable/public/add_from_library/add_from_library_flyout.tsx b/src/plugins/embeddable/public/add_from_library/add_from_library_flyout.tsx new file mode 100644 index 0000000000000..3f68e5c2c08ab --- /dev/null +++ b/src/plugins/embeddable/public/add_from_library/add_from_library_flyout.tsx @@ -0,0 +1,109 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import React, { useCallback } from 'react'; + +import { i18n } from '@kbn/i18n'; +import { EuiFlyoutBody, EuiFlyoutHeader, EuiTitle } from '@elastic/eui'; +import { SavedObjectCommon } from '@kbn/saved-objects-finder-plugin/common'; +import { + SavedObjectFinder, + SavedObjectFinderProps, + type SavedObjectMetaData, +} from '@kbn/saved-objects-finder-plugin/public'; + +import { METRIC_TYPE } from '@kbn/analytics'; +import { apiHasType } from '@kbn/presentation-publishing'; +import { CanAddNewPanel } from '@kbn/presentation-containers'; +import { + core, + savedObjectsTaggingOss, + contentManagement, + usageCollection, +} from '../kibana_services'; +import { EmbeddableFactoryNotFoundError } from '../lib'; +import { getAddFromLibraryType, useAddFromLibraryTypes } from './registry'; + +const runAddTelemetry = ( + parent: unknown, + savedObject: SavedObjectCommon, + savedObjectMetaData: SavedObjectMetaData +) => { + if (!apiHasType(parent)) return; + const type = savedObjectMetaData.getSavedObjectSubType + ? savedObjectMetaData.getSavedObjectSubType(savedObject) + : savedObjectMetaData.type; + + usageCollection?.reportUiCounter?.(parent.type, METRIC_TYPE.CLICK, `${type}:add`); +}; + +export const AddFromLibraryFlyout = ({ + container, + modalTitleId, +}: { + container: CanAddNewPanel; + modalTitleId?: string; +}) => { + const libraryTypes = useAddFromLibraryTypes(); + + const onChoose: SavedObjectFinderProps['onChoose'] = useCallback( + async ( + id: SavedObjectCommon['id'], + type: SavedObjectCommon['type'], + name: string, + savedObject: SavedObjectCommon + ) => { + const libraryType = getAddFromLibraryType(type); + if (!libraryType) { + core.notifications.toasts.addWarning(new EmbeddableFactoryNotFoundError(type).message); + return; + } + + libraryType.onAdd(container, savedObject); + runAddTelemetry(container, savedObject, libraryType.savedObjectMetaData); + }, + [container] + ); + + return ( + <> + + +

    + {i18n.translate('embeddableApi.addPanel.Title', { defaultMessage: 'Add from library' })} +

    +
    +
    + + { + return item.managed + ? i18n.translate('embeddableApi.addPanel.managedPanelTooltip', { + defaultMessage: + 'Elastic manages this panel. Adding it to a dashboard unlinks it from the library.', + }) + : undefined; + }} + /> + + + ); +}; diff --git a/src/plugins/embeddable/public/add_panel_flyout/open_add_panel_flyout.tsx b/src/plugins/embeddable/public/add_from_library/open_add_from_library_flyout.tsx similarity index 74% rename from src/plugins/embeddable/public/add_panel_flyout/open_add_panel_flyout.tsx rename to src/plugins/embeddable/public/add_from_library/open_add_from_library_flyout.tsx index 9ba3c00a73745..8fe6f58c367c4 100644 --- a/src/plugins/embeddable/public/add_panel_flyout/open_add_panel_flyout.tsx +++ b/src/plugins/embeddable/public/add_from_library/open_add_from_library_flyout.tsx @@ -17,32 +17,25 @@ import { CanAddNewPanel } from '@kbn/presentation-containers'; import { core } from '../kibana_services'; const LazyAddPanelFlyout = React.lazy(async () => { - const module = await import('./add_panel_flyout'); - return { default: module.AddPanelFlyout }; + const module = await import('./add_from_library_flyout'); + return { default: module.AddFromLibraryFlyout }; }); const htmlId = htmlIdGenerator('modalTitleId'); -export const openAddPanelFlyout = ({ +export const openAddFromLibraryFlyout = ({ container, - onAddPanel, onClose, }: { container: CanAddNewPanel; - onAddPanel?: (id: string) => void; onClose?: () => void; }): OverlayRef => { const modalTitleId = htmlId(); - // send the overlay ref to the root embeddable if it is capable of tracking overlays - const flyoutSession = core.overlays.openFlyout( + const flyoutRef = core.overlays.openFlyout( toMountPoint( }> - + , core ), @@ -60,5 +53,5 @@ export const openAddPanelFlyout = ({ } ); - return flyoutSession; + return flyoutRef; }; diff --git a/src/plugins/embeddable/public/lib/embeddable_saved_object_registry/embeddable_saved_object_registry.ts b/src/plugins/embeddable/public/add_from_library/registry.ts similarity index 56% rename from src/plugins/embeddable/public/lib/embeddable_saved_object_registry/embeddable_saved_object_registry.ts rename to src/plugins/embeddable/public/add_from_library/registry.ts index 785d56c55050c..03af6380ff239 100644 --- a/src/plugins/embeddable/public/lib/embeddable_saved_object_registry/embeddable_saved_object_registry.ts +++ b/src/plugins/embeddable/public/add_from_library/registry.ts @@ -8,54 +8,43 @@ */ import { IconType } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { CanAddNewPanel } from '@kbn/presentation-containers'; import { FinderAttributes, SavedObjectCommon } from '@kbn/saved-objects-finder-plugin/common'; import { SavedObjectMetaData } from '@kbn/saved-objects-finder-plugin/public'; +import { useMemo } from 'react'; -type SOToEmbeddable = ( - container: CanAddNewPanel, - savedObject: SavedObjectCommon -) => void; - -export type ReactEmbeddableSavedObject< - TSavedObjectAttributes extends FinderAttributes = FinderAttributes -> = { - onAdd: SOToEmbeddable; +export type RegistryItem = { + onAdd: ( + container: CanAddNewPanel, + savedObject: SavedObjectCommon + ) => void; savedObjectMetaData: SavedObjectMetaData; }; -const registry: Map> = new Map(); +const registry: Map> = new Map(); -export const registerReactEmbeddableSavedObject = < - TSavedObjectAttributes extends FinderAttributes ->({ +export const registerAddFromLibraryType = ({ onAdd, - embeddableType, savedObjectType, savedObjectName, getIconForSavedObject, getSavedObjectSubType, getTooltipForSavedObject, }: { - onAdd: SOToEmbeddable; - embeddableType: string; + onAdd: RegistryItem['onAdd']; savedObjectType: string; savedObjectName: string; getIconForSavedObject: (savedObject: SavedObjectCommon) => IconType; getSavedObjectSubType?: (savedObject: SavedObjectCommon) => string; getTooltipForSavedObject?: (savedObject: SavedObjectCommon) => string; }) => { - if (registry.has(embeddableType)) { + if (registry.has(savedObjectType)) { throw new Error( - i18n.translate('embeddableApi.embeddableSavedObjectRegistry.keyAlreadyExistsError', { - defaultMessage: `Embeddable type {embeddableType} already exists in the registry.`, - values: { embeddableType }, - }) + `Saved object type '${savedObjectType}' already exists in the 'Add from Library' registry.` ); } - registry.set(embeddableType, { + registry.set(savedObjectType, { onAdd, savedObjectMetaData: { name: savedObjectName, @@ -67,10 +56,14 @@ export const registerReactEmbeddableSavedObject = < }); }; -export const getReactEmbeddableSavedObjects = < - TSavedObjectAttributes extends FinderAttributes ->() => { - return registry.entries() as IterableIterator< - [string, ReactEmbeddableSavedObject] - >; +export function useAddFromLibraryTypes() { + return useMemo(() => { + return [...registry.entries()] + .map(([type, registryItem]) => registryItem.savedObjectMetaData) + .sort((a, b) => a.type.localeCompare(b.type)); + }, []); +} + +export const getAddFromLibraryType = (type: string) => { + return registry.get(type); }; diff --git a/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.test.tsx b/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.test.tsx deleted file mode 100644 index 11b895d2c7150..0000000000000 --- a/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.test.tsx +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import * as React from 'react'; -import { coreMock } from '@kbn/core/public/mocks'; -import { fireEvent, render, screen } from '@testing-library/react'; -import { SavedObjectCommon } from '@kbn/saved-objects-finder-plugin/common'; - -import { AddPanelFlyout } from './add_panel_flyout'; -import { core, embeddableStart, usageCollection } from '../kibana_services'; -import { ContactCardEmbeddableFactory } from '../lib/test_samples'; -import { Container, registerReactEmbeddableSavedObject } from '../lib'; -import { getMockPresentationContainer } from '@kbn/presentation-containers/mocks'; - -// Mock saved objects finder component so we can call the onChoose method. -jest.mock('@kbn/saved-objects-finder-plugin/public', () => { - return { - SavedObjectFinder: jest - .fn() - .mockImplementation( - ({ - onChoose, - }: { - onChoose: (id: string, type: string, name: string, so: unknown) => Promise; - }) => ( - <> - - - - ) - ), - }; -}); - -describe('add panel flyout', () => { - describe('registered embeddables', () => { - let container: Container; - const onAdd = jest.fn(); - - beforeAll(() => { - registerReactEmbeddableSavedObject({ - onAdd, - embeddableType: 'AWESOME_EMBEDDABLE', - savedObjectType: 'AWESOME_EMBEDDABLE', - savedObjectName: 'Awesome sauce', - getIconForSavedObject: () => 'happyface', - }); - - embeddableStart.getEmbeddableFactories = jest.fn().mockReturnValue([]); - }); - - beforeEach(() => { - onAdd.mockClear(); - container = getMockPresentationContainer() as unknown as Container; - // @ts-ignore type is only expected on a dashboard container - container.type = 'DASHBOARD_CONTAINER'; - }); - - test('add panel flyout renders SavedObjectFinder', async () => { - const { container: componentContainer } = render(); - - // component should not contain an extra flyout - // https://github.com/elastic/kibana/issues/64789 - const flyout = componentContainer.querySelector('.euiFlyout'); - expect(flyout).toBeNull(); - const dummyButton = screen.queryAllByTestId('soFinderAddButton'); - expect(dummyButton).toHaveLength(1); - }); - - test('add panel calls the registered onAdd method', async () => { - render(); - expect(Object.values(container.children$.value).length).toBe(0); - fireEvent.click(screen.getByTestId('soFinderAddButton')); - // flush promises - await new Promise((r) => setTimeout(r, 1)); - - expect(onAdd).toHaveBeenCalledWith(container, {}); - }); - - test('runs telemetry function on add embeddable', async () => { - render(); - - expect(Object.values(container.children$.value).length).toBe(0); - fireEvent.click(screen.getByTestId('soFinderAddButton')); - // flush promises - await new Promise((r) => setTimeout(r, 1)); - - expect(usageCollection.reportUiCounter).toHaveBeenCalledWith( - 'DASHBOARD_CONTAINER', - 'click', - 'AWESOME_EMBEDDABLE:add' - ); - }); - }); - - describe('legacy embeddables', () => { - let container: Container; - - beforeEach(() => { - const coreStart = coreMock.createStart(); - const contactCardEmbeddableFactory = new ContactCardEmbeddableFactory( - (() => null) as any, - coreStart - ); - - embeddableStart.getEmbeddableFactories = jest - .fn() - .mockReturnValue([contactCardEmbeddableFactory]); - - container = getMockPresentationContainer() as unknown as Container; - container.addNewEmbeddable = jest.fn().mockResolvedValue({ id: 'foo' }); - // @ts-ignore type is only expected on a dashboard container - container.type = 'HELLO_WORLD_CONTAINER'; - }); - - test('add panel flyout renders SavedObjectFinder', async () => { - const { container: componentContainer } = render(); - - // component should not contain an extra flyout - // https://github.com/elastic/kibana/issues/64789 - const flyout = componentContainer.querySelector('.euiFlyout'); - expect(flyout).toBeNull(); - const dummyButton = screen.queryAllByTestId('soFinderAddLegacyButton'); - expect(dummyButton).toHaveLength(1); - }); - - test('add panel adds legacy embeddable to container', async () => { - render(); - expect(Object.values(container.children$.value).length).toBe(0); - fireEvent.click(screen.getByTestId('soFinderAddLegacyButton')); - // flush promises - await new Promise((r) => setTimeout(r, 1)); - - expect(container.addNewEmbeddable).toHaveBeenCalled(); - }); - - test('shows a success toast on add', async () => { - render(); - fireEvent.click(screen.getByTestId('soFinderAddLegacyButton')); - // flush promises - await new Promise((r) => setTimeout(r, 1)); - - expect(core.notifications.toasts.addSuccess).toHaveBeenCalledWith({ - 'data-test-subj': 'addObjectToContainerSuccess', - title: 'test name was added', - }); - }); - - test('runs telemetry function on add legacy embeddable', async () => { - render(); - - expect(Object.values(container.children$.value).length).toBe(0); - fireEvent.click(screen.getByTestId('soFinderAddLegacyButton')); - // flush promises - await new Promise((r) => setTimeout(r, 1)); - - expect(usageCollection.reportUiCounter).toHaveBeenCalledWith( - 'HELLO_WORLD_CONTAINER', - 'click', - 'CONTACT_CARD_EMBEDDABLE:add' - ); - }); - }); -}); diff --git a/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx b/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx deleted file mode 100644 index 1bb7137479017..0000000000000 --- a/src/plugins/embeddable/public/add_panel_flyout/add_panel_flyout.tsx +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import React, { useCallback, useMemo } from 'react'; - -import { i18n } from '@kbn/i18n'; -import { EuiFlyoutBody, EuiFlyoutHeader, EuiTitle } from '@elastic/eui'; -import { FinderAttributes, SavedObjectCommon } from '@kbn/saved-objects-finder-plugin/common'; -import { - SavedObjectFinder, - SavedObjectFinderProps, - type SavedObjectMetaData, -} from '@kbn/saved-objects-finder-plugin/public'; - -import { METRIC_TYPE } from '@kbn/analytics'; -import { apiHasType } from '@kbn/presentation-publishing'; -import { Toast } from '@kbn/core/public'; -import { CanAddNewPanel } from '@kbn/presentation-containers'; -import { - core, - embeddableStart, - savedObjectsTaggingOss, - contentManagement, - usageCollection, -} from '../kibana_services'; -import { savedObjectToPanel } from '../registry/saved_object_to_panel_methods'; -import { - ReactEmbeddableSavedObject, - EmbeddableFactory, - EmbeddableFactoryNotFoundError, - getReactEmbeddableSavedObjects, - PanelIncompatibleError, -} from '../lib'; - -type LegacyFactoryMap = { [key: string]: EmbeddableFactory }; -type FactoryMap = { - [key: string]: ReactEmbeddableSavedObject & { type: string }; -}; - -type CanAddNewEmbeddable = { - addNewEmbeddable: (type: string, explicitInput: unknown, attributes: unknown) => { id: string }; -}; - -const apiCanAddNewEmbeddable = (api: unknown): api is CanAddNewEmbeddable => { - return typeof (api as CanAddNewEmbeddable).addNewEmbeddable === 'function'; -}; - -let lastToast: string | Toast; -const showSuccessToast = (name: string) => { - if (lastToast) core.notifications.toasts.remove(lastToast); - - lastToast = core.notifications.toasts.addSuccess({ - title: i18n.translate('embeddableApi.addPanel.savedObjectAddedToContainerSuccessMessageTitle', { - defaultMessage: '{savedObjectName} was added', - values: { - savedObjectName: name, - }, - }), - 'data-test-subj': 'addObjectToContainerSuccess', - }); -}; - -const runAddTelemetry = ( - parent: unknown, - factoryType: string, - savedObject: SavedObjectCommon, - savedObjectMetaData?: SavedObjectMetaData -) => { - if (!apiHasType(parent)) return; - const type = savedObjectMetaData?.getSavedObjectSubType - ? savedObjectMetaData.getSavedObjectSubType(savedObject) - : factoryType; - - usageCollection?.reportUiCounter?.(parent.type, METRIC_TYPE.CLICK, `${type}:add`); -}; - -export const AddPanelFlyout = ({ - container, - onAddPanel, - modalTitleId, -}: { - container: CanAddNewPanel; - onAddPanel?: (id: string) => void; - modalTitleId?: string; -}) => { - const legacyFactoriesBySavedObjectType: LegacyFactoryMap = useMemo(() => { - return [...embeddableStart.getEmbeddableFactories()] - .filter( - (embeddableFactory) => - Boolean(embeddableFactory.savedObjectMetaData?.type) && !embeddableFactory.isContainerType - ) - .reduce((acc, factory) => { - acc[factory.savedObjectMetaData!.type] = factory; - return acc; - }, {} as LegacyFactoryMap); - }, []); - - const factoriesBySavedObjectType: FactoryMap = useMemo(() => { - return [...getReactEmbeddableSavedObjects()] - .filter(([type, embeddableFactory]) => { - return Boolean(embeddableFactory.savedObjectMetaData?.type); - }) - .reduce((acc, [type, factory]) => { - acc[factory.savedObjectMetaData!.type] = { - ...factory, - type, - }; - return acc; - }, {} as FactoryMap); - }, []); - - const metaData = useMemo( - () => - [ - ...Object.values(factoriesBySavedObjectType), - ...Object.values(legacyFactoriesBySavedObjectType), - ] - .filter((embeddableFactory) => Boolean(embeddableFactory.savedObjectMetaData)) - .map(({ savedObjectMetaData }) => savedObjectMetaData!) - .sort((a, b) => a.type.localeCompare(b.type)), - [factoriesBySavedObjectType, legacyFactoriesBySavedObjectType] - ); - - const onChoose: SavedObjectFinderProps['onChoose'] = useCallback( - async ( - id: SavedObjectCommon['id'], - type: SavedObjectCommon['type'], - name: string, - savedObject: SavedObjectCommon - ) => { - if (factoriesBySavedObjectType[type]) { - const factory = factoriesBySavedObjectType[type]; - const { onAdd, savedObjectMetaData } = factory; - - onAdd(container, savedObject); - runAddTelemetry(container, factory.type, savedObject, savedObjectMetaData); - return; - } - - const legacyFactoryForSavedObjectType = legacyFactoriesBySavedObjectType[type]; - if (!legacyFactoryForSavedObjectType) { - throw new EmbeddableFactoryNotFoundError(type); - } - - // container.addNewEmbeddable is required for legacy embeddables to support - // panel placement strategies - if (!apiCanAddNewEmbeddable(container)) { - throw new PanelIncompatibleError(); - } - - let embeddableId: string; - - if (savedObjectToPanel[type]) { - // this panel type has a custom method for converting saved objects to panels - const panel = savedObjectToPanel[type](savedObject); - - const { id: _embeddableId } = await container.addNewEmbeddable( - legacyFactoryForSavedObjectType.type, - panel, - savedObject.attributes - ); - - embeddableId = _embeddableId; - } else { - const { id: _embeddableId } = await container.addNewEmbeddable( - legacyFactoryForSavedObjectType.type, - { savedObjectId: id }, - savedObject.attributes - ); - - embeddableId = _embeddableId; - } - - onAddPanel?.(embeddableId); - - showSuccessToast(name); - const { savedObjectMetaData, type: factoryType } = legacyFactoryForSavedObjectType; - runAddTelemetry(container, factoryType, savedObject, savedObjectMetaData); - }, - [container, factoriesBySavedObjectType, legacyFactoriesBySavedObjectType, onAddPanel] - ); - - return ( - <> - - -

    - {i18n.translate('embeddableApi.addPanel.Title', { defaultMessage: 'Add from library' })} -

    -
    -
    - - { - return item.managed - ? i18n.translate('embeddableApi.addPanel.managedPanelTooltip', { - defaultMessage: - 'Elastic manages this panel. Adding it to a dashboard unlinks it from the library.', - }) - : undefined; - }} - /> - - - ); -}; diff --git a/src/plugins/embeddable/public/index.ts b/src/plugins/embeddable/public/index.ts index e6e3a4bb3fe04..25a25b2447146 100644 --- a/src/plugins/embeddable/public/index.ts +++ b/src/plugins/embeddable/public/index.ts @@ -10,7 +10,8 @@ import { PluginInitializerContext } from '@kbn/core/public'; import { EmbeddablePublicPlugin } from './plugin'; -export { openAddPanelFlyout } from './add_panel_flyout/open_add_panel_flyout'; +export { useAddFromLibraryTypes } from './add_from_library/registry'; +export { openAddFromLibraryFlyout } from './add_from_library/open_add_from_library_flyout'; export { EmbeddablePanel } from './embeddable_panel'; export { cellValueTrigger, @@ -80,7 +81,6 @@ export type { PanelState, PropertySpec, RangeSelectContext, - ReactEmbeddableSavedObject, ReferenceOrValueEmbeddable, SavedObjectEmbeddableInput, SelfStyledEmbeddable, diff --git a/src/plugins/embeddable/public/lib/embeddable_saved_object_registry/index.ts b/src/plugins/embeddable/public/lib/embeddable_saved_object_registry/index.ts deleted file mode 100644 index c0d7cdecb86b3..0000000000000 --- a/src/plugins/embeddable/public/lib/embeddable_saved_object_registry/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -export { - type ReactEmbeddableSavedObject, - getReactEmbeddableSavedObjects, - registerReactEmbeddableSavedObject, -} from './embeddable_saved_object_registry'; diff --git a/src/plugins/embeddable/public/lib/index.ts b/src/plugins/embeddable/public/lib/index.ts index e20fbfbe2bcf3..bcae2e69ec407 100644 --- a/src/plugins/embeddable/public/lib/index.ts +++ b/src/plugins/embeddable/public/lib/index.ts @@ -17,4 +17,3 @@ export * from './reference_or_value_embeddable'; export * from './self_styled_embeddable'; export * from './filterable_embeddable'; export * from './factory_migrations/run_factory_migrations'; -export * from './embeddable_saved_object_registry'; diff --git a/src/plugins/embeddable/public/mocks.tsx b/src/plugins/embeddable/public/mocks.tsx index cd95c08702732..fcabaa7cdb6c7 100644 --- a/src/plugins/embeddable/public/mocks.tsx +++ b/src/plugins/embeddable/public/mocks.tsx @@ -33,14 +33,13 @@ import { SelfStyledEmbeddable, } from '.'; import { setKibanaServices } from './kibana_services'; -import { registerReactEmbeddableSavedObject } from './lib'; import { SelfStyledOptions } from './lib/self_styled_embeddable/types'; import { EmbeddablePublicPlugin } from './plugin'; import { reactEmbeddableRegistryHasKey, registerReactEmbeddableFactory, } from './react_embeddable_system'; -import { registerSavedObjectToPanelMethod } from './registry/saved_object_to_panel_methods'; +import { registerAddFromLibraryType } from './add_from_library/registry'; export { mockAttributeService } from './lib/attribute_service/attribute_service.mock'; export type Setup = jest.Mocked; @@ -100,12 +99,7 @@ export function mockFilterableEmbeddable( const createSetupContract = (): Setup => { const setupContract: Setup = { - registerSavedObjectToPanelMethod: jest - .fn() - .mockImplementation(registerSavedObjectToPanelMethod), - registerReactEmbeddableSavedObject: jest - .fn() - .mockImplementation(registerReactEmbeddableSavedObject), + registerAddFromLibraryType: jest.fn().mockImplementation(registerAddFromLibraryType), registerReactEmbeddableFactory: jest.fn().mockImplementation(registerReactEmbeddableFactory), registerEmbeddableFactory: jest.fn(), registerEnhancement: jest.fn(), @@ -117,7 +111,6 @@ const createSetupContract = (): Setup => { const createStartContract = (): Start => { const startContract: Start = { reactEmbeddableRegistryHasKey: jest.fn().mockImplementation(reactEmbeddableRegistryHasKey), - getReactEmbeddableSavedObjects: jest.fn(), getEmbeddableFactories: jest.fn(), getEmbeddableFactory: jest.fn(), telemetry: jest.fn(), diff --git a/src/plugins/embeddable/public/plugin.tsx b/src/plugins/embeddable/public/plugin.tsx index 12625a597afd4..801b518a0bd01 100644 --- a/src/plugins/embeddable/public/plugin.tsx +++ b/src/plugins/embeddable/public/plugin.tsx @@ -25,7 +25,6 @@ import { migrateToLatest, PersistableStateService } from '@kbn/kibana-utils-plug import { SavedObjectsManagementPluginStart } from '@kbn/saved-objects-management-plugin/public'; import type { ContentManagementPublicStart } from '@kbn/content-management-plugin/public'; import type { SavedObjectTaggingOssPluginStart } from '@kbn/saved-objects-tagging-oss-plugin/public'; -import { FinderAttributes } from '@kbn/saved-objects-finder-plugin/common'; import { EmbeddableFactoryRegistry, EmbeddableFactoryProvider, @@ -41,9 +40,6 @@ import { defaultEmbeddableFactoryProvider, IEmbeddable, SavedObjectEmbeddableInput, - registerReactEmbeddableSavedObject, - ReactEmbeddableSavedObject, - getReactEmbeddableSavedObjects, } from './lib'; import { EmbeddableFactoryDefinition } from './lib/embeddables/embeddable_factory_definition'; import { EmbeddableStateTransfer } from './lib/state_transfer'; @@ -62,7 +58,7 @@ import { reactEmbeddableRegistryHasKey, registerReactEmbeddableFactory, } from './react_embeddable_system'; -import { registerSavedObjectToPanelMethod } from './registry/saved_object_to_panel_methods'; +import { registerAddFromLibraryType } from './add_from_library/registry'; export interface EmbeddableSetupDependencies { uiActions: UiActionsSetup; @@ -79,17 +75,16 @@ export interface EmbeddableStartDependencies { export interface EmbeddableSetup { /** - * Register an embeddable API saved object with the Add from library flyout. + * Register a saved object type with the "Add from library" flyout. * * @example - * registerReactEmbeddableSavedObject({ + * registerAddFromLibraryType({ * onAdd: (container, savedObject) => { * container.addNewPanel({ * panelType: CONTENT_ID, * initialState: savedObject.attributes, * }); * }, - * embeddableType: CONTENT_ID, * savedObjectType: MAP_SAVED_OBJECT_TYPE, * savedObjectName: i18n.translate('xpack.maps.mapSavedObjectLabel', { * defaultMessage: 'Map', @@ -97,12 +92,7 @@ export interface EmbeddableSetup { * getIconForSavedObject: () => APP_ICON, * }); */ - registerReactEmbeddableSavedObject: typeof registerReactEmbeddableSavedObject; - - /** - * @deprecated React embeddables should register their saved objects with {@link registerReactEmbeddableSavedObject}. - */ - registerSavedObjectToPanelMethod: typeof registerSavedObjectToPanelMethod; + registerAddFromLibraryType: typeof registerAddFromLibraryType; /** * Registers an async {@link ReactEmbeddableFactory} getter. @@ -136,14 +126,6 @@ export interface EmbeddableStart extends PersistableStateService boolean; - /** - * - * @returns An iterator over all {@link ReactEmbeddableSavedObject}s that have been registered using {@link registerReactEmbeddableSavedObject}. - */ - getReactEmbeddableSavedObjects: < - TSavedObjectAttributes extends FinderAttributes - >() => IterableIterator<[string, ReactEmbeddableSavedObject]>; - /** * @deprecated use {@link registerReactEmbeddableFactory} instead. */ @@ -192,8 +174,7 @@ export class EmbeddablePublicPlugin implements Plugin = ( - // @ts-expect-error upgrade typescript v4.9.5 - savedObject: SavedObjectCommon -) => { savedObjectId: string } | Partial; - -export const savedObjectToPanel: Record> = {}; - -/** - * @deprecated - * React embeddables should register their saved object types with the registerReactEmbeddableSavedObject registry. - */ -export const registerSavedObjectToPanelMethod = ( - savedObjectType: string, - method: SavedObjectToPanelMethod -) => { - savedObjectToPanel[savedObjectType] = method; -}; diff --git a/src/plugins/links/public/plugin.ts b/src/plugins/links/public/plugin.ts index add09c8c2514b..05b9faf59c7b8 100644 --- a/src/plugins/links/public/plugin.ts +++ b/src/plugins/links/public/plugin.ts @@ -61,7 +61,7 @@ export class LinksPlugin name: APP_NAME, }); - plugins.embeddable.registerReactEmbeddableSavedObject({ + plugins.embeddable.registerAddFromLibraryType({ onAdd: async (container, savedObject) => { const initialState = await deserializeLinksSavedObject(savedObject); container.addNewPanel({ @@ -69,7 +69,6 @@ export class LinksPlugin initialState, }); }, - embeddableType: CONTENT_ID, savedObjectType: CONTENT_ID, savedObjectName: APP_NAME, getIconForSavedObject: () => APP_ICON, diff --git a/src/plugins/visualizations/public/plugin.ts b/src/plugins/visualizations/public/plugin.ts index fcb3dc5137161..856c16104b6ca 100644 --- a/src/plugins/visualizations/public/plugin.ts +++ b/src/plugins/visualizations/public/plugin.ts @@ -411,14 +411,13 @@ export class VisualizationsPlugin const getVisualizeEmbeddableFactory = await getVisualizeEmbeddableFactoryLazy(); return getVisualizeEmbeddableFactory({ embeddableStart, embeddableEnhancedStart }); }); - embeddable.registerReactEmbeddableSavedObject({ + embeddable.registerAddFromLibraryType({ onAdd: (container, savedObject) => { container.addNewPanel({ panelType: VISUALIZE_EMBEDDABLE_TYPE, initialState: { savedObjectId: savedObject.id }, }); }, - embeddableType: VISUALIZE_EMBEDDABLE_TYPE, savedObjectType: VISUALIZE_EMBEDDABLE_TYPE, savedObjectName: i18n.translate('visualizations.visualizeSavedObjectName', { defaultMessage: 'Visualization', diff --git a/x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx b/x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx index 543367fda127a..52454a10ca732 100644 --- a/x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx +++ b/x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx @@ -9,14 +9,9 @@ import { EuiFlyout, EuiFlyoutBody, EuiFlyoutHeader, EuiTitle } from '@elastic/eu import { i18n } from '@kbn/i18n'; import React, { FC, useCallback, useMemo } from 'react'; -import { EmbeddableFactory, ReactEmbeddableSavedObject } from '@kbn/embeddable-plugin/public'; -import { FinderAttributes } from '@kbn/saved-objects-finder-plugin/common'; -import { SavedObjectFinder, SavedObjectMetaData } from '@kbn/saved-objects-finder-plugin/public'; -import { - contentManagementService, - coreServices, - embeddableService, -} from '../../services/kibana_services'; +import { useAddFromLibraryTypes } from '@kbn/embeddable-plugin/public'; +import { SavedObjectFinder } from '@kbn/saved-objects-finder-plugin/public'; +import { contentManagementService, coreServices } from '../../services/kibana_services'; const strings = { getNoItemsText: () => @@ -29,13 +24,6 @@ const strings = { }), }; -interface LegacyFactoryMap { - [key: string]: EmbeddableFactory; -} -interface FactoryMap { - [key: string]: ReactEmbeddableSavedObject & { type: string }; -} - export interface Props { onClose: () => void; onSelect: (id: string, embeddableType: string, isByValueEnabled?: boolean) => void; @@ -49,81 +37,18 @@ export const AddEmbeddableFlyout: FC = ({ onClose, isByValueEnabled, }) => { - const legacyFactoriesBySavedObjectType: LegacyFactoryMap = useMemo(() => { - return [...embeddableService.getEmbeddableFactories()] - .filter( - (embeddableFactory) => - Boolean(embeddableFactory.savedObjectMetaData?.type) && !embeddableFactory.isContainerType - ) - .reduce((acc, factory) => { - acc[factory.savedObjectMetaData!.type] = factory; - return acc; - }, {} as LegacyFactoryMap); - }, []); + const libraryTypes = useAddFromLibraryTypes(); - const factoriesBySavedObjectType: FactoryMap = useMemo(() => { - return [...embeddableService.getReactEmbeddableSavedObjects()] - .filter(([type, embeddableFactory]) => { - return Boolean(embeddableFactory.savedObjectMetaData?.type); - }) - .reduce((acc, [type, factory]) => { - acc[factory.savedObjectMetaData!.type] = { - ...factory, - type, - }; - return acc; - }, {} as FactoryMap); - }, []); - - const metaData = useMemo( - () => - [ - ...Object.values(factoriesBySavedObjectType), - ...Object.values(legacyFactoriesBySavedObjectType), - ] - .filter((factory) => - Boolean( - factory.type !== 'links' && // Links panels only exist on Dashboards - (isByValueEnabled || availableEmbeddables.includes(factory.type)) - ) - ) - .map((factory) => factory.savedObjectMetaData) - .filter>(function ( - maybeSavedObjectMetaData - ): maybeSavedObjectMetaData is SavedObjectMetaData<{}> { - return maybeSavedObjectMetaData !== undefined; - }) - .sort((a, b) => a.type.localeCompare(b.type)), - [ - availableEmbeddables, - factoriesBySavedObjectType, - isByValueEnabled, - legacyFactoriesBySavedObjectType, - ] - ); + const canvasOnlyLibraryTypes = useMemo(() => { + // Links panels are not supported in Canvas + return libraryTypes.filter(({ type }) => type !== 'links'); + }, [libraryTypes]); const onAddPanel = useCallback( (id: string, savedObjectType: string) => { - if (factoriesBySavedObjectType[savedObjectType]) { - const factory = factoriesBySavedObjectType[savedObjectType]; - const { type } = factory; - onSelect(id, type, isByValueEnabled); - return; - } - const embeddableFactories = embeddableService.getEmbeddableFactories(); - // Find the embeddable type from the saved object type - const found = Array.from(embeddableFactories).find((embeddableFactory) => { - return Boolean( - embeddableFactory.savedObjectMetaData && - embeddableFactory.savedObjectMetaData.type === savedObjectType - ); - }); - - const foundEmbeddableType = found ? found.type : 'unknown'; - - onSelect(id, foundEmbeddableType, isByValueEnabled); + onSelect(id, savedObjectType, isByValueEnabled); }, - [isByValueEnabled, onSelect, factoriesBySavedObjectType] + [isByValueEnabled, onSelect] ); return ( @@ -137,7 +62,7 @@ export const AddEmbeddableFlyout: FC = ({ ({ + embeddable.registerAddFromLibraryType({ onAdd: async (container, savedObject) => { const { attributeService } = await getStartServicesForEmbeddable(); // deserialize the saved object from visualize library @@ -411,7 +411,6 @@ export class LensPlugin { initialState: state, }); }, - embeddableType: LENS_EMBEDDABLE_TYPE, savedObjectType: LENS_EMBEDDABLE_TYPE, savedObjectName: i18n.translate('xpack.lens.mapSavedObjectLabel', { defaultMessage: 'Lens', diff --git a/x-pack/plugins/maps/public/react_embeddable/setup_map_embeddable.ts b/x-pack/plugins/maps/public/react_embeddable/setup_map_embeddable.ts index efaf3238a8068..5859bde4a173d 100644 --- a/x-pack/plugins/maps/public/react_embeddable/setup_map_embeddable.ts +++ b/x-pack/plugins/maps/public/react_embeddable/setup_map_embeddable.ts @@ -22,14 +22,13 @@ export function setupMapEmbeddable(embeddableSetup: EmbeddableSetup) { return mapEmbeddableFactory; }); - embeddableSetup.registerReactEmbeddableSavedObject({ + embeddableSetup.registerAddFromLibraryType({ onAdd: (container, savedObject) => { container.addNewPanel({ panelType: MAP_SAVED_OBJECT_TYPE, initialState: { savedObjectId: savedObject.id }, }); }, - embeddableType: MAP_SAVED_OBJECT_TYPE, savedObjectType: MAP_SAVED_OBJECT_TYPE, savedObjectName: i18n.translate('xpack.maps.mapSavedObjectLabel', { defaultMessage: 'Map', diff --git a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/add_from_library_button/index.tsx b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/add_from_library_button/index.tsx index a6befb3062ebb..282ae5cfc22a6 100644 --- a/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/add_from_library_button/index.tsx +++ b/x-pack/plugins/observability_solution/investigate_app/public/pages/details/components/add_from_library_button/index.tsx @@ -7,7 +7,7 @@ import type { OverlayRef } from '@kbn/core/public'; import { v4 } from 'uuid'; -import { openAddPanelFlyout } from '@kbn/embeddable-plugin/public'; +import { openAddFromLibraryFlyout } from '@kbn/embeddable-plugin/public'; import { i18n } from '@kbn/i18n'; import type { FinderAttributes } from '@kbn/saved-objects-finder-plugin/common'; import React, { useMemo, useRef } from 'react'; @@ -107,7 +107,7 @@ export function AddFromLibraryButton({ onItemAdd }: AddFromLibraryButtonProps) { data-test-subj="investigateAppAddFromLibraryButtonImportFromLibraryButton" iconType="importAction" onClick={() => { - panelRef.current = openAddPanelFlyout({ + panelRef.current = openAddFromLibraryFlyout({ container, }); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 9477e029f8ce5..b1b705903a81d 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -2814,7 +2814,6 @@ "domDragDrop.keyboardInstructionsReorder": "Appuyez sur la barre d'espace ou sur Entrée pour commencer à faire glisser. Lors du glissement, utilisez les touches fléchées haut/bas pour réorganiser les éléments dans le groupe et les touches gauche/droite pour choisir les cibles de dépôt à l'extérieur du groupe. Appuyez à nouveau sur la barre d'espace ou sur Entrée pour terminer.", "embeddableApi.addPanel.managedPanelTooltip": "Elastic gère ce panneau. Le fait de l'ajouter à un tableau de bord le dissocie de la bibliothèque.", "embeddableApi.addPanel.noMatchingObjectsMessage": "Aucun objet correspondant trouvé.", - "embeddableApi.addPanel.savedObjectAddedToContainerSuccessMessageTitle": "{savedObjectName} a été ajouté.", "embeddableApi.addPanel.Title": "Ajouter depuis la bibliothèque", "embeddableApi.attributeService.saveToLibraryError": "Une erreur s'est produite lors de l'enregistrement. Erreur : {errorMessage}.", "embeddableApi.cellValueTrigger.description": "Les actions apparaissent dans les options de valeur de cellule dans la visualisation", @@ -2825,7 +2824,6 @@ "embeddableApi.compatibility.defaultTypeDisplayName": "graphique", "embeddableApi.contextMenuTrigger.description": "Une nouvelle action sera ajoutée au menu contextuel du panneau", "embeddableApi.contextMenuTrigger.title": "Menu contextuel", - "embeddableApi.embeddableSavedObjectRegistry.keyAlreadyExistsError": "Le type incorporable {embeddableType} existe déjà dans le registre.", "embeddableApi.errors.embeddableFactoryNotFound": "Impossible de charger {type}. Veuillez effectuer une mise à niveau vers la distribution par défaut d'Elasticsearch et de Kibana avec la licence appropriée.", "embeddableApi.errors.paneldoesNotExist": "Panneau introuvable", "embeddableApi.errors.panelIncompatibleError": "L'API du panneau n'est pas compatible", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 84ce5792687d2..67f3663b75c7b 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2809,7 +2809,6 @@ "domDragDrop.keyboardInstructionsReorder": "スペースまたはEnterを押してドラッグを開始します。ドラッグするときには、上下矢印キーを使用すると、グループの項目を並べ替えます。左右矢印キーを使用すると、グループの外側でドロップ対象を選択します。もう一度スペースまたはEnterを押すと終了します。", "embeddableApi.addPanel.managedPanelTooltip": "Elasticはこのパネルを管理します。ダッシュボードに追加すると、ライブラリからリンクが解除されます。", "embeddableApi.addPanel.noMatchingObjectsMessage": "一致するオブジェクトが見つかりませんでした。", - "embeddableApi.addPanel.savedObjectAddedToContainerSuccessMessageTitle": "{savedObjectName} が追加されました", "embeddableApi.addPanel.Title": "ライブラリから追加", "embeddableApi.attributeService.saveToLibraryError": "保存中にエラーが発生しました。エラー:{errorMessage}", "embeddableApi.cellValueTrigger.description": "アクションはビジュアライゼーションのセル値オプションに表示されます", @@ -2820,7 +2819,6 @@ "embeddableApi.compatibility.defaultTypeDisplayName": "チャート", "embeddableApi.contextMenuTrigger.description": "新しいアクションがパネルのコンテキストメニューに追加されます", "embeddableApi.contextMenuTrigger.title": "コンテキストメニュー", - "embeddableApi.embeddableSavedObjectRegistry.keyAlreadyExistsError": "埋め込み可能タイプ\"{embeddableType}\"はすでにレジストリに存在します。", "embeddableApi.errors.embeddableFactoryNotFound": "{type} を読み込めません。Elasticsearch と Kibanaのデフォルトのディストリビューションを適切なライセンスでアップグレードしてください。", "embeddableApi.errors.paneldoesNotExist": "パネルが見つかりません", "embeddableApi.errors.panelIncompatibleError": "パネルAPIに互換性がありません", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 872b69fce5e63..961ac1331a399 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2799,7 +2799,6 @@ "domDragDrop.keyboardInstructionsReorder": "按空格键或 enter 键开始拖动。拖动时,请使用上下箭头键重新排列组中的项目,使用左右箭头键在组之外选择拖动目标。再次按空格键或 enter 键结束操作。", "embeddableApi.addPanel.managedPanelTooltip": "Elastic 将管理此面板。将其添加到仪表板会取消其与库的链接。", "embeddableApi.addPanel.noMatchingObjectsMessage": "未找到任何匹配对象。", - "embeddableApi.addPanel.savedObjectAddedToContainerSuccessMessageTitle": "{savedObjectName} 已添加", "embeddableApi.addPanel.Title": "从库中添加", "embeddableApi.attributeService.saveToLibraryError": "保存时出错。错误:{errorMessage}", "embeddableApi.cellValueTrigger.description": "操作在可视化上的单元格值选项中显示", @@ -2810,7 +2809,6 @@ "embeddableApi.compatibility.defaultTypeDisplayName": "图表", "embeddableApi.contextMenuTrigger.description": "会将一个新操作添加到该面板的上下文菜单", "embeddableApi.contextMenuTrigger.title": "上下文菜单", - "embeddableApi.embeddableSavedObjectRegistry.keyAlreadyExistsError": "注册表中已存在可嵌入对象类型 {embeddableType}。", "embeddableApi.errors.embeddableFactoryNotFound": "{type} 无法加载。请升级到具有适当许可的默认 Elasticsearch 和 Kibana 分发。", "embeddableApi.errors.paneldoesNotExist": "未找到面板", "embeddableApi.errors.panelIncompatibleError": "面板 API 不兼容", From 02ee795ceeb854a5bf181d4e820500198e446459 Mon Sep 17 00:00:00 2001 From: Bharat Pasupula <123897612+bhapas@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:25:07 +0100 Subject: [PATCH 105/141] [Automatic Import] Add serverless availability cypress test (#202872) --- .../security_solution/automatic_import.yml | 20 +++++++++++ .../pipelines/pull_request/pipeline.ts | 3 ++ .../security_serverless_automatic_import.sh | 17 ++++++++++ .github/CODEOWNERS | 1 + .../automatic_import/feature_essentials.cy.ts | 34 +++++++++++++++++++ .../cypress/screens/automatic_import.ts | 9 +++++ .../security_solution_cypress/package.json | 1 + 7 files changed, 85 insertions(+) create mode 100644 .buildkite/pipelines/pull_request/security_solution/automatic_import.yml create mode 100644 .buildkite/scripts/steps/functional/security_serverless_automatic_import.sh create mode 100644 x-pack/test/security_solution_cypress/cypress/e2e/automatic_import/feature_essentials.cy.ts create mode 100644 x-pack/test/security_solution_cypress/cypress/screens/automatic_import.ts diff --git a/.buildkite/pipelines/pull_request/security_solution/automatic_import.yml b/.buildkite/pipelines/pull_request/security_solution/automatic_import.yml new file mode 100644 index 0000000000000..867238fbde99b --- /dev/null +++ b/.buildkite/pipelines/pull_request/security_solution/automatic_import.yml @@ -0,0 +1,20 @@ +steps: + - command: .buildkite/scripts/steps/functional/security_serverless_automatic_import.sh + label: 'Serverless Automatic Import - Security Solution Cypress Tests' + agents: + machineType: n2-standard-4 + preemptible: true + depends_on: + - build + - quick_checks + - checks + - linting + - linting_with_types + - check_types + - check_oas_snapshot + timeout_in_minutes: 60 + parallelism: 1 + retry: + automatic: + - exit_status: '-1' + limit: 1 diff --git a/.buildkite/scripts/pipelines/pull_request/pipeline.ts b/.buildkite/scripts/pipelines/pull_request/pipeline.ts index ad71f70258a23..e4a0617579cf5 100644 --- a/.buildkite/scripts/pipelines/pull_request/pipeline.ts +++ b/.buildkite/scripts/pipelines/pull_request/pipeline.ts @@ -266,6 +266,9 @@ const getPipeline = (filename: string, removeSteps = true) => { pipeline.push( getPipeline('.buildkite/pipelines/pull_request/security_solution/ai_assistant.yml') ); + pipeline.push( + getPipeline('.buildkite/pipelines/pull_request/security_solution/automatic_import.yml') + ); pipeline.push( getPipeline('.buildkite/pipelines/pull_request/security_solution/detection_engine.yml') ); diff --git a/.buildkite/scripts/steps/functional/security_serverless_automatic_import.sh b/.buildkite/scripts/steps/functional/security_serverless_automatic_import.sh new file mode 100644 index 0000000000000..823ee6dd67bb7 --- /dev/null +++ b/.buildkite/scripts/steps/functional/security_serverless_automatic_import.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +set -euo pipefail + +source .buildkite/scripts/steps/functional/common.sh + +export JOB=kibana-security-solution-chrome +export KIBANA_INSTALL_DIR=${KIBANA_BUILD_LOCATION} + +echo "--- Automatic Import Cypress Tests on Serverless" + +cd x-pack/test/security_solution_cypress + +set +e +BK_ANALYTICS_API_KEY=$(vault_get security-solution-ci sec-sol-cypress-bk-api-key) + +BK_ANALYTICS_API_KEY=$BK_ANALYTICS_API_KEY yarn cypress:automatic_import:run:serverless; status=$?; yarn junit:merge || :; exit $status diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1bf4354a52401..210ef172b78ea 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2148,6 +2148,7 @@ x-pack/test_serverless/functional/test_suites/security/index.mki_only.ts @elasti /x-pack/plugins/security_solution/public/attack_discovery @elastic/security-generative-ai /x-pack/test/security_solution_cypress/cypress/e2e/ai_assistant @elastic/security-generative-ai /x-pack/plugins/security_solution_ess/public/upselling/pages/attack_discovery @elastic/security-generative-ai +/x-pack/test/security_solution_cypress/cypress/e2e/automatic_import @elastic/security-scalability # Security Solution cross teams ownership /x-pack/test/security_solution_cypress/cypress/fixtures @elastic/security-detections-response @elastic/security-threat-hunting diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/automatic_import/feature_essentials.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/automatic_import/feature_essentials.cy.ts new file mode 100644 index 0000000000000..2145b849ba121 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/e2e/automatic_import/feature_essentials.cy.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { ASSISTANT_BUTTON, CREATE_INTEGRATION_LANDING_PAGE } from '../../screens/automatic_import'; +import { login } from '../../tasks/login'; + +describe( + 'App Features for Security Essentials', + { + tags: ['@serverless'], + env: { + ftrConfig: { + productTypes: [ + { product_line: 'security', product_tier: 'essentials' }, + { product_line: 'endpoint', product_tier: 'essentials' }, + ], + }, + }, + }, + () => { + beforeEach(() => { + login(); + }); + + it('should not have Automatic Import available', () => { + cy.visit(CREATE_INTEGRATION_LANDING_PAGE); + cy.get(ASSISTANT_BUTTON).should('not.exist'); + }); + } +); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/automatic_import.ts b/x-pack/test/security_solution_cypress/cypress/screens/automatic_import.ts new file mode 100644 index 0000000000000..eca10339dd010 --- /dev/null +++ b/x-pack/test/security_solution_cypress/cypress/screens/automatic_import.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const CREATE_INTEGRATION_LANDING_PAGE = '/app/integrations/create'; +export const ASSISTANT_BUTTON = 'assistantButton'; diff --git a/x-pack/test/security_solution_cypress/package.json b/x-pack/test/security_solution_cypress/package.json index c7bc7fe1d94a0..68d7454b62e51 100644 --- a/x-pack/test/security_solution_cypress/package.json +++ b/x-pack/test/security_solution_cypress/package.json @@ -33,6 +33,7 @@ "cypress:detection_engine:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/detection_response/detection_engine/!(exceptions)/**/*.cy.ts'", "cypress:detection_engine:exceptions:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/detection_response/detection_engine/exceptions/**/*.cy.ts'", "cypress:ai_assistant:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/ai_assistant/**/*.cy.ts'", + "cypress:automatic_import:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/automatic_import/**/*.cy.ts'", "cypress:investigations:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/investigations/**/*.cy.ts'", "cypress:explore:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/explore/**/*.cy.ts'", "cypress:changed-specs-only:serverless": "yarn cypress:serverless --changed-specs-only --env burn=5", From ddbf94df8f89238d0a91ea4d9e035f908991e11c Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Thu, 5 Dec 2024 15:09:51 -0600 Subject: [PATCH 106/141] [Search] Search Playground - shared rendering (#201302) --- config/serverless.es.yml | 3 - config/serverless.oblt.yml | 1 + config/serverless.security.yml | 1 + packages/deeplinks/search/constants.ts | 2 +- packages/deeplinks/search/deep_links.ts | 6 +- packages/deeplinks/search/index.ts | 1 + .../collectors/application_usage/schema.ts | 1 + src/plugins/telemetry/schema/oss_plugins.json | 131 ++++++++++++++++++ .../common/locators/index.ts | 2 - .../common/locators/playground_locator.tsx | 28 ---- .../__mocks__/kea_logic/kibana_logic.mock.ts | 2 - .../components/layout/page_template.tsx | 9 +- .../playground/header_docs_action.tsx | 27 ---- .../components/playground/page_template.tsx | 71 ---------- .../components/playground/playground.tsx | 46 ------ .../components/playground/types.ts | 19 --- .../components/playground_redirect.tsx | 22 +++ .../applications/applications/index.tsx | 24 +--- .../applications/applications/routes.ts | 3 - .../components/whats_next_box.tsx | 23 ++- .../create_connector/finish_up_step.tsx | 23 ++- .../search_playground_popover.tsx | 21 +-- .../public/applications/index.tsx | 1 - .../shared/kibana/kibana_logic.ts | 4 - .../applications/shared/layout/base_nav.tsx | 2 +- .../shared/layout/classic_nav_helpers.test.ts | 2 +- .../applications/shared/layout/nav.test.tsx | 6 +- .../test_helpers/test_utils.test_helper.tsx | 2 - .../public/navigation_tree.ts | 2 +- .../enterprise_search/public/plugin.ts | 12 +- .../__mocks__/search_playground_mock.ts | 24 ---- .../plugins/search_playground/common/index.ts | 5 +- x-pack/plugins/search_playground/kibana.jsonc | 3 + .../search_playground/public/embeddable.tsx | 34 ----- .../hooks/use_playground_breadcrumbs.ts | 25 ++++ .../public/playground_overview.tsx | 11 +- .../search_playground/public/plugin.ts | 55 ++++++-- .../plugins/search_playground/public/types.ts | 47 +++---- .../search_playground/server/config.ts | 2 +- .../search_playground/server/plugin.ts | 46 +++++- .../search_playground/server/routes.ts | 41 ++++++ .../plugins/search_playground/server/types.ts | 10 +- .../plugins/search_playground/tsconfig.json | 7 +- .../search_navigation/public/plugin.ts | 56 +++++++- .../search_navigation/public/types.ts | 16 ++- .../search_navigation/tsconfig.json | 3 - x-pack/plugins/serverless_search/kibana.jsonc | 1 + .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - .../apis/features/features/features.ts | 2 + .../apis/security/privileges.ts | 1 + .../apis/security/privileges_basic.ts | 2 + .../tests/solution_navigation.ts | 8 +- .../spaces_only/telemetry/telemetry.ts | 1 + .../security_and_spaces/tests/catalogue.ts | 1 + .../security_and_spaces/tests/nav_links.ts | 1 + 57 files changed, 485 insertions(+), 420 deletions(-) delete mode 100644 x-pack/plugins/enterprise_search/common/locators/playground_locator.tsx delete mode 100644 x-pack/plugins/enterprise_search/public/applications/applications/components/playground/header_docs_action.tsx delete mode 100644 x-pack/plugins/enterprise_search/public/applications/applications/components/playground/page_template.tsx delete mode 100644 x-pack/plugins/enterprise_search/public/applications/applications/components/playground/playground.tsx delete mode 100644 x-pack/plugins/enterprise_search/public/applications/applications/components/playground/types.ts create mode 100644 x-pack/plugins/enterprise_search/public/applications/applications/components/playground_redirect.tsx delete mode 100644 x-pack/plugins/search_playground/__mocks__/search_playground_mock.ts delete mode 100644 x-pack/plugins/search_playground/public/embeddable.tsx create mode 100644 x-pack/plugins/search_playground/public/hooks/use_playground_breadcrumbs.ts diff --git a/config/serverless.es.yml b/config/serverless.es.yml index 3132125bfecde..127a0c8362d7f 100644 --- a/config/serverless.es.yml +++ b/config/serverless.es.yml @@ -116,9 +116,6 @@ xpack.ml.compatibleModuleType: 'search' data_visualizer.resultLinks.fileBeat.enabled: false -# Search Playground -xpack.searchPlayground.ui.enabled: true - # Search InferenceEndpoints xpack.searchInferenceEndpoints.ui.enabled: true diff --git a/config/serverless.oblt.yml b/config/serverless.oblt.yml index 4f2e5a0883b52..ef3c9fd23121e 100644 --- a/config/serverless.oblt.yml +++ b/config/serverless.oblt.yml @@ -7,6 +7,7 @@ xpack.infra.enabled: true xpack.uptime.enabled: true xpack.securitySolution.enabled: false xpack.search.notebooks.enabled: false +xpack.searchPlayground.enabled: false ## Fine-tune the observability solution feature privileges. Also, refer to `serverless.yml` for the project-agnostic overrides. xpack.features.overrides: diff --git a/config/serverless.security.yml b/config/serverless.security.yml index d92075fbb3fdc..1b75b4b06cb25 100644 --- a/config/serverless.security.yml +++ b/config/serverless.security.yml @@ -8,6 +8,7 @@ xpack.observabilityLogsExplorer.enabled: false xpack.observability.enabled: false xpack.observabilityAIAssistant.enabled: false xpack.search.notebooks.enabled: false +xpack.searchPlayground.enabled: false ## Fine-tune the security solution feature privileges. Also, refer to `serverless.yml` for the project-agnostic overrides. xpack.features.overrides: diff --git a/packages/deeplinks/search/constants.ts b/packages/deeplinks/search/constants.ts index 6d9f6492abda7..a458b38aff3cc 100644 --- a/packages/deeplinks/search/constants.ts +++ b/packages/deeplinks/search/constants.ts @@ -17,7 +17,7 @@ export const ENTERPRISE_SEARCH_WORKPLACESEARCH_APP_ID = 'workplaceSearch'; export const SERVERLESS_ES_APP_ID = 'serverlessElasticsearch'; export const SERVERLESS_ES_CONNECTORS_ID = 'serverlessConnectors'; export const SERVERLESS_ES_WEB_CRAWLERS_ID = 'serverlessWebCrawlers'; -export const SERVERLESS_ES_SEARCH_PLAYGROUND_ID = 'searchPlayground'; +export const ES_SEARCH_PLAYGROUND_ID = 'searchPlayground'; export const SERVERLESS_ES_SEARCH_INFERENCE_ENDPOINTS_ID = 'searchInferenceEndpoints'; export const SEARCH_HOMEPAGE = 'searchHomepage'; export const SEARCH_INDICES_START = 'elasticsearchStart'; diff --git a/packages/deeplinks/search/deep_links.ts b/packages/deeplinks/search/deep_links.ts index 9dc9a8ed18203..ede9bc303dbe5 100644 --- a/packages/deeplinks/search/deep_links.ts +++ b/packages/deeplinks/search/deep_links.ts @@ -18,7 +18,7 @@ import { ENTERPRISE_SEARCH_ANALYTICS_APP_ID, ENTERPRISE_SEARCH_APPSEARCH_APP_ID, ENTERPRISE_SEARCH_WORKPLACESEARCH_APP_ID, - SERVERLESS_ES_SEARCH_PLAYGROUND_ID, + ES_SEARCH_PLAYGROUND_ID, SERVERLESS_ES_SEARCH_INFERENCE_ENDPOINTS_ID, SEARCH_HOMEPAGE, SEARCH_INDICES_START, @@ -40,7 +40,7 @@ export type EnterpriseSearchWorkplaceSearchApp = typeof ENTERPRISE_SEARCH_WORKPL export type ServerlessSearchApp = typeof SERVERLESS_ES_APP_ID; export type ConnectorsId = typeof SERVERLESS_ES_CONNECTORS_ID; export type ServerlessWebCrawlers = typeof SERVERLESS_ES_WEB_CRAWLERS_ID; -export type SearchPlaygroundId = typeof SERVERLESS_ES_SEARCH_PLAYGROUND_ID; +export type SearchPlaygroundId = typeof ES_SEARCH_PLAYGROUND_ID; export type SearchInferenceEndpointsId = typeof SERVERLESS_ES_SEARCH_INFERENCE_ENDPOINTS_ID; export type SearchHomepage = typeof SEARCH_HOMEPAGE; export type SearchStart = typeof SEARCH_INDICES_START; @@ -52,7 +52,7 @@ export type SearchAISearch = typeof SEARCH_AI_SEARCH; export type ContentLinkId = 'searchIndices' | 'connectors' | 'webCrawlers'; -export type ApplicationsLinkId = 'searchApplications' | 'playground'; +export type ApplicationsLinkId = 'searchApplications'; export type AppsearchLinkId = 'engines'; diff --git a/packages/deeplinks/search/index.ts b/packages/deeplinks/search/index.ts index 7c78d64081133..69110f36deb45 100644 --- a/packages/deeplinks/search/index.ts +++ b/packages/deeplinks/search/index.ts @@ -21,6 +21,7 @@ export { SEARCH_VECTOR_SEARCH, SEARCH_SEMANTIC_SEARCH, SEARCH_AI_SEARCH, + ES_SEARCH_PLAYGROUND_ID, } from './constants'; export type { diff --git a/src/plugins/kibana_usage_collection/server/collectors/application_usage/schema.ts b/src/plugins/kibana_usage_collection/server/collectors/application_usage/schema.ts index ad2dce80fb650..dd327dd4706d5 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/application_usage/schema.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/application_usage/schema.ts @@ -137,6 +137,7 @@ export const applicationUsageSchema = { enterpriseSearch: commonSchema, enterpriseSearchContent: commonSchema, searchInferenceEndpoints: commonSchema, + searchPlayground: commonSchema, enterpriseSearchAnalytics: commonSchema, enterpriseSearchApplications: commonSchema, enterpriseSearchAISearch: commonSchema, diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index 35e0242b57624..e4423a9b30743 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -2229,6 +2229,137 @@ } } }, + "searchPlayground": { + "properties": { + "appId": { + "type": "keyword", + "_meta": { + "description": "The application being tracked" + } + }, + "viewId": { + "type": "keyword", + "_meta": { + "description": "Always `main`" + } + }, + "clicks_total": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application since we started counting them" + } + }, + "clicks_7_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 7 days" + } + }, + "clicks_30_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 30 days" + } + }, + "clicks_90_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application over the last 90 days" + } + }, + "minutes_on_screen_total": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen since we started counting them." + } + }, + "minutes_on_screen_7_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 7 days" + } + }, + "minutes_on_screen_30_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 30 days" + } + }, + "minutes_on_screen_90_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen over the last 90 days" + } + }, + "views": { + "type": "array", + "items": { + "properties": { + "appId": { + "type": "keyword", + "_meta": { + "description": "The application being tracked" + } + }, + "viewId": { + "type": "keyword", + "_meta": { + "description": "The application view being tracked" + } + }, + "clicks_total": { + "type": "long", + "_meta": { + "description": "General number of clicks in the application sub view since we started counting them" + } + }, + "clicks_7_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 7 days" + } + }, + "clicks_30_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 30 days" + } + }, + "clicks_90_days": { + "type": "long", + "_meta": { + "description": "General number of clicks in the active application sub view over the last 90 days" + } + }, + "minutes_on_screen_total": { + "type": "float", + "_meta": { + "description": "Minutes the application sub view is active and on-screen since we started counting them." + } + }, + "minutes_on_screen_7_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 7 days" + } + }, + "minutes_on_screen_30_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 30 days" + } + }, + "minutes_on_screen_90_days": { + "type": "float", + "_meta": { + "description": "Minutes the application is active and on-screen active application sub view over the last 90 days" + } + } + } + } + } + } + }, "enterpriseSearchAnalytics": { "properties": { "appId": { diff --git a/x-pack/plugins/enterprise_search/common/locators/index.ts b/x-pack/plugins/enterprise_search/common/locators/index.ts index 35c1d43b3b30a..3c3597fe4f161 100644 --- a/x-pack/plugins/enterprise_search/common/locators/index.ts +++ b/x-pack/plugins/enterprise_search/common/locators/index.ts @@ -13,10 +13,8 @@ import { type CreateIndexLocatorParams, } from './create_index_locator'; import { SearchInferenceEndpointLocatorDefinition } from './inference_locator'; -import { PlaygroundLocatorDefinition, type PlaygroundLocatorParams } from './playground_locator'; export function registerLocators(share: SharePluginSetup) { share.url.locators.create(new CreateIndexLocatorDefinition()); - share.url.locators.create(new PlaygroundLocatorDefinition()); share.url.locators.create(new SearchInferenceEndpointLocatorDefinition()); } diff --git a/x-pack/plugins/enterprise_search/common/locators/playground_locator.tsx b/x-pack/plugins/enterprise_search/common/locators/playground_locator.tsx deleted file mode 100644 index eca283c8c2b06..0000000000000 --- a/x-pack/plugins/enterprise_search/common/locators/playground_locator.tsx +++ /dev/null @@ -1,28 +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 { LocatorDefinition } from '@kbn/share-plugin/common'; -import type { SerializableRecord } from '@kbn/utility-types'; - -import { APPLICATIONS_PLUGIN, PLAYGROUND_URL } from '../constants'; - -export type PlaygroundLocatorParams = { 'default-index': string } & SerializableRecord; - -export class PlaygroundLocatorDefinition implements LocatorDefinition { - public readonly getLocation = async (params: PlaygroundLocatorParams) => { - const defaultIndex = params['default-index']; - const path = `${PLAYGROUND_URL}${defaultIndex ? `?default-index=${defaultIndex}` : ''}`; - - return { - app: APPLICATIONS_PLUGIN.ID, - path, - state: {}, - }; - }; - - public readonly id = 'PLAYGROUND_LOCATOR_ID'; -} diff --git a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts index 5548228b9b64c..7af3dbc94343d 100644 --- a/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts +++ b/x-pack/plugins/enterprise_search/public/applications/__mocks__/kea_logic/kibana_logic.mock.ts @@ -16,7 +16,6 @@ import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { LensPublicStart } from '@kbn/lens-plugin/public'; import { mlPluginMock } from '@kbn/ml-plugin/public/mocks'; -import { searchPlaygroundMock } from '@kbn/search-playground/__mocks__/search_playground_mock'; import { securityMock } from '@kbn/security-plugin/public/mocks'; import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; @@ -67,7 +66,6 @@ export const mockKibanaValues = { }, renderHeaderActions: jest.fn(), searchInferenceEndpoints: null, - searchPlayground: searchPlaygroundMock.createStart(), security: securityMock.createStart(), setBreadcrumbs: jest.fn(), setChromeIsVisible: jest.fn(), diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/components/layout/page_template.tsx b/x-pack/plugins/enterprise_search/public/applications/applications/components/layout/page_template.tsx index ec745ce77be2f..cc01ab52239e3 100644 --- a/x-pack/plugins/enterprise_search/public/applications/applications/components/layout/page_template.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/applications/components/layout/page_template.tsx @@ -19,14 +19,12 @@ import { SetEnterpriseSearchApplicationsChrome } from '../../../shared/kibana_ch import { EnterpriseSearchPageTemplateWrapper, PageTemplateProps } from '../../../shared/layout'; import { useEnterpriseSearchApplicationNav } from '../../../shared/layout'; import { SendEnterpriseSearchTelemetry } from '../../../shared/telemetry'; -import { PlaygroundHeaderDocsAction } from '../playground/header_docs_action'; import { SearchApplicationHeaderDocsAction } from '../search_application/header_docs_action'; export type EnterpriseSearchApplicationsPageTemplateProps = Omit< PageTemplateProps, 'useEndpointHeaderActions' > & { - docLink?: 'search_application' | 'playground'; hasSchemaConflicts?: boolean; restrictWidth?: boolean; searchApplicationName?: string; @@ -41,7 +39,6 @@ export const EnterpriseSearchApplicationsPageTemplate: React.FC< searchApplicationName, hasSchemaConflicts, restrictWidth = true, - docLink = 'search_application', ...pageTemplateProps }) => { const alwaysReturnNavItems = true; @@ -72,11 +69,7 @@ export const EnterpriseSearchApplicationsPageTemplate: React.FC< ); useLayoutEffect(() => { - const docAction = { - playground: PlaygroundHeaderDocsAction, - search_application: SearchApplicationHeaderDocsAction, - }[docLink]; - renderHeaderActions(docAction); + renderHeaderActions(SearchApplicationHeaderDocsAction); return () => { renderHeaderActions(); diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/header_docs_action.tsx b/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/header_docs_action.tsx deleted file mode 100644 index 9f834666a6894..0000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/header_docs_action.tsx +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; - -import { useValues } from 'kea'; - -import { KibanaLogic } from '../../../shared/kibana'; - -import { EndpointsHeaderAction } from '../../../shared/layout/endpoints_header_action'; - -export const PlaygroundHeaderDocsAction: React.FC = () => { - const { searchPlayground } = useValues(KibanaLogic); - - if (!searchPlayground) { - return null; - } - return ( - - - - ); -}; diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/page_template.tsx b/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/page_template.tsx deleted file mode 100644 index 40698b273730b..0000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/page_template.tsx +++ /dev/null @@ -1,71 +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, { useLayoutEffect } from 'react'; - -import { useValues } from 'kea'; - -import useObservable from 'react-use/lib/useObservable'; - -import { SEARCH_PRODUCT_NAME } from '../../../../../common/constants'; -import { KibanaLogic } from '../../../shared/kibana'; -import { SetSearchPlaygroundChrome } from '../../../shared/kibana_chrome/set_chrome'; -import { EnterpriseSearchPageTemplateWrapper, PageTemplateProps } from '../../../shared/layout'; -import { useEnterpriseSearchNav } from '../../../shared/layout'; -import { SendEnterpriseSearchTelemetry } from '../../../shared/telemetry'; - -import { PlaygroundHeaderDocsAction } from './header_docs_action'; - -export type SearchPlaygroundPageTemplateProps = Omit< - PageTemplateProps, - 'useEndpointHeaderActions' -> & { - hasSchemaConflicts?: boolean; - restrictWidth?: boolean; - searchApplicationName?: string; -}; - -export const SearchPlaygroundPageTemplate: React.FC = ({ - children, - pageChrome, - pageViewTelemetry, - searchApplicationName, - hasSchemaConflicts, - restrictWidth = true, - ...pageTemplateProps -}) => { - const navItems = useEnterpriseSearchNav(); - - const { renderHeaderActions, getChromeStyle$ } = useValues(KibanaLogic); - const chromeStyle = useObservable(getChromeStyle$(), 'classic'); - - useLayoutEffect(() => { - renderHeaderActions(PlaygroundHeaderDocsAction); - - return () => { - renderHeaderActions(); - }; - }, []); - - return ( - } - useEndpointHeaderActions={false} - > - {pageViewTelemetry && ( - - )} - {children} - - ); -}; diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/playground.tsx b/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/playground.tsx deleted file mode 100644 index c198062cb759b..0000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/playground.tsx +++ /dev/null @@ -1,46 +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 { i18n } from '@kbn/i18n'; - -import { KibanaLogic } from '../../../shared/kibana'; - -import { SearchPlaygroundPageTemplate } from './page_template'; - -interface PlaygroundProps { - pageMode?: 'chat' | 'search'; -} - -export const Playground: React.FC = ({ pageMode = 'chat' }) => { - const { searchPlayground } = useValues(KibanaLogic); - - if (!searchPlayground) { - return null; - } - return ( - - - - - - ); -}; diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/types.ts b/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/types.ts deleted file mode 100644 index 71a46c5c9a1bc..0000000000000 --- a/x-pack/plugins/enterprise_search/public/applications/applications/components/playground/types.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. - */ - -export enum MessageRole { - 'user' = 'user', - 'assistant' = 'assistant', - 'system' = 'system', -} - -export interface Message { - id: string; - content: string | React.ReactNode; - createdAt?: Date; - role: MessageRole; -} diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/components/playground_redirect.tsx b/x-pack/plugins/enterprise_search/public/applications/applications/components/playground_redirect.tsx new file mode 100644 index 0000000000000..ba9efbd45be57 --- /dev/null +++ b/x-pack/plugins/enterprise_search/public/applications/applications/components/playground_redirect.tsx @@ -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 React, { useEffect } from 'react'; + +import { ES_SEARCH_PLAYGROUND_ID } from '@kbn/deeplinks-search'; + +import { useKibana } from '@kbn/kibana-react-plugin/public'; + +export const PlaygroundRedirect: React.FC = () => { + const { application } = useKibana().services; + + useEffect(() => { + application?.navigateToApp(ES_SEARCH_PLAYGROUND_ID); + }, [application]); + + return null; +}; diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/index.tsx b/x-pack/plugins/enterprise_search/public/applications/applications/index.tsx index a04ebf2e3edbb..2a10eac6af7bd 100644 --- a/x-pack/plugins/enterprise_search/public/applications/applications/index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/applications/index.tsx @@ -6,35 +6,19 @@ */ import React from 'react'; -import { Redirect } from 'react-router-dom'; import { Routes, Route } from '@kbn/shared-ux-router'; import { NotFound } from './components/not_found'; -import { Playground } from './components/playground/playground'; +import { PlaygroundRedirect } from './components/playground_redirect'; import { SearchApplicationsRouter } from './components/search_applications/search_applications_router'; -import { - PLAYGROUND_CHAT_PATH, - PLAYGROUND_PATH, - PLAYGROUND_SEARCH_PATH, - ROOT_PATH, - SEARCH_APPLICATIONS_PATH, -} from './routes'; +import { ROOT_PATH, SEARCH_APPLICATIONS_PATH } from './routes'; export const Applications = () => { return ( - - - - - - - - - - - + + diff --git a/x-pack/plugins/enterprise_search/public/applications/applications/routes.ts b/x-pack/plugins/enterprise_search/public/applications/applications/routes.ts index 2df42a129938c..dd79fbc9ea5ae 100644 --- a/x-pack/plugins/enterprise_search/public/applications/applications/routes.ts +++ b/x-pack/plugins/enterprise_search/public/applications/applications/routes.ts @@ -17,9 +17,6 @@ export enum SearchApplicationViewTabs { export const SEARCH_APPLICATION_CREATION_PATH = `${SEARCH_APPLICATIONS_PATH}/new`; export const SEARCH_APPLICATION_PATH = `${SEARCH_APPLICATIONS_PATH}/:searchApplicationName`; export const SEARCH_APPLICATION_TAB_PATH = `${SEARCH_APPLICATION_PATH}/:tabId`; -export const PLAYGROUND_PATH = `${ROOT_PATH}playground/`; -export const PLAYGROUND_CHAT_PATH = `${PLAYGROUND_PATH}chat`; -export const PLAYGROUND_SEARCH_PATH = `${PLAYGROUND_PATH}search`; export const SEARCH_APPLICATION_CONNECT_PATH = `${SEARCH_APPLICATION_PATH}/${SearchApplicationViewTabs.CONNECT}/:connectTabId`; export enum SearchApplicationConnectTabs { diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/components/whats_next_box.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/components/whats_next_box.tsx index 2e04c094e7d7e..7e65b4d3367b8 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/components/whats_next_box.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/connector_detail/components/whats_next_box.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React from 'react'; +import React, { useCallback } from 'react'; import { useValues } from 'kea'; @@ -25,9 +25,6 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { ConnectorStatus } from '@kbn/search-connectors'; -import { APPLICATIONS_PLUGIN } from '../../../../../../common/constants'; - -import { PLAYGROUND_PATH } from '../../../../applications/routes'; import { generateEncodedPath } from '../../../../shared/encode_path_params'; import { KibanaLogic } from '../../../../shared/kibana'; import { EuiButtonTo } from '../../../../shared/react_router_helpers'; @@ -53,7 +50,14 @@ export const WhatsNextBox: React.FC = ({ isSyncing = false, isWaitingForConnector = false, }) => { - const { navigateToUrl } = useValues(KibanaLogic); + const { share } = useValues(KibanaLogic); + const onStartPlaygroundClick = useCallback(() => { + if (!share) return; + const playgroundLocator = share.url.locators.get('PLAYGROUND_LOCATOR_ID'); + if (playgroundLocator) { + playgroundLocator.navigate({ 'default-index': connectorIndex }); + } + }, [connectorIndex, share]); const isConfigured = !( connectorStatus === ConnectorStatus.NEEDS_CONFIGURATION || connectorStatus === ConnectorStatus.CREATED @@ -84,14 +88,7 @@ export const WhatsNextBox: React.FC = ({ data-test-subj="enterpriseSearchWhatsNextBoxSearchPlaygroundButton" iconType="sparkles" disabled={!connectorIndex || disabled} - onClick={() => { - navigateToUrl( - `${APPLICATIONS_PLUGIN.URL}${PLAYGROUND_PATH}?default-index=${connectorIndex}`, - { - shouldNotCreateHref: true, - } - ); - }} + onClick={onStartPlaygroundClick} > = ({ title }) => { const isSyncing = isWaitingForSync || isSyncingProp; const { http } = useValues(HttpLogic); - const { application } = useValues(KibanaLogic); + const { application, share } = useValues(KibanaLogic); + const onStartPlaygroundClick = useCallback(() => { + if (!share) return; + const playgroundLocator = share.url.locators.get('PLAYGROUND_LOCATOR_ID'); + if (playgroundLocator) { + playgroundLocator.navigate({ 'default-index': connector?.index_name }); + } + }, [connector, share]); useEffect(() => { setTimeout(() => { window.scrollTo({ @@ -134,14 +140,7 @@ export const FinishUpStep: React.FC = ({ title }) => { 'xpack.enterpriseSearch.createConnector.finishUpStep.euiButton.startSearchPlaygroundLabel', { defaultMessage: 'Start Search Playground' } )} - onClick={() => { - if (connector) { - KibanaLogic.values.navigateToUrl( - `${APPLICATIONS_PLUGIN.URL}${PLAYGROUND_PATH}?default-index=${connector.index_name}`, - { shouldNotCreateHref: true } - ); - } - }} + onClick={onStartPlaygroundClick} > {i18n.translate( 'xpack.enterpriseSearch.createConnector.finishUpStep.startSearchPlaygroundButtonLabel', diff --git a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/search_playground_popover.tsx b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/search_playground_popover.tsx index 283d594e2891b..8b85ab9b97168 100644 --- a/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/search_playground_popover.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/enterprise_search_content/components/search_index/components/header_actions/search_playground_popover.tsx @@ -5,14 +5,14 @@ * 2.0. */ -import React from 'react'; +import React, { useCallback } from 'react'; + +import { useValues } from 'kea'; import { EuiButton } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { APPLICATIONS_PLUGIN } from '../../../../../../../common/constants'; -import { PLAYGROUND_PATH } from '../../../../../applications/routes'; import { KibanaLogic } from '../../../../../shared/kibana'; export interface SearchPlaygroundPopoverProps { @@ -24,18 +24,21 @@ export const SearchPlaygroundPopover: React.FC = ( indexName, ingestionMethod, }) => { - const playgroundUrl = `${APPLICATIONS_PLUGIN.URL}${PLAYGROUND_PATH}?default-index=${indexName}`; + const { share } = useValues(KibanaLogic); + const onStartPlaygroundClick = useCallback(() => { + if (!share) return; + const playgroundLocator = share.url.locators.get('PLAYGROUND_LOCATOR_ID'); + if (playgroundLocator) { + playgroundLocator.navigate({ 'default-index': indexName }); + } + }, [indexName, share]); return ( { - KibanaLogic.values.navigateToUrl(playgroundUrl, { - shouldNotCreateHref: true, - }); - }} + onClick={onStartPlaygroundClick} > {i18n.translate('xpack.enterpriseSearch.content.index.viewPlayground', { defaultMessage: 'View in Playground', diff --git a/x-pack/plugins/enterprise_search/public/applications/index.tsx b/x-pack/plugins/enterprise_search/public/applications/index.tsx index fe3e7a84147ba..8cefb4cb733e5 100644 --- a/x-pack/plugins/enterprise_search/public/applications/index.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/index.tsx @@ -129,7 +129,6 @@ export const renderApp = ( params.setHeaderActionMenu( HeaderActions ? renderHeaderActions.bind(null, HeaderActions, store, params) : undefined ), - searchPlayground: plugins.searchPlayground, searchInferenceEndpoints: plugins.searchInferenceEndpoints, security, setBreadcrumbs: chrome.setBreadcrumbs, diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts index b404d0e8fb65d..02a00a3198ee2 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/kibana/kibana_logic.ts @@ -30,7 +30,6 @@ import { MlPluginStart } from '@kbn/ml-plugin/public'; import { ELASTICSEARCH_URL_PLACEHOLDER } from '@kbn/search-api-panels/constants'; import { ConnectorDefinition } from '@kbn/search-connectors'; import { SearchInferenceEndpointsPluginStart } from '@kbn/search-inference-endpoints/public'; -import { SearchPlaygroundPluginStart } from '@kbn/search-playground/public'; import { AuthenticatedUser, SecurityPluginStart } from '@kbn/security-plugin/public'; import { SharePluginStart } from '@kbn/share-plugin/public'; @@ -68,7 +67,6 @@ export interface KibanaLogicProps { productFeatures: ProductFeatures; renderHeaderActions(HeaderActions?: FC): void; searchInferenceEndpoints?: SearchInferenceEndpointsPluginStart; - searchPlayground?: SearchPlaygroundPluginStart; security?: SecurityPluginStart; setBreadcrumbs(crumbs: ChromeBreadcrumb[]): void; setChromeIsVisible(isVisible: boolean): void; @@ -103,7 +101,6 @@ export interface KibanaValues { productFeatures: ProductFeatures; renderHeaderActions(HeaderActions?: FC): void; searchInferenceEndpoints: SearchInferenceEndpointsPluginStart | null; - searchPlayground: SearchPlaygroundPluginStart | null; security: SecurityPluginStart | null; setBreadcrumbs(crumbs: ChromeBreadcrumb[]): void; setChromeIsVisible(isVisible: boolean): void; @@ -150,7 +147,6 @@ export const KibanaLogic = kea>({ productFeatures: [props.productFeatures, {}], renderHeaderActions: [props.renderHeaderActions, {}], searchInferenceEndpoints: [props.searchInferenceEndpoints || null, {}], - searchPlayground: [props.searchPlayground || null, {}], security: [props.security || null, {}], setBreadcrumbs: [props.setBreadcrumbs, {}], setChromeIsVisible: [props.setChromeIsVisible, {}], diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx index a8fff53d8a9b2..0c1e959f7b507 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/base_nav.tsx @@ -88,7 +88,7 @@ export const buildBaseClassicNavItems = ({ { 'data-test-subj': 'searchSideNav-Playground', deepLink: { - link: 'enterpriseSearchApplications:playground', + link: 'searchPlayground', shouldShowActiveForSubroutes: true, }, id: 'playground', diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/classic_nav_helpers.test.ts b/x-pack/plugins/enterprise_search/public/applications/shared/layout/classic_nav_helpers.test.ts index 80e846716e59b..50c5841092a6d 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/classic_nav_helpers.test.ts +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/classic_nav_helpers.test.ts @@ -133,7 +133,7 @@ describe('generateSideNavItems', () => { }, { deepLink: { - link: 'enterpriseSearchApplications:playground', + link: 'searchPlayground', }, id: 'unit-test-missing', }, diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx index fed85bad23353..08976a4dc68c1 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/layout/nav.test.tsx @@ -73,7 +73,7 @@ const baseNavItems = [ items: [ { 'data-test-subj': 'searchSideNav-Playground', - href: '/app/enterprise_search/applications/playground', + href: '/app/search_playground', id: 'playground', items: undefined, name: 'Playground', @@ -188,9 +188,9 @@ const mockNavLinks = [ url: '/app/enterprise_search/content/crawlers', }, { - id: 'enterpriseSearchApplications:playground', + id: 'searchPlayground', title: 'Playground', - url: '/app/enterprise_search/applications/playground', + url: '/app/search_playground', }, { id: 'enterpriseSearchApplications:searchApplications', diff --git a/x-pack/plugins/enterprise_search/public/applications/test_helpers/test_utils.test_helper.tsx b/x-pack/plugins/enterprise_search/public/applications/test_helpers/test_utils.test_helper.tsx index da30e6e93fadb..e046bfa904e55 100644 --- a/x-pack/plugins/enterprise_search/public/applications/test_helpers/test_utils.test_helper.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/test_helpers/test_utils.test_helper.tsx @@ -24,7 +24,6 @@ import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { I18nProvider } from '@kbn/i18n-react'; import { LensPublicStart } from '@kbn/lens-plugin/public'; import { mlPluginMock } from '@kbn/ml-plugin/public/mocks'; -import { searchPlaygroundMock } from '@kbn/search-playground/__mocks__/search_playground_mock'; import { securityMock } from '@kbn/security-plugin/public/mocks'; import { sharePluginMock } from '@kbn/share-plugin/public/mocks'; @@ -86,7 +85,6 @@ export const mockKibanaProps: KibanaLogicProps = { hasWebCrawler: true, }, renderHeaderActions: jest.fn(), - searchPlayground: searchPlaygroundMock.createStart(), security: securityMock.createStart(), setBreadcrumbs: jest.fn(), setChromeIsVisible: jest.fn(), diff --git a/x-pack/plugins/enterprise_search/public/navigation_tree.ts b/x-pack/plugins/enterprise_search/public/navigation_tree.ts index 25ad8ec37743f..dfd639a075520 100644 --- a/x-pack/plugins/enterprise_search/public/navigation_tree.ts +++ b/x-pack/plugins/enterprise_search/public/navigation_tree.ts @@ -151,7 +151,7 @@ export const getNavigationTreeDefinition = ({ { children: [ { - link: 'enterpriseSearchApplications:playground', + link: 'searchPlayground', }, { getIsActive: ({ pathNameSerialized, prepend }) => { diff --git a/x-pack/plugins/enterprise_search/public/plugin.ts b/x-pack/plugins/enterprise_search/public/plugin.ts index a413ae5f2067d..aa0a2e37c599c 100644 --- a/x-pack/plugins/enterprise_search/public/plugin.ts +++ b/x-pack/plugins/enterprise_search/public/plugin.ts @@ -60,7 +60,7 @@ import { ClientConfigType, InitialAppData, ProductAccess } from '../common/types import { hasEnterpriseLicense } from '../common/utils/licensing'; import { ENGINES_PATH } from './applications/app_search/routes'; -import { SEARCH_APPLICATIONS_PATH, PLAYGROUND_PATH } from './applications/applications/routes'; +import { SEARCH_APPLICATIONS_PATH } from './applications/applications/routes'; import { CONNECTORS_PATH, SEARCH_INDICES_PATH, @@ -151,14 +151,6 @@ const relevanceLinks: AppDeepLink[] = [ ]; const applicationsLinks: AppDeepLink[] = [ - { - id: 'playground', - path: `/${PLAYGROUND_PATH}`, - title: i18n.translate('xpack.enterpriseSearch.navigation.contentPlaygroundLinkLabel', { - defaultMessage: 'Playground', - }), - visibleIn: ['sideNav', 'globalSearch'], - }, { id: 'searchApplications', path: `/${SEARCH_APPLICATIONS_PATH}`, @@ -281,6 +273,7 @@ export class EnterpriseSearchPlugin implements Plugin { return renderApp(EnterpriseSearchOverview, kibanaDeps, pluginData); }, + order: 0, title: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.NAV_TITLE, visibleIn: ['home', 'kibanaOverview', 'globalSearch', 'sideNav'], }); @@ -306,6 +299,7 @@ export class EnterpriseSearchPlugin implements Plugin { return renderApp(EnterpriseSearchContent, kibanaDeps, pluginData); }, + order: 1, title: ENTERPRISE_SEARCH_CONTENT_PLUGIN.NAV_TITLE, }); diff --git a/x-pack/plugins/search_playground/__mocks__/search_playground_mock.ts b/x-pack/plugins/search_playground/__mocks__/search_playground_mock.ts deleted file mode 100644 index 1a73128730324..0000000000000 --- a/x-pack/plugins/search_playground/__mocks__/search_playground_mock.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { SearchPlaygroundPluginStart } from '../public'; - -export type Start = jest.Mocked; - -const createStartMock = (): Start => { - const startContract: Start = { - PlaygroundProvider: jest.fn(), - Playground: jest.fn(), - PlaygroundHeaderDocs: jest.fn(), - }; - - return startContract; -}; - -export const searchPlaygroundMock = { - createStart: createStartMock, -}; diff --git a/x-pack/plugins/search_playground/common/index.ts b/x-pack/plugins/search_playground/common/index.ts index 95624681b6193..5d972f6a17e0c 100644 --- a/x-pack/plugins/search_playground/common/index.ts +++ b/x-pack/plugins/search_playground/common/index.ts @@ -5,10 +5,13 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import { Pagination } from './types'; export const PLUGIN_ID = 'searchPlayground'; -export const PLUGIN_NAME = 'Playground'; +export const PLUGIN_NAME = i18n.translate('xpack.searchPlayground.plugin.name', { + defaultMessage: 'Playground', +}); export const PLUGIN_PATH = '/app/search_playground'; export const SEARCH_MODE_FEATURE_FLAG_ID = 'searchPlayground:searchModeEnabled'; diff --git a/x-pack/plugins/search_playground/kibana.jsonc b/x-pack/plugins/search_playground/kibana.jsonc index 3c4eaaddc81a2..794e1760efbd2 100644 --- a/x-pack/plugins/search_playground/kibana.jsonc +++ b/x-pack/plugins/search_playground/kibana.jsonc @@ -18,7 +18,9 @@ "actions", "data", "encryptedSavedObjects", + "licensing", "ml", + "features", "navigation", "share", "security", @@ -29,6 +31,7 @@ "cloud", "console", "usageCollection", + "searchNavigation", ], "requiredBundles": [ "kibanaReact", diff --git a/x-pack/plugins/search_playground/public/embeddable.tsx b/x-pack/plugins/search_playground/public/embeddable.tsx deleted file mode 100644 index 21688f5e47387..0000000000000 --- a/x-pack/plugins/search_playground/public/embeddable.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import { dynamic } from '@kbn/shared-ux-utility'; -import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; -import { CoreStart } from '@kbn/core-lifecycle-browser'; -import { AppPluginStartDependencies } from './types'; -import { AppProps } from './components/app'; - -export const Playground = dynamic>(async () => ({ - default: (await import('./components/app')).App, -})); - -export const PlaygroundProvider = dynamic(async () => ({ - default: (await import('./providers/playground_provider')).PlaygroundProvider, -})); - -export const PlaygroundHeaderDocs = dynamic(async () => ({ - default: (await import('./components/playground_header_docs')).PlaygroundHeaderDocs, -})); - -export const getPlaygroundProvider = - (core: CoreStart, services: AppPluginStartDependencies) => - (props: React.ComponentProps) => - ( - - - - ); diff --git a/x-pack/plugins/search_playground/public/hooks/use_playground_breadcrumbs.ts b/x-pack/plugins/search_playground/public/hooks/use_playground_breadcrumbs.ts new file mode 100644 index 0000000000000..8e3467a968b36 --- /dev/null +++ b/x-pack/plugins/search_playground/public/hooks/use_playground_breadcrumbs.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 { useEffect } from 'react'; +import { useKibana } from './use_kibana'; + +export const usePlaygroundBreadcrumbs = () => { + const { searchNavigation } = useKibana().services; + + useEffect(() => { + searchNavigation?.breadcrumbs.setSearchBreadCrumbs( + [{ text: 'Build' }, { text: 'Playground' }], + { forClassicChromeStyle: true } + ); + + return () => { + // Clear breadcrumbs on unmount; + searchNavigation?.breadcrumbs.clearBreadcrumbs(); + }; + }, [searchNavigation]); +}; diff --git a/x-pack/plugins/search_playground/public/playground_overview.tsx b/x-pack/plugins/search_playground/public/playground_overview.tsx index 9fec0fa566ac6..faf5181f4ae7b 100644 --- a/x-pack/plugins/search_playground/public/playground_overview.tsx +++ b/x-pack/plugins/search_playground/public/playground_overview.tsx @@ -6,12 +6,13 @@ */ import React, { useMemo } from 'react'; -import { EuiPageTemplate } from '@elastic/eui'; +import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import { PlaygroundProvider } from './providers/playground_provider'; import { useKibana } from './hooks/use_kibana'; import { PlaygroundPageMode } from './types'; import { App } from './components/app'; +import { usePlaygroundBreadcrumbs } from './hooks/use_playground_breadcrumbs'; interface PlaygroundOverviewProps { pageMode?: PlaygroundPageMode; @@ -20,8 +21,9 @@ export const PlaygroundOverview: React.FC = ({ pageMode = PlaygroundPageMode.chat, }) => { const { - services: { console: consolePlugin }, + services: { history, console: consolePlugin, searchNavigation }, } = useKibana(); + usePlaygroundBreadcrumbs(); const embeddableConsole = useMemo( () => (consolePlugin?.EmbeddableConsole ? : null), @@ -30,16 +32,17 @@ export const PlaygroundOverview: React.FC = ({ return ( - {embeddableConsole} - + ); }; diff --git a/x-pack/plugins/search_playground/public/plugin.ts b/x-pack/plugins/search_playground/public/plugin.ts index 47bc8352b763e..b1042f6e82444 100644 --- a/x-pack/plugins/search_playground/public/plugin.ts +++ b/x-pack/plugins/search_playground/public/plugin.ts @@ -5,17 +5,20 @@ * 2.0. */ -import type { - CoreSetup, +import { BehaviorSubject, type Subscription } from 'rxjs'; + +import { + type CoreSetup, Plugin, - CoreStart, - AppMountParameters, - PluginInitializerContext, + type CoreStart, + type AppMountParameters, + type PluginInitializerContext, + DEFAULT_APP_CATEGORIES, + AppUpdater, + AppStatus, } from '@kbn/core/public'; import { PLUGIN_ID, PLUGIN_NAME, PLUGIN_PATH } from '../common'; import { docLinks } from '../common/doc_links'; -import { PlaygroundHeaderDocs } from './components/playground_header_docs'; -import { Playground, getPlaygroundProvider } from './embeddable'; import type { AppPluginSetupDependencies, AppPluginStartDependencies, @@ -29,6 +32,8 @@ export class SearchPlaygroundPlugin implements Plugin { private config: SearchPlaygroundConfigType; + private appUpdater$ = new BehaviorSubject(() => ({})); + private licenseSubscription: Subscription | undefined; constructor(initializerContext: PluginInitializerContext) { this.config = initializerContext.config.get(); @@ -43,12 +48,17 @@ export class SearchPlaygroundPlugin core.application.register({ id: PLUGIN_ID, appRoute: PLUGIN_PATH, + category: DEFAULT_APP_CATEGORIES.enterpriseSearch, + euiIconType: 'logoEnterpriseSearch', + status: AppStatus.inaccessible, title: PLUGIN_NAME, + updater$: this.appUpdater$, async mount({ element, history }: AppMountParameters) { const { renderApp } = await import('./application'); const [coreStart, depsStart] = await core.getStartServices(); coreStart.chrome.docTitle.change(PLUGIN_NAME); + depsStart.searchNavigation?.handleOnAppMount(); const startDeps: AppPluginStartDependencies = { ...depsStart, @@ -57,6 +67,8 @@ export class SearchPlaygroundPlugin return renderApp(coreStart, startDeps, element); }, + visibleIn: ['sideNav', 'globalSearch'], + order: 2, }); registerLocators(deps.share); @@ -64,14 +76,29 @@ export class SearchPlaygroundPlugin return {}; } - public start(core: CoreStart, deps: AppPluginStartDependencies): SearchPlaygroundPluginStart { + public start( + core: CoreStart, + { licensing }: AppPluginStartDependencies + ): SearchPlaygroundPluginStart { docLinks.setDocLinks(core.docLinks.links); - return { - PlaygroundProvider: getPlaygroundProvider(core, deps), - Playground, - PlaygroundHeaderDocs, - }; + + this.licenseSubscription = licensing.license$.subscribe((license) => { + const status: AppStatus = + license && license.isAvailable && license.isActive && license.hasAtLeast('enterprise') + ? AppStatus.accessible + : AppStatus.inaccessible; + + this.appUpdater$.next(() => ({ + status, + })); + }); + return {}; } - public stop() {} + public stop() { + if (this.licenseSubscription) { + this.licenseSubscription.unsubscribe(); + this.licenseSubscription = undefined; + } + } } diff --git a/x-pack/plugins/search_playground/public/types.ts b/x-pack/plugins/search_playground/public/types.ts index ff9c56ffb553e..dfd415d5b9781 100644 --- a/x-pack/plugins/search_playground/public/types.ts +++ b/x-pack/plugins/search_playground/public/types.ts @@ -11,21 +11,19 @@ import { IndicesStatsIndexMetadataState, Uuid, } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; -import { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; -import { SecurityPluginStart } from '@kbn/security-plugin/public'; -import { HttpStart } from '@kbn/core-http-browser'; +import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; import React, { ComponentType } from 'react'; -import { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; -import { CloudSetup } from '@kbn/cloud-plugin/public'; -import { TriggersAndActionsUIPublicPluginStart } from '@kbn/triggers-actions-ui-plugin/public'; -import { AppMountParameters } from '@kbn/core/public'; -import { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; +import type { SharePluginSetup, SharePluginStart } from '@kbn/share-plugin/public'; +import type { CloudSetup, CloudStart } from '@kbn/cloud-plugin/public'; +import type { TriggersAndActionsUIPublicPluginStart } from '@kbn/triggers-actions-ui-plugin/public'; +import type { AppMountParameters, CoreStart } from '@kbn/core/public'; +import type { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; import type { ConsolePluginStart } from '@kbn/console-plugin/public'; -import { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { ChatRequestData, MessageRole } from '../common/types'; -import type { App } from './components/app'; -import type { PlaygroundProvider as PlaygroundProviderComponent } from './providers/playground_provider'; -import { PlaygroundHeaderDocs } from './components/playground_header_docs'; +import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import type { SearchNavigationPluginStart } from '@kbn/search-navigation/public'; +import type { SecurityPluginStart } from '@kbn/security-plugin/public'; +import type { LicensingPluginStart } from '@kbn/licensing-plugin/public'; +import type { ChatRequestData, MessageRole } from '../common/types'; export * from '../common/types'; @@ -36,13 +34,11 @@ export enum PlaygroundPageMode { // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface SearchPlaygroundPluginSetup {} -export interface SearchPlaygroundPluginStart { - PlaygroundProvider: React.FC>; - Playground: React.FC>; - PlaygroundHeaderDocs: React.FC>; -} +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface SearchPlaygroundPluginStart {} export interface AppPluginSetupDependencies { + cloud?: CloudSetup; share: SharePluginSetup; } @@ -52,21 +48,16 @@ export interface AppPluginStartDependencies { navigation: NavigationPublicPluginStart; triggersActionsUi: TriggersAndActionsUIPublicPluginStart; share: SharePluginStart; + cloud?: CloudStart; console?: ConsolePluginStart; data: DataPublicPluginStart; -} - -export interface AppServicesContext { - http: HttpStart; + searchNavigation?: SearchNavigationPluginStart; security: SecurityPluginStart; - share: SharePluginStart; - cloud?: CloudSetup; - triggersActionsUi: TriggersAndActionsUIPublicPluginStart; - usageCollection?: UsageCollectionStart; - console?: ConsolePluginStart; - data: DataPublicPluginStart; + licensing: LicensingPluginStart; } +export type AppServicesContext = CoreStart & AppPluginStartDependencies; + export enum ChatFormFields { question = 'question', citations = 'citations', diff --git a/x-pack/plugins/search_playground/server/config.ts b/x-pack/plugins/search_playground/server/config.ts index 083c7ff14f5ea..3465b3126a1c7 100644 --- a/x-pack/plugins/search_playground/server/config.ts +++ b/x-pack/plugins/search_playground/server/config.ts @@ -13,7 +13,7 @@ export * from './types'; const configSchema = schema.object({ enabled: schema.boolean({ defaultValue: true }), ui: schema.object({ - enabled: schema.boolean({ defaultValue: false }), + enabled: schema.boolean({ defaultValue: true }), }), }); diff --git a/x-pack/plugins/search_playground/server/plugin.ts b/x-pack/plugins/search_playground/server/plugin.ts index 962645aba8403..f2291de820a22 100644 --- a/x-pack/plugins/search_playground/server/plugin.ts +++ b/x-pack/plugins/search_playground/server/plugin.ts @@ -5,15 +5,25 @@ * 2.0. */ -import { PluginInitializerContext, CoreSetup, CoreStart, Plugin, Logger } from '@kbn/core/server'; +import { + PluginInitializerContext, + CoreSetup, + CoreStart, + Plugin, + Logger, + DEFAULT_APP_CATEGORIES, +} from '@kbn/core/server'; +import { KibanaFeatureScope } from '@kbn/features-plugin/common'; import { sendMessageEvent } from './analytics/events'; import { SearchPlaygroundPluginSetup, + SearchPlaygroundPluginSetupDependencies, SearchPlaygroundPluginStart, SearchPlaygroundPluginStartDependencies, } from './types'; import { defineRoutes } from './routes'; +import { PLUGIN_ID, PLUGIN_NAME } from '../common'; export class SearchPlaygroundPlugin implements @@ -31,7 +41,8 @@ export class SearchPlaygroundPlugin } public setup( - core: CoreSetup + core: CoreSetup, + { features }: SearchPlaygroundPluginSetupDependencies ) { this.logger.debug('searchPlayground: Setup'); const router = core.http.createRouter(); @@ -40,6 +51,37 @@ export class SearchPlaygroundPlugin this.registerAnalyticsEvents(core); + features.registerKibanaFeature({ + id: PLUGIN_ID, + minimumLicense: 'enterprise', + name: PLUGIN_NAME, + order: 1, + category: DEFAULT_APP_CATEGORIES.enterpriseSearch, + scope: [KibanaFeatureScope.Spaces, KibanaFeatureScope.Security], + app: ['kibana', PLUGIN_ID], + catalogue: [PLUGIN_ID], + privileges: { + all: { + app: ['kibana', PLUGIN_ID], + api: [PLUGIN_ID], + catalogue: [PLUGIN_ID], + savedObject: { + all: [], + read: [], + }, + ui: [], + }, + read: { + disabled: true, + savedObject: { + all: [], + read: [], + }, + ui: [], + }, + }, + }); + return {}; } diff --git a/x-pack/plugins/search_playground/server/routes.ts b/x-pack/plugins/search_playground/server/routes.ts index 115b55d34146a..3aca695cc0b08 100644 --- a/x-pack/plugins/search_playground/server/routes.ts +++ b/x-pack/plugins/search_playground/server/routes.ts @@ -9,6 +9,7 @@ import { schema } from '@kbn/config-schema'; import type { Logger } from '@kbn/logging'; import { IRouter, StartServicesAccessor } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; +import { PLUGIN_ID } from '../common'; import { sendMessageEvent, SendMessageEventData } from './analytics/events'; import { fetchFields } from './lib/fetch_query_source_fields'; import { AssistClientOptionsWithClient, createAssist as Assist } from './utils/assist'; @@ -53,6 +54,14 @@ export function defineRoutes({ router.post( { path: APIRoutes.POST_QUERY_SOURCE_FIELDS, + options: { + access: 'internal', + }, + security: { + authz: { + requiredPrivileges: [PLUGIN_ID], + }, + }, validate: { body: schema.object({ indices: schema.arrayOf(schema.string()), @@ -74,6 +83,14 @@ export function defineRoutes({ router.post( { path: APIRoutes.POST_CHAT_MESSAGE, + options: { + access: 'internal', + }, + security: { + authz: { + requiredPrivileges: [PLUGIN_ID], + }, + }, validate: { body: schema.object({ data: schema.object({ @@ -194,6 +211,14 @@ export function defineRoutes({ router.get( { path: APIRoutes.GET_INDICES, + options: { + access: 'internal', + }, + security: { + authz: { + requiredPrivileges: [PLUGIN_ID], + }, + }, validate: { query: schema.object({ search_query: schema.maybe(schema.string()), @@ -223,6 +248,14 @@ export function defineRoutes({ router.post( { path: APIRoutes.POST_SEARCH_QUERY, + options: { + access: 'internal', + }, + security: { + authz: { + requiredPrivileges: [PLUGIN_ID], + }, + }, validate: { body: schema.object({ search_query: schema.string(), @@ -287,6 +320,14 @@ export function defineRoutes({ router.post( { path: APIRoutes.GET_INDEX_MAPPINGS, + options: { + access: 'internal', + }, + security: { + authz: { + requiredPrivileges: [PLUGIN_ID], + }, + }, validate: { body: schema.object({ indices: schema.arrayOf(schema.string()), diff --git a/x-pack/plugins/search_playground/server/types.ts b/x-pack/plugins/search_playground/server/types.ts index c3f1e8571a6b7..e56134b4f2e07 100644 --- a/x-pack/plugins/search_playground/server/types.ts +++ b/x-pack/plugins/search_playground/server/types.ts @@ -5,8 +5,9 @@ * 2.0. */ -import { PluginStartContract as ActionsPluginStartContract } from '@kbn/actions-plugin/server'; -import { CloudStart } from '@kbn/cloud-plugin/server'; +import type { PluginStartContract as ActionsPluginStartContract } from '@kbn/actions-plugin/server'; +import type { CloudSetup, CloudStart } from '@kbn/cloud-plugin/server'; +import type { FeaturesPluginSetup } from '@kbn/features-plugin/server'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface SearchPlaygroundPluginSetup {} @@ -14,6 +15,11 @@ export interface SearchPlaygroundPluginSetup {} // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface SearchPlaygroundPluginStart {} +export interface SearchPlaygroundPluginSetupDependencies { + cloud?: CloudSetup; + features: FeaturesPluginSetup; +} + export interface SearchPlaygroundPluginStartDependencies { actions: ActionsPluginStartContract; cloud?: CloudStart; diff --git a/x-pack/plugins/search_playground/tsconfig.json b/x-pack/plugins/search_playground/tsconfig.json index 73204bade51c3..d0b14624fcdf3 100644 --- a/x-pack/plugins/search_playground/tsconfig.json +++ b/x-pack/plugins/search_playground/tsconfig.json @@ -17,7 +17,6 @@ "@kbn/i18n", "@kbn/i18n-react", "@kbn/kibana-react-plugin", - "@kbn/security-plugin", "@kbn/user-profile-components", "@kbn/shared-ux-router", "@kbn/shared-ux-page-kibana-template", @@ -26,8 +25,6 @@ "@kbn/share-plugin", "@kbn/cloud-plugin", "@kbn/actions-plugin", - "@kbn/shared-ux-utility", - "@kbn/core-lifecycle-browser", "@kbn/stack-connectors-plugin", "@kbn/cases-plugin", "@kbn/triggers-actions-ui-plugin", @@ -46,6 +43,10 @@ "@kbn/discover-utils", "@kbn/data-plugin", "@kbn/search-index-documents", + "@kbn/search-navigation", + "@kbn/features-plugin", + "@kbn/security-plugin", + "@kbn/licensing-plugin", ], "exclude": [ "target/**/*", diff --git a/x-pack/plugins/search_solution/search_navigation/public/plugin.ts b/x-pack/plugins/search_solution/search_navigation/public/plugin.ts index 4b618a6245c40..ddaf0b059fceb 100644 --- a/x-pack/plugins/search_solution/search_navigation/public/plugin.ts +++ b/x-pack/plugins/search_solution/search_navigation/public/plugin.ts @@ -12,13 +12,17 @@ import type { PluginInitializerContext, ScopedHistory, } from '@kbn/core/public'; -import type { ChromeStyle } from '@kbn/core-chrome-browser'; +import type { Subscription } from 'rxjs'; +import type { ChromeBreadcrumb, ChromeStyle } from '@kbn/core-chrome-browser'; +import { i18n } from '@kbn/i18n'; import type { Logger } from '@kbn/logging'; import type { SearchNavigationPluginSetup, SearchNavigationPluginStart, ClassicNavItem, ClassicNavigationFactoryFn, + SearchNavigationSetBreadcrumbsOptions, + AppPluginStartDependencies, } from './types'; export class SearchNavigationPlugin @@ -28,8 +32,10 @@ export class SearchNavigationPlugin private currentChromeStyle: ChromeStyle | undefined = undefined; private baseClassicNavItemsFn: (() => ClassicNavItem[]) | undefined = undefined; private coreStart: CoreStart | undefined = undefined; + private pluginsStart: AppPluginStartDependencies | undefined = undefined; private classicNavFactory: ClassicNavigationFactoryFn | undefined = undefined; private onAppMountHandlers: Array<() => Promise> = []; + private chromeSub: Subscription | undefined; constructor(private readonly initializerContext: PluginInitializerContext) { this.logger = this.initializerContext.logger.get(); @@ -39,9 +45,10 @@ export class SearchNavigationPlugin return {}; } - public start(core: CoreStart): SearchNavigationPluginStart { + public start(core: CoreStart, plugins: AppPluginStartDependencies): SearchNavigationPluginStart { this.coreStart = core; - core.chrome.getChromeStyle$().subscribe((value) => { + this.pluginsStart = plugins; + this.chromeSub = core.chrome.getChromeStyle$().subscribe((value) => { this.currentChromeStyle = value; }); @@ -54,10 +61,19 @@ export class SearchNavigationPlugin registerOnAppMountHandler: this.registerOnAppMountHandler.bind(this), setGetBaseClassicNavItems: this.setGetBaseClassicNavItems.bind(this), useClassicNavigation: this.useClassicNavigation.bind(this), + breadcrumbs: { + setSearchBreadCrumbs: this.setBreadcrumbs.bind(this), + clearBreadcrumbs: this.clearBreadcrumbs.bind(this), + }, }; } - public stop() {} + public stop() { + if (this.chromeSub) { + this.chromeSub.unsubscribe(); + this.chromeSub = undefined; + } + } private async handleOnAppMount() { if (this.onAppMountHandlers.length === 0) return; @@ -89,4 +105,36 @@ export class SearchNavigationPlugin return this.classicNavFactory(this.baseClassicNavItemsFn(), this.coreStart, history); } + + private setBreadcrumbs( + breadcrumbs: ChromeBreadcrumb[], + { forClassicChromeStyle = false }: SearchNavigationSetBreadcrumbsOptions = {} + ) { + if (forClassicChromeStyle === true && this.currentChromeStyle !== 'classic') return; + + const searchBreadcrumbs = [this.getSearchHomeBreadcrumb(), ...breadcrumbs]; + if (this.pluginsStart?.serverless) { + this.pluginsStart.serverless.setBreadcrumbs(searchBreadcrumbs); + } else { + this.coreStart?.chrome.setBreadcrumbs(searchBreadcrumbs); + } + } + + private clearBreadcrumbs() { + if (this.pluginsStart?.serverless) { + this.pluginsStart.serverless.setBreadcrumbs([]); + } else { + this.coreStart?.chrome.setBreadcrumbs([]); + } + } + + private getSearchHomeBreadcrumb(): ChromeBreadcrumb { + // TODO: When search_navigation handles solution nav, use the default + // home deep link for this breadcrumb's path. + return { + text: i18n.translate('xpack.searchNavigation.breadcrumbs.home.title', { + defaultMessage: 'Elasticsearch', + }), + }; + } } diff --git a/x-pack/plugins/search_solution/search_navigation/public/types.ts b/x-pack/plugins/search_solution/search_navigation/public/types.ts index 91e8cc73524e2..abba2a55a75c3 100644 --- a/x-pack/plugins/search_solution/search_navigation/public/types.ts +++ b/x-pack/plugins/search_solution/search_navigation/public/types.ts @@ -6,7 +6,7 @@ */ import type { ReactNode } from 'react'; -import type { AppDeepLinkId } from '@kbn/core-chrome-browser'; +import type { AppDeepLinkId, ChromeBreadcrumb } from '@kbn/core-chrome-browser'; import type { CoreStart, ScopedHistory } from '@kbn/core/public'; import type { ServerlessPluginSetup, ServerlessPluginStart } from '@kbn/serverless/public'; import type { SolutionNavProps } from '@kbn/shared-ux-page-solution-nav'; @@ -20,6 +20,13 @@ export interface SearchNavigationPluginStart { // This is temporary until we can migrate building the class nav item list out of `enterprise_search` plugin setGetBaseClassicNavItems: (classicNavItemsFn: () => ClassicNavItem[]) => void; useClassicNavigation: (history: ScopedHistory) => SolutionNavProps | undefined; + breadcrumbs: { + setSearchBreadCrumbs: ( + breadcrumbs: ChromeBreadcrumb[], + options?: SearchNavigationSetBreadcrumbsOptions + ) => void; + clearBreadcrumbs: () => void; + }; } export interface AppPluginSetupDependencies { @@ -49,3 +56,10 @@ export type ClassicNavigationFactoryFn = ( core: CoreStart, history: ScopedHistory ) => SolutionNavProps | undefined; + +export interface SearchNavigationSetBreadcrumbsOptions { + // When set to `true` breadcrumbs are only set when chrome style is set to classic. + // This option is for pages who rely on Solution Navigation for breadcrumbs, but still + // need to explicitly set the page breadcrumbs for classic solution view. + forClassicChromeStyle?: boolean; +} diff --git a/x-pack/plugins/search_solution/search_navigation/tsconfig.json b/x-pack/plugins/search_solution/search_navigation/tsconfig.json index 6d61fbb24ec89..3be41403c936e 100644 --- a/x-pack/plugins/search_solution/search_navigation/tsconfig.json +++ b/x-pack/plugins/search_solution/search_navigation/tsconfig.json @@ -4,11 +4,8 @@ "outDir": "target/types" }, "include": [ - "__mocks__/**/*", "common/**/*", "public/**/*", - "server/**/*", - "../../../../typings/**/*" ], "kbn_references": [ "@kbn/core", diff --git a/x-pack/plugins/serverless_search/kibana.jsonc b/x-pack/plugins/serverless_search/kibana.jsonc index f7b404edb37b1..cae0a693846f1 100644 --- a/x-pack/plugins/serverless_search/kibana.jsonc +++ b/x-pack/plugins/serverless_search/kibana.jsonc @@ -35,6 +35,7 @@ "indexManagement", "searchConnectors", "searchInferenceEndpoints", + "searchPlayground", "usageCollection" ], "requiredBundles": ["kibanaReact"] diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index b1b705903a81d..1f71da77a2a29 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -17794,7 +17794,6 @@ "xpack.enterpriseSearch.content.overview.gettingStarted.generateApiKeyPanel.panelTitle": "Générer une clé d’API", "xpack.enterpriseSearch.content.overview.gettingStarted.pageDescription": "Configurez votre client de langage de programmation, ingérez des données, et vous serez prêt à commencer vos recherches en quelques minutes.", "xpack.enterpriseSearch.content.overview.gettingStarted.pageTitle": "Clients linguistiques Elasticsearch", - "xpack.enterpriseSearch.content.playground.breadcrumb": "Playground", "xpack.enterpriseSearch.content.searchIndex.cancelSync.successMessage": "Annulation réussie de la synchronisation", "xpack.enterpriseSearch.content.searchIndex.cancelSyncs.successMessage": "Annulation réussie des synchronisations", "xpack.enterpriseSearch.content.searchIndex.configurationTabLabel": "Configuration", @@ -18353,7 +18352,6 @@ "xpack.enterpriseSearch.navigation.appSearchEnginesLinkLabel": "Moteurs", "xpack.enterpriseSearch.navigation.contentConnectorsLinkLabel": "Connecteurs", "xpack.enterpriseSearch.navigation.contentIndicesLinkLabel": "Index", - "xpack.enterpriseSearch.navigation.contentPlaygroundLinkLabel": "Playground", "xpack.enterpriseSearch.navigation.contentWebcrawlersLinkLabel": "Robots d'indexation", "xpack.enterpriseSearch.navigation.relevanceInferenceEndpointsLinkLabel": "Points de terminaison d'inférence", "xpack.enterpriseSearch.notFound.action1": "Retour à votre tableau de bord", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 67f3663b75c7b..e013fa2ee7fef 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -17654,7 +17654,6 @@ "xpack.enterpriseSearch.content.overview.gettingStarted.generateApiKeyPanel.panelTitle": "APIキーを生成", "xpack.enterpriseSearch.content.overview.gettingStarted.pageDescription": "プログラミング言語のクライアントを設定し、データを取り込めば、数分で検索を開始できます。", "xpack.enterpriseSearch.content.overview.gettingStarted.pageTitle": "Elasticsearch言語クライアント", - "xpack.enterpriseSearch.content.playground.breadcrumb": "Playground", "xpack.enterpriseSearch.content.searchIndex.cancelSync.successMessage": "同期が正常にキャンセルされました", "xpack.enterpriseSearch.content.searchIndex.cancelSyncs.successMessage": "同期が正常にキャンセルされました", "xpack.enterpriseSearch.content.searchIndex.configurationTabLabel": "構成", @@ -18211,7 +18210,6 @@ "xpack.enterpriseSearch.navigation.appSearchEnginesLinkLabel": "エンジン", "xpack.enterpriseSearch.navigation.contentConnectorsLinkLabel": "コネクター", "xpack.enterpriseSearch.navigation.contentIndicesLinkLabel": "インデックス", - "xpack.enterpriseSearch.navigation.contentPlaygroundLinkLabel": "Playground", "xpack.enterpriseSearch.navigation.contentWebcrawlersLinkLabel": "Webクローラー", "xpack.enterpriseSearch.navigation.relevanceInferenceEndpointsLinkLabel": "推論エンドポイント", "xpack.enterpriseSearch.notFound.action1": "ダッシュボードに戻す", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 961ac1331a399..1f97f21c8fafa 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -17354,7 +17354,6 @@ "xpack.enterpriseSearch.content.overview.gettingStarted.generateApiKeyPanel.panelTitle": "生成 API 密钥", "xpack.enterpriseSearch.content.overview.gettingStarted.pageDescription": "设置您的编程语言客户端,采集一些数据,如此即可在数分钟内开始搜索。", "xpack.enterpriseSearch.content.overview.gettingStarted.pageTitle": "Elasticsearch 语言客户端", - "xpack.enterpriseSearch.content.playground.breadcrumb": "Playground", "xpack.enterpriseSearch.content.searchIndex.cancelSync.successMessage": "已成功取消同步", "xpack.enterpriseSearch.content.searchIndex.cancelSyncs.successMessage": "已成功取消同步", "xpack.enterpriseSearch.content.searchIndex.configurationTabLabel": "配置", @@ -17909,7 +17908,6 @@ "xpack.enterpriseSearch.navigation.appSearchEnginesLinkLabel": "引擎", "xpack.enterpriseSearch.navigation.contentConnectorsLinkLabel": "连接器", "xpack.enterpriseSearch.navigation.contentIndicesLinkLabel": "索引", - "xpack.enterpriseSearch.navigation.contentPlaygroundLinkLabel": "Playground", "xpack.enterpriseSearch.navigation.contentWebcrawlersLinkLabel": "网络爬虫", "xpack.enterpriseSearch.navigation.relevanceInferenceEndpointsLinkLabel": "推理终端", "xpack.enterpriseSearch.notFound.action1": "返回到您的仪表板", diff --git a/x-pack/test/api_integration/apis/features/features/features.ts b/x-pack/test/api_integration/apis/features/features/features.ts index 7541b2171b2cb..42dcd94234c98 100644 --- a/x-pack/test/api_integration/apis/features/features/features.ts +++ b/x-pack/test/api_integration/apis/features/features/features.ts @@ -129,6 +129,7 @@ export default function ({ getService }: FtrProviderContext) { 'rulesSettings', 'uptime', 'searchInferenceEndpoints', + 'searchPlayground', 'siem', 'slo', 'securitySolutionAssistant', @@ -180,6 +181,7 @@ export default function ({ getService }: FtrProviderContext) { 'rulesSettings', 'uptime', 'searchInferenceEndpoints', + 'searchPlayground', 'siem', 'slo', 'securitySolutionAssistant', diff --git a/x-pack/test/api_integration/apis/security/privileges.ts b/x-pack/test/api_integration/apis/security/privileges.ts index 4cf8cc46a9338..c59fe61e7e1d1 100644 --- a/x-pack/test/api_integration/apis/security/privileges.ts +++ b/x-pack/test/api_integration/apis/security/privileges.ts @@ -60,6 +60,7 @@ export default function ({ getService }: FtrProviderContext) { ], observabilityAIAssistant: ['all', 'read', 'minimal_all', 'minimal_read'], slo: ['all', 'read', 'minimal_all', 'minimal_read'], + searchPlayground: ['all', 'read', 'minimal_all', 'minimal_read'], searchInferenceEndpoints: ['all', 'read', 'minimal_all', 'minimal_read'], fleetv2: ['all', 'read', 'minimal_all', 'minimal_read'], fleet: ['all', 'read', 'minimal_all', 'minimal_read'], diff --git a/x-pack/test/api_integration/apis/security/privileges_basic.ts b/x-pack/test/api_integration/apis/security/privileges_basic.ts index 3911d95ea9bed..37db0e71030af 100644 --- a/x-pack/test/api_integration/apis/security/privileges_basic.ts +++ b/x-pack/test/api_integration/apis/security/privileges_basic.ts @@ -50,6 +50,7 @@ export default function ({ getService }: FtrProviderContext) { securitySolutionAttackDiscovery: ['all', 'read', 'minimal_all', 'minimal_read'], securitySolutionCases: ['all', 'read', 'minimal_all', 'minimal_read'], securitySolutionCasesV2: ['all', 'read', 'minimal_all', 'minimal_read'], + searchPlayground: ['all', 'read', 'minimal_all', 'minimal_read'], searchInferenceEndpoints: ['all', 'read', 'minimal_all', 'minimal_read'], fleetv2: ['all', 'read', 'minimal_all', 'minimal_read'], fleet: ['all', 'read', 'minimal_all', 'minimal_read'], @@ -146,6 +147,7 @@ export default function ({ getService }: FtrProviderContext) { ], observabilityAIAssistant: ['all', 'read', 'minimal_all', 'minimal_read'], slo: ['all', 'read', 'minimal_all', 'minimal_read'], + searchPlayground: ['all', 'read', 'minimal_all', 'minimal_read'], searchInferenceEndpoints: ['all', 'read', 'minimal_all', 'minimal_read'], fleetv2: ['all', 'read', 'minimal_all', 'minimal_read'], fleet: ['all', 'read', 'minimal_all', 'minimal_read'], diff --git a/x-pack/test/functional_search/tests/solution_navigation.ts b/x-pack/test/functional_search/tests/solution_navigation.ts index 89cee21a81d66..03a4614017ba2 100644 --- a/x-pack/test/functional_search/tests/solution_navigation.ts +++ b/x-pack/test/functional_search/tests/solution_navigation.ts @@ -155,15 +155,15 @@ export default function searchSolutionNavigation({ // check Build // > Playground await solutionNavigation.sidenav.clickLink({ - deepLinkId: 'enterpriseSearchApplications:playground', + deepLinkId: 'searchPlayground', }); await solutionNavigation.sidenav.expectLinkActive({ - deepLinkId: 'enterpriseSearchApplications:playground', + deepLinkId: 'searchPlayground', }); await solutionNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'Build' }); await solutionNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'Playground' }); await solutionNavigation.breadcrumbs.expectBreadcrumbExists({ - deepLinkId: 'enterpriseSearchApplications:playground', + deepLinkId: 'searchPlayground', }); // > Search applications await solutionNavigation.sidenav.clickLink({ @@ -304,7 +304,7 @@ export default function searchSolutionNavigation({ 'enterpriseSearchContent:connectors', 'enterpriseSearchContent:webCrawlers', 'build', - 'enterpriseSearchApplications:playground', + 'searchPlayground', 'enterpriseSearchApplications:searchApplications', 'enterpriseSearchAnalytics', 'relevance', diff --git a/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts b/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts index a74fbf6b75383..1e18525df2ecc 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts +++ b/x-pack/test/spaces_api_integration/spaces_only/telemetry/telemetry.ts @@ -84,6 +84,7 @@ export default function ({ getService }: FtrProviderContext) { apm: 0, enterpriseSearch: 0, searchInferenceEndpoints: 0, + searchPlayground: 0, siem: 0, securitySolutionCases: 0, securitySolutionCasesV2: 0, diff --git a/x-pack/test/ui_capabilities/security_and_spaces/tests/catalogue.ts b/x-pack/test/ui_capabilities/security_and_spaces/tests/catalogue.ts index ddcc187fad6a4..ffe278d152523 100644 --- a/x-pack/test/ui_capabilities/security_and_spaces/tests/catalogue.ts +++ b/x-pack/test/ui_capabilities/security_and_spaces/tests/catalogue.ts @@ -93,6 +93,7 @@ export default function catalogueTests({ getService }: FtrProviderContext) { 'enterpriseSearchVectorSearch', 'enterpriseSearchSemanticSearch', 'enterpriseSearchElasticsearch', + 'searchPlayground', 'searchInferenceEndpoints', 'appSearch', 'observabilityAIAssistant', diff --git a/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts b/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts index 6005e30ff2565..934f9af8d6b8c 100644 --- a/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts +++ b/x-pack/test/ui_capabilities/security_and_spaces/tests/nav_links.ts @@ -64,6 +64,7 @@ export default function navLinksTests({ getService }: FtrProviderContext) { 'monitoring', 'observabilityAIAssistant', 'enterpriseSearch', + 'searchPlayground', 'searchInferenceEndpoints', 'guidedOnboardingFeature', 'securitySolutionAssistant', From 02df3c933f60b98adcc15196196dba862d1500a7 Mon Sep 17 00:00:00 2001 From: Steph Milovic Date: Thu, 5 Dec 2024 14:27:29 -0700 Subject: [PATCH 107/141] [Security Assistant] Abort signal fix (#203041) --- .../chat_vertex/chat_vertex.ts | 1 + .../language_models/chat_vertex/connection.ts | 1 + .../graphs/default_assistant_graph/graph.ts | 17 ++++++++-- .../graphs/default_assistant_graph/helpers.ts | 5 +-- .../graphs/default_assistant_graph/index.ts | 1 + .../default_assistant_graph/nodes/respond.ts | 5 ++- .../nodes/run_agent.ts | 31 ++++++++++--------- 7 files changed, 38 insertions(+), 23 deletions(-) diff --git a/x-pack/packages/kbn-langchain/server/language_models/chat_vertex/chat_vertex.ts b/x-pack/packages/kbn-langchain/server/language_models/chat_vertex/chat_vertex.ts index 7cea2d421a9da..5c7a9ef918da3 100644 --- a/x-pack/packages/kbn-langchain/server/language_models/chat_vertex/chat_vertex.ts +++ b/x-pack/packages/kbn-langchain/server/language_models/chat_vertex/chat_vertex.ts @@ -93,6 +93,7 @@ export class ActionsClientChatVertexAI extends ChatVertexAI { tools: data?.tools, temperature: this.temperature, ...systemInstruction, + signal: options?.signal, }, }, }; diff --git a/x-pack/packages/kbn-langchain/server/language_models/chat_vertex/connection.ts b/x-pack/packages/kbn-langchain/server/language_models/chat_vertex/connection.ts index 8ce776890acfa..442e6b079db9b 100644 --- a/x-pack/packages/kbn-langchain/server/language_models/chat_vertex/connection.ts +++ b/x-pack/packages/kbn-langchain/server/language_models/chat_vertex/connection.ts @@ -82,6 +82,7 @@ export class ActionsClientChatConnection extends ChatConnection { tools: data?.tools, temperature: this.temperature, ...systemInstruction, + signal: options?.signal, }, }, }; diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts index 4688caa176b56..10ecebb5e3f9b 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts @@ -34,6 +34,7 @@ export interface GetDefaultAssistantGraphParams { dataClients?: AssistantDataClients; createLlmInstance: () => BaseChatModel; logger: Logger; + signal?: AbortSignal; tools: StructuredTool[]; replacements: Replacements; } @@ -45,6 +46,8 @@ export const getDefaultAssistantGraph = ({ dataClients, createLlmInstance, logger, + // some chat models (bedrock) require a signal to be passed on agent invoke rather than the signal passed to the chat model + signal, tools, replacements, }: GetDefaultAssistantGraphParams) => { @@ -137,11 +140,19 @@ export const getDefaultAssistantGraph = ({ }) ) .addNode(NodeType.AGENT, (state: AgentState) => - runAgent({ ...nodeParams, state, agentRunnable, kbDataClient: dataClients?.kbDataClient }) + runAgent({ + ...nodeParams, + config: { signal }, + state, + agentRunnable, + kbDataClient: dataClients?.kbDataClient, + }) + ) + .addNode(NodeType.TOOLS, (state: AgentState) => + executeTools({ ...nodeParams, config: { signal }, state, tools }) ) - .addNode(NodeType.TOOLS, (state: AgentState) => executeTools({ ...nodeParams, state, tools })) .addNode(NodeType.RESPOND, (state: AgentState) => - respond({ ...nodeParams, state, model: createLlmInstance() }) + respond({ ...nodeParams, config: { signal }, state, model: createLlmInstance() }) ) .addNode(NodeType.MODEL_INPUT, (state: AgentState) => modelInput({ ...nodeParams, state })) .addEdge(START, NodeType.MODEL_INPUT) diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts index 0126692b5b6a5..a4b36dfa8dc22 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts @@ -160,10 +160,7 @@ export const streamGraph = async ({ finalMessage += msg.content; } } else if (event.event === 'on_llm_end' && !didEnd) { - const generations = event.data.output?.generations[0]; - if (generations && generations[0]?.generationInfo.finish_reason === 'stop') { - handleStreamEnd(generations[0]?.text ?? finalMessage); - } + handleStreamEnd(event.data.output?.generations[0][0]?.text ?? finalMessage); } } } diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts index 4ddd3eae11624..60c229b46e61c 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts @@ -173,6 +173,7 @@ export const callAssistantGraph: AgentExecutor = async ({ // we need to pass it like this or streaming does not work for bedrock createLlmInstance, logger, + signal: abortSignal, tools, replacements, }); diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/respond.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/respond.ts index bfd62ee7aab21..76d449373488f 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/respond.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/respond.ts @@ -7,6 +7,7 @@ import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { StringWithAutocomplete } from '@langchain/core/dist/utils/types'; +import { RunnableConfig } from '@langchain/core/runnables'; import { AGENT_NODE_TAG } from './run_agent'; import { AgentState, NodeParamsBase } from '../types'; import { NodeType } from '../constants'; @@ -14,9 +15,11 @@ import { NodeType } from '../constants'; export interface RespondParams extends NodeParamsBase { state: AgentState; model: BaseChatModel; + config?: RunnableConfig; } export async function respond({ + config, logger, state, model, @@ -34,7 +37,7 @@ export async function respond({ const responseMessage = await model // use AGENT_NODE_TAG to identify as agent node for stream parsing - .withConfig({ runName: 'Summarizer', tags: [AGENT_NODE_TAG] }) + .withConfig({ runName: 'Summarizer', tags: [AGENT_NODE_TAG], signal: config?.signal }) .invoke([userMessage]); return { diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.ts index 053254a1d99b3..952b97287c3ca 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.ts @@ -43,21 +43,22 @@ export async function runAgent({ logger.debug(() => `${NodeType.AGENT}: Node state:\n${JSON.stringify(state, null, 2)}`); const knowledgeHistory = await kbDataClient?.getRequiredKnowledgeBaseDocumentEntries(); - - const agentOutcome = await agentRunnable.withConfig({ tags: [AGENT_NODE_TAG] }).invoke( - { - ...state, - knowledge_history: `${KNOWLEDGE_HISTORY_PREFIX}\n${ - knowledgeHistory?.length - ? JSON.stringify(knowledgeHistory.map((e) => e.text)) - : NO_KNOWLEDGE_HISTORY - }`, - // prepend any user prompt (gemini) - input: formatLatestUserMessage(state.input, state.llmType), - chat_history: state.messages, // TODO: Message de-dupe with ...state spread - }, - config - ); + const agentOutcome = await agentRunnable + .withConfig({ tags: [AGENT_NODE_TAG], signal: config?.signal }) + .invoke( + { + ...state, + knowledge_history: `${KNOWLEDGE_HISTORY_PREFIX}\n${ + knowledgeHistory?.length + ? JSON.stringify(knowledgeHistory.map((e) => e.text)) + : NO_KNOWLEDGE_HISTORY + }`, + // prepend any user prompt (gemini) + input: formatLatestUserMessage(state.input, state.llmType), + chat_history: state.messages, // TODO: Message de-dupe with ...state spread + }, + config + ); return { agentOutcome, From b9f229eca2f33be120daf97a1f1782271dce1635 Mon Sep 17 00:00:00 2001 From: Brad White Date: Thu, 5 Dec 2024 14:34:50 -0700 Subject: [PATCH 108/141] [CI] Upgrade buildkite deps (#203160) - [Mocha Changelog](https://github.com/mochajs/mocha/blob/main/CHANGELOG.md#changelog) - Only breaking change seems to be min Node version --- .buildkite/package-lock.json | 655 ++++++++++++++++++++++++++++++----- .buildkite/package.json | 6 +- 2 files changed, 579 insertions(+), 82 deletions(-) diff --git a/.buildkite/package-lock.json b/.buildkite/package-lock.json index ffec5b75fca68..077986e3d636b 100644 --- a/.buildkite/package-lock.json +++ b/.buildkite/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "dependencies": { "@octokit/rest": "^18.10.0", - "axios": "^1.7.4", + "axios": "^1.7.9", "globby": "^11.1.0", "js-yaml": "^4.1.0", "minimatch": "^5.0.1", @@ -22,7 +22,7 @@ "@types/mocha": "^10.0.1", "@types/node": "^15.12.2", "chai": "^4.3.10", - "mocha": "^10.8.2", + "mocha": "^11.0.1", "nock": "^12.0.2", "ts-node": "^10.9.2", "typescript": "^5.1.6" @@ -40,6 +40,102 @@ "node": ">=12" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", @@ -217,6 +313,16 @@ "@octokit/openapi-types": "^11.2.0" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -360,9 +466,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -544,6 +650,20 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -618,6 +738,12 @@ "node": ">=8" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -723,6 +849,22 @@ } } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -736,12 +878,6 @@ "node": ">= 6" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -775,19 +911,20 @@ } }, "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=12" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -804,6 +941,21 @@ "node": ">= 6" } }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -849,22 +1001,6 @@ "node": ">= 4" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -942,6 +1078,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1005,6 +1162,12 @@ "get-func-name": "^2.0.0" } }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -1061,10 +1224,19 @@ "node": ">=10" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.0.1.tgz", + "integrity": "sha512-+3GkODfsDG71KSCQhc4IekSW+ItCK/kiez1Z28ksWvYhKXV/syxMlerR/sC7whDp7IyreZ4YxceMLdTs5hQE8A==", "dev": true, "dependencies": { "ansi-colors": "^4.1.3", @@ -1074,7 +1246,7 @@ "diff": "^5.2.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", - "glob": "^8.1.0", + "glob": "^10.4.5", "he": "^1.2.0", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", @@ -1093,7 +1265,7 @@ "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 14.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/mocha/node_modules/supports-color": { @@ -1198,6 +1370,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -1207,6 +1385,31 @@ "node": ">=8" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -1358,6 +1561,39 @@ "randombytes": "^2.1.0" } }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -1380,6 +1616,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -1392,6 +1643,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -1548,6 +1812,21 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", @@ -1571,6 +1850,24 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1659,6 +1956,71 @@ "@jridgewell/trace-mapping": "0.3.9" } }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@jridgewell/resolve-uri": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", @@ -1815,6 +2177,13 @@ "@octokit/openapi-types": "^11.2.0" } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -1934,9 +2303,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2077,6 +2446,17 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -2125,6 +2505,12 @@ "path-type": "^4.0.0" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2192,6 +2578,16 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" }, + "foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -2202,12 +2598,6 @@ "mime-types": "^2.1.12" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -2228,16 +2618,28 @@ "dev": true }, "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "dependencies": { + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "glob-parent": { @@ -2278,22 +2680,6 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2344,6 +2730,22 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2392,6 +2794,12 @@ "get-func-name": "^2.0.0" } }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -2433,10 +2841,16 @@ "brace-expansion": "^2.0.1" } }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true + }, "mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.0.1.tgz", + "integrity": "sha512-+3GkODfsDG71KSCQhc4IekSW+ItCK/kiez1Z28ksWvYhKXV/syxMlerR/sC7whDp7IyreZ4YxceMLdTs5hQE8A==", "dev": true, "requires": { "ansi-colors": "^4.1.3", @@ -2446,7 +2860,7 @@ "diff": "^5.2.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", - "glob": "^8.1.0", + "glob": "^10.4.5", "he": "^1.2.0", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", @@ -2530,12 +2944,34 @@ "p-limit": "^3.0.2" } }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + } + }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -2620,6 +3056,27 @@ "randombytes": "^2.1.0" } }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -2636,6 +3093,17 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2645,6 +3113,15 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2750,6 +3227,15 @@ "webidl-conversions": "^3.0.0" } }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, "workerpool": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", @@ -2767,6 +3253,17 @@ "strip-ansi": "^6.0.0" } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/.buildkite/package.json b/.buildkite/package.json index 5d5293971833a..9edd3b330b0ed 100644 --- a/.buildkite/package.json +++ b/.buildkite/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@octokit/rest": "^18.10.0", - "axios": "^1.7.4", + "axios": "^1.7.9", "globby": "^11.1.0", "js-yaml": "^4.1.0", "minimatch": "^5.0.1", @@ -24,7 +24,7 @@ "@types/mocha": "^10.0.1", "@types/node": "^15.12.2", "chai": "^4.3.10", - "mocha": "^10.8.2", + "mocha": "^11.0.1", "nock": "^12.0.2", "ts-node": "^10.9.2", "typescript": "^5.1.6" @@ -33,4 +33,4 @@ "#pipeline-utils": "./pipeline-utils/index.ts", "#pipeline-utils/*": "./pipeline-utils/*" } -} \ No newline at end of file +} From a8b03ccace99159572a55aff64093034ed83b155 Mon Sep 17 00:00:00 2001 From: Chris Earle Date: Thu, 5 Dec 2024 14:43:29 -0700 Subject: [PATCH 109/141] [DataUsage][Serverless] Fix AutoOps error message to drop "agent" reference (#202996) ## Summary This removes the references to "autoops agent" in the error message if the request fails, as it has nothing to do with any agent. ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [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] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations. - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) ### Identify risks No. None of the error messages are exported, so they cannot be misused in other places. --- .../data_usage/server/services/autoops_api.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/x-pack/plugins/data_usage/server/services/autoops_api.ts b/x-pack/plugins/data_usage/server/services/autoops_api.ts index d98b0c507fe14..8f371d3004def 100644 --- a/x-pack/plugins/data_usage/server/services/autoops_api.ts +++ b/x-pack/plugins/data_usage/server/services/autoops_api.ts @@ -24,8 +24,7 @@ import { AutoOpsConfig } from '../types'; import { AutoOpsError } from './errors'; import { appContextService } from './app_context'; -const AGENT_CREATION_FAILED_ERROR = 'AutoOps API could not create the autoops agent'; -const AUTO_OPS_AGENT_CREATION_PREFIX = '[AutoOps API] Creating autoops agent failed'; +const AUTO_OPS_REQUEST_FAILED_PREFIX = '[AutoOps API] Request failed'; const AUTO_OPS_MISSING_CONFIG_ERROR = 'Missing autoops configuration'; const getAutoOpsAPIRequestUrl = (url?: string, projectId?: string): string => @@ -120,7 +119,7 @@ export class AutoOpsAPIService { (error: Error | AxiosError) => { if (!axios.isAxiosError(error)) { this.logger.error( - `${AUTO_OPS_AGENT_CREATION_PREFIX} with an error ${error} ${requestConfigDebugStatus}`, + `${AUTO_OPS_REQUEST_FAILED_PREFIX} with an error ${error}, request config: ${requestConfigDebugStatus}`, errorMetadataWithRequestConfig ); throw new AutoOpsError(withRequestIdMessage(error.message)); @@ -131,9 +130,11 @@ export class AutoOpsAPIService { if (error.response) { // The request was made and the server responded with a status code and error data this.logger.error( - `${AUTO_OPS_AGENT_CREATION_PREFIX} because the AutoOps API responded with a status code that falls out of the range of 2xx: ${JSON.stringify( + `${AUTO_OPS_REQUEST_FAILED_PREFIX} because the AutoOps API responded with a status code that falls out of the range of 2xx: ${JSON.stringify( error.response.status - )}} ${JSON.stringify(error.response.data)}} ${requestConfigDebugStatus}`, + )}} ${JSON.stringify( + error.response.data + )}}, request config: ${requestConfigDebugStatus}`, { ...errorMetadataWithRequestConfig, http: { @@ -145,22 +146,22 @@ export class AutoOpsAPIService { }, } ); - throw new AutoOpsError(withRequestIdMessage(AGENT_CREATION_FAILED_ERROR)); + throw new AutoOpsError(withRequestIdMessage(AUTO_OPS_REQUEST_FAILED_PREFIX)); } else if (error.request) { // The request was made but no response was received this.logger.error( - `${AUTO_OPS_AGENT_CREATION_PREFIX} while sending the request to the AutoOps API: ${errorLogCodeCause} ${requestConfigDebugStatus}`, + `${AUTO_OPS_REQUEST_FAILED_PREFIX} while sending the request to the AutoOps API: ${errorLogCodeCause}, request config: ${requestConfigDebugStatus}`, errorMetadataWithRequestConfig ); throw new AutoOpsError(withRequestIdMessage(`no response received from the AutoOps API`)); } else { // Something happened in setting up the request that triggered an Error this.logger.error( - `${AUTO_OPS_AGENT_CREATION_PREFIX} to be created ${errorLogCodeCause} ${requestConfigDebugStatus} ${error.toJSON()}`, + `${AUTO_OPS_REQUEST_FAILED_PREFIX} with ${errorLogCodeCause}, request config: ${requestConfigDebugStatus}, error: ${error.toJSON()}`, errorMetadataWithRequestConfig ); throw new AutoOpsError( - withRequestIdMessage(`${AGENT_CREATION_FAILED_ERROR}, ${error.message}`) + withRequestIdMessage(`${AUTO_OPS_REQUEST_FAILED_PREFIX}, ${error.message}`) ); } } From 37063baf62559dd60cb43d37bac9dc1dfecd01fc Mon Sep 17 00:00:00 2001 From: Davis McPhee Date: Thu, 5 Dec 2024 20:11:34 -0400 Subject: [PATCH 110/141] [Data Views] Disable scripted field creation in the Data Views management page (#202250) ## Summary Scripted fields in data views have been deprecated since 7.13, and superseded by runtime fields. The ability to create new scripted fields has been removed from the Data Views management page in 9.0. Existing scripted fields can still be edited or deleted, and the creation UI can be accessed by navigating directly to `/app/management/kibana/dataViews/dataView/{dataViewId}/create-field`, but it is recommended to migrate to runtime fields or ES|QL instead to prepare for removal. Additionally, the scripted fields entry in the Upgrade Assistant has been updated to reflect these changes, improve migration instructions, and surface the full list of data views across all spaces that contain scripted fields as well as their associated spaces. New documentation has been added to the "Manage data views" page with examples and instructions to help users migrate off scripted fields to runtime fields or ES|QL, which is also linked to from the Upgrade Assistant entry. Data Views management page: ![management](https://github.com/user-attachments/assets/ed42310c-d7fa-48ba-8430-533e9230b48d) Upgrade Assistant: Resolves #182067. ### Checklist - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [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 - [ ] 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) - [x] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations. - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --------- Co-authored-by: Matt Kime Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- docs/management/manage-data-views.asciidoc | 110 ++++++++++-- docs/upgrade-notes.asciidoc | 14 ++ .../core-deprecations-common/index.ts | 1 + .../core-deprecations-common/src/types.ts | 7 +- .../shared/kbn-doc-links/src/get_doc_links.ts | 1 + .../shared/kbn-doc-links/src/types.ts | 1 + .../scripted_field_table.test.tsx.snap | 20 +-- .../__snapshots__/call_outs.test.tsx.snap | 12 +- .../components/call_outs/call_outs.tsx | 8 +- .../header/__snapshots__/header.test.tsx.snap | 46 ++++-- .../components/header/header.test.tsx | 23 +-- .../components/header/header.tsx | 82 +++++---- .../scripted_fields_table.tsx | 6 +- .../edit_index_pattern/tabs/utils.ts | 6 +- .../data_view_management/public/mocks.ts | 1 + .../server/deprecations/scripted_fields.ts | 156 ++++++++++++------ src/plugins/data_views/tsconfig.json | 2 + .../deprecations/scripted_fields.ts | 7 +- .../data_views/_handle_version_conflict.ts | 3 +- .../management/data_views/_scripted_fields.ts | 8 +- .../data_views/_scripted_fields_preview.ts | 3 +- test/functional/page_objects/settings_page.ts | 19 ++- test/tsconfig.json | 1 + .../translations/translations/fr-FR.json | 7 - .../translations/translations/ja-JP.json | 7 - .../translations/translations/zh-CN.json | 7 - .../deprecation_details_flyout.tsx | 40 ++++- .../apps/discover/async_scripted_fields.ts | 2 - 28 files changed, 388 insertions(+), 212 deletions(-) diff --git a/docs/management/manage-data-views.asciidoc b/docs/management/manage-data-views.asciidoc index 4c6a0d77b7a9e..c194444b72b59 100644 --- a/docs/management/manage-data-views.asciidoc +++ b/docs/management/manage-data-views.asciidoc @@ -170,7 +170,7 @@ Edit the settings for runtime fields, or remove runtime fields from data views. [[scripted-fields]] === Add scripted fields to data views -deprecated::[7.13,Use {ref}/runtime.html[runtime fields] instead of scripted fields. Runtime fields support Painless scripts and provide greater flexibility.] +deprecated::[7.13,Use {ref}/runtime.html[runtime fields] instead of scripted fields. Runtime fields support Painless scripting and provide greater flexibility. You can also use the {ref}/esql.html[Elasticsearch Query Language (ES|QL)] to compute values directly at query time.] Scripted fields compute data on the fly from the data in your {es} indices. The data is shown on the Discover tab as part of the document data, and you can use scripted fields in your visualizations. You query scripted fields with the <>, and can filter them using the filter bar. The scripted field values are computed at query time, so they aren't indexed and cannot be searched using the {kib} default @@ -193,33 +193,123 @@ For more information on scripted fields and additional examples, refer to https://www.elastic.co/blog/using-painless-kibana-scripted-fields[Using Painless in {kib} scripted fields] [float] -[[create-scripted-field]] -==== Create scripted fields +[[migrate-off-scripted-fields]] +==== Migrate to runtime fields or ES|QL queries -Create and add scripted fields to your data views. +The following code snippets demonstrate how an example scripted field called `computed_values` on the Kibana Sample Data Logs data view could be migrated to either a runtime field or an ES|QL query, highlighting the differences between each approach. -. Go to the *Data Views* management page using the navigation menu or the <>. +[float] +[[scripted-field-example]] +===== Scripted field -. Select the data view you want to add a scripted field to. +In the scripted field example, variables are created to track all values the script will need to access or return. Since scripted fields can only return a single value, the created variables must be returned together as an array at the end of the script. -. Select the *Scripted fields* tab, then click *Add scripted field*. +[source,text] +---- +def hour_of_day = $('@timestamp', ZonedDateTime.parse('1970-01-01T00:00:00Z')).getHour(); +def time_of_day = ''; + +if (hour_of_day >= 22 || hour_of_day < 5) + time_of_day = 'Night'; +else if (hour_of_day < 12) + time_of_day = 'Morning'; +else if (hour_of_day < 18) + time_of_day = 'Afternoon'; +else + time_of_day = 'Evening'; + +def response_int = Integer.parseInt($('response.keyword', '200')); +def response_category = ''; + +if (response_int < 200) + response_category = 'Informational'; +else if (response_int < 300) + response_category = 'Successful'; +else if (response_int < 400) + response_category = 'Redirection'; +else if (response_int < 500) + response_category = 'Client Error'; +else + response_category = 'Server Error'; + +return [time_of_day, response_category]; +---- -. Enter a *Name* for the scripted field, then enter the *Script* you want to use to compute a value on the fly from your index data. +[float] +[[runtime-field-example]] +===== Runtime field -. Click *Create field*. +Unlike scripted fields, runtime fields do not need to return a single value and can emit values at any point in the script, which will be combined and returned as a multi-value field. This allows for more flexibility in the script logic and removes the need to manually manage an array of values. -For more information about scripted fields in {es}, refer to {ref}/modules-scripting.html[Scripting]. +[source,text] +---- +def hour_of_day = $('@timestamp', ZonedDateTime.parse('1970-01-01T00:00:00Z')).getHour(); + +if (hour_of_day >= 22 || hour_of_day < 5) + emit('Night'); +else if (hour_of_day < 12) + emit('Morning'); +else if (hour_of_day < 18) + emit('Afternoon'); +else + emit('Evening'); + +def response_int = Integer.parseInt($('response.keyword', '200')); + +if (response_int < 200) + emit('Informational'); +else if (response_int < 300) + emit('Successful'); +else if (response_int < 400) + emit('Redirection'); +else if (response_int < 500) + emit('Client Error'); +else + emit('Server Error'); +---- + +[float] +[[esql-example]] +===== ES|QL query + +Alternatively, ES|QL can be used to skip the need for data view management entirely and simply compute the values you need at query time. ES|QL supports computing multiple field values in a single query, using computed values with its rich set of commands and functions, and even aggregations against computed values. This makes it an excellent solution for one-off queries and realtime data analysis. + +[source,esql] +---- +FROM kibana_sample_data_logs + | EVAL hour_of_day = DATE_EXTRACT("HOUR_OF_DAY", @timestamp) + | EVAL time_of_day = CASE( + hour_of_day >= 22 OR hour_of_day < 5, "Night", + hour_of_day < 12, "Morning", + hour_of_day < 18, "Afternoon", + "Evening" + ) + | EVAL response_int = TO_INTEGER(response) + | EVAL response_category = CASE( + response_int < 200, "Informational", + response_int < 300, "Successful", + response_int < 400, "Redirection", + response_int < 500, "Client Error", + "Server Error" + ) + | EVAL computed_values = MV_APPEND(time_of_day, response_category) + | DROP hour_of_day, time_of_day, response_int, response_category +---- [float] [[update-scripted-field]] ==== Manage scripted fields +WARNING: The ability to create new scripted fields has been removed from the *Data Views* management page in 9.0. Existing scripted fields can still be edited or deleted, and the creation UI can be accessed by navigating directly to `/app/management/kibana/dataViews/dataView/{dataViewId}/create-field`, but we recommend migrating to runtime fields or ES|QL queries instead to prepare for removal. + . Go to the *Data Views* management page using the navigation menu or the <>. . Select the data view that contains the scripted field you want to manage. . Select the *Scripted fields* tab, then open the scripted field edit options or delete the scripted field. +For more information about scripted fields in {es}, refer to {ref}/modules-scripting.html[Scripting]. + WARNING: Built-in validation is unsupported for scripted fields. When your scripts contain errors, you receive exceptions when you view the dynamically generated data. diff --git a/docs/upgrade-notes.asciidoc b/docs/upgrade-notes.asciidoc index effe1308408cc..20ffef01b9b01 100644 --- a/docs/upgrade-notes.asciidoc +++ b/docs/upgrade-notes.asciidoc @@ -164,5 +164,19 @@ resolving issues if any deprecated features are enabled. To access the assistant, go to **Stack Management** > **Upgrade Assistant**. +[discrete] +[[deprecation-202250]] +.Scripted field creation has been disabled in the Data Views management page (9.0.0) +[%collapsible] +==== +*Details* + +The ability to create new scripted fields has been removed from the *Data Views* management page in 9.0. Existing scripted fields can still be edited or deleted, and the creation UI can be accessed by navigating directly to `/app/management/kibana/dataViews/dataView/{dataViewId}/create-field`, but we recommend migrating to runtime fields or ES|QL queries instead to prepare for removal. +For more information, refer to {kibana-pull}202250[#202250]. +*Impact* + +It will no longer be possible to create new scripted fields directly from the *Data Views* management page. + +*Action* + +Migrate to runtime fields or ES|QL instead of creating new scripted fields. Existing scripted fields can still be edited or deleted. +==== \ No newline at end of file diff --git a/packages/core/deprecations/core-deprecations-common/index.ts b/packages/core/deprecations/core-deprecations-common/index.ts index de8122a18c551..828653289981b 100644 --- a/packages/core/deprecations/core-deprecations-common/index.ts +++ b/packages/core/deprecations/core-deprecations-common/index.ts @@ -8,6 +8,7 @@ */ export type { + DeprecationDetailsMessage, BaseDeprecationDetails, ConfigDeprecationDetails, FeatureDeprecationDetails, diff --git a/packages/core/deprecations/core-deprecations-common/src/types.ts b/packages/core/deprecations/core-deprecations-common/src/types.ts index 9a08be7808452..45f93aa5ba921 100644 --- a/packages/core/deprecations/core-deprecations-common/src/types.ts +++ b/packages/core/deprecations/core-deprecations-common/src/types.ts @@ -7,6 +7,11 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +export interface DeprecationDetailsMessage { + type: 'markdown' | 'text'; + content: string; +} + /** * Base properties shared by all types of deprecations * @@ -22,7 +27,7 @@ export interface BaseDeprecationDetails { * The description message to be displayed for the deprecation. * Check the README for writing deprecations in `src/core/server/deprecations/README.mdx` */ - message: string | string[]; + message: string | DeprecationDetailsMessage | Array; /** * levels: * - warning: will not break deployment upon upgrade diff --git a/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts index 47b601791d983..271d34d800471 100644 --- a/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts +++ b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts @@ -345,6 +345,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D fieldFormattersNumber: `${KIBANA_DOCS}numeral.html`, fieldFormattersString: `${KIBANA_DOCS}managing-data-views.html#string-field-formatters`, runtimeFields: `${KIBANA_DOCS}managing-data-views.html#runtime-fields`, + migrateOffScriptedFields: `${KIBANA_DOCS}managing-data-views.html#migrate-off-scripted-fields`, }, addData: `${KIBANA_DOCS}connect-to-elasticsearch.html`, kibana: { diff --git a/src/platform/packages/shared/kbn-doc-links/src/types.ts b/src/platform/packages/shared/kbn-doc-links/src/types.ts index d55146420ec73..749e7a40708ca 100644 --- a/src/platform/packages/shared/kbn-doc-links/src/types.ts +++ b/src/platform/packages/shared/kbn-doc-links/src/types.ts @@ -304,6 +304,7 @@ export interface DocLinks { readonly fieldFormattersNumber: string; readonly fieldFormattersString: string; readonly runtimeFields: string; + readonly migrateOffScriptedFields: string; }; readonly addData: string; readonly kibana: { diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/__snapshots__/scripted_field_table.test.tsx.snap b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/__snapshots__/scripted_field_table.test.tsx.snap index 95be4d4a7d632..19172b9866085 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/__snapshots__/scripted_field_table.test.tsx.snap +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/__snapshots__/scripted_field_table.test.tsx.snap @@ -2,9 +2,7 @@ exports[`ScriptedFieldsTable should filter based on the lang filter 1`] = ` -
    +
    -
    +
    -
    +
    -
    +
    -
    +
    + } >

    - `; diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.tsx index 6f519bf20eb00..e4b5253c9de75 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/call_outs/call_outs.tsx @@ -24,11 +24,12 @@ export const CallOuts = ({ deprecatedLangsInUse, painlessDocLink }: CallOutsProp return ( <> + } color="danger" @@ -38,7 +39,7 @@ export const CallOuts = ({ deprecatedLangsInUse, painlessDocLink }: CallOutsProp

    - ); }; diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/__snapshots__/header.test.tsx.snap b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/__snapshots__/header.test.tsx.snap index 40cd0974b163b..4ab365ed396ad 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/__snapshots__/header.test.tsx.snap +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/__snapshots__/header.test.tsx.snap @@ -8,27 +8,53 @@ exports[`Header should render normally 1`] = ` class="euiFlexItem emotion-euiFlexItem-grow-1" >
    -

    - - Scripted fields can be used in visualizations and displayed in documents. However, they cannot be searched. - -
    +

    +
    +
    - Scripted fields are deprecated. Use + Use - instead. + instead of scripted fields. Runtime fields support Painless scripting and provide greater flexibility. You can also use the + + to compute values directly at query time. + +
    +
    +
    +
    +

    + + Scripted fields can be used in visualizations and displayed in documents. However, they cannot be searched.

    diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/header.test.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/header.test.tsx index 06bb6ef45844a..8f7d8b2b8ad8b 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/header.test.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/header.test.tsx @@ -9,9 +9,6 @@ import React from 'react'; import { mountWithI18nProvider } from '@kbn/test-jest-helpers'; -import { RouteComponentProps } from 'react-router-dom'; -import { ScopedHistory } from '@kbn/core/public'; -import { scopedHistoryMock } from '@kbn/core/public/mocks'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { mockManagementPlugin } from '../../../../../mocks'; @@ -20,20 +17,12 @@ import { Header } from './header'; describe('Header', () => { const mockedContext = mockManagementPlugin.createIndexPatternManagmentContext(); test('should render normally', () => { - const component = mountWithI18nProvider( - , - { - wrappingComponent: KibanaContextProvider, - wrappingComponentProps: { - services: mockedContext, - }, - } - ); + const component = mountWithI18nProvider(
    , { + wrappingComponent: KibanaContextProvider, + wrappingComponentProps: { + services: mockedContext, + }, + }); expect(component.render()).toMatchSnapshot(); }); diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/header.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/header.tsx index 2acfee2d78648..88bf0a8aa8813 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/header.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/components/header/header.tsx @@ -8,27 +8,52 @@ */ import React from 'react'; -import { withRouter, RouteComponentProps } from 'react-router-dom'; -import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiText, EuiLink, EuiIcon } from '@elastic/eui'; +import { EuiCallOut, EuiFlexGroup, EuiFlexItem, EuiText, EuiLink, EuiSpacer } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { ScopedHistory } from '@kbn/core/public'; +import { i18n } from '@kbn/i18n'; -import { reactRouterNavigate, useKibana } from '@kbn/kibana-react-plugin/public'; +import { useKibana } from '@kbn/kibana-react-plugin/public'; import { IndexPatternManagmentContext } from '../../../../../types'; -interface HeaderProps extends RouteComponentProps { - indexPatternId: string; - history: ScopedHistory; -} - -export const Header = withRouter(({ indexPatternId, history }: HeaderProps) => { - const { dataViews, docLinks } = useKibana().services; +export const Header = () => { + const { docLinks } = useKibana().services; const links = docLinks?.links; - const userEditPermission = dataViews.getCanSaveSync(); return ( + + + + + ), + esqlLink: ( + + + + ), + }} + /> + +

    { id="indexPatternManagement.editIndexPattern.scriptedLabel" defaultMessage="Scripted fields can be used in visualizations and displayed in documents. However, they cannot be searched." /> -
    - - - - - ), - }} - />

    - - {userEditPermission && ( - - - - - - )}
    ); -}); +}; diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx index 1a8483db6c6aa..915316135cd6c 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx @@ -59,7 +59,7 @@ export class ScriptedFieldsTable extends Component< } fetchFields = async () => { - const fields = await (this.props.indexPattern.getScriptedFields() as ScriptedFieldItem[]); + const fields = this.props.indexPattern.getScriptedFields() as ScriptedFieldItem[]; const deprecatedLangsInUse = []; const deprecatedLangs = getDeprecatedScriptingLanguages(); @@ -67,7 +67,7 @@ export class ScriptedFieldsTable extends Component< for (const field of fields) { const lang = field.lang; - if (deprecatedLangs.includes(lang) || !supportedLangs.includes(lang)) { + if (lang && (deprecatedLangs.includes(lang) || !supportedLangs.includes(lang))) { deprecatedLangsInUse.push(lang); } } @@ -136,7 +136,7 @@ export class ScriptedFieldsTable extends Component< return ( <> -
    +
    diff --git a/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts b/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts index 31f12e80366cc..4f249425774f7 100644 --- a/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts +++ b/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts @@ -96,7 +96,11 @@ export function getTabs( 'data-test-subj': 'tab-indexedFields', }); - if (!isRollup(indexPattern.type) && scriptedFieldsEnabled) { + if ( + !isRollup(indexPattern.type) && + scriptedFieldsEnabled && + indexPattern.getScriptedFields().length > 0 + ) { tabs.push({ name: getTitle('scripted', filteredCount, totalCount), id: TAB_SCRIPTED_FIELDS, diff --git a/src/plugins/data_view_management/public/mocks.ts b/src/plugins/data_view_management/public/mocks.ts index 6abc53a64d3cf..dfc924ac5d49e 100644 --- a/src/plugins/data_view_management/public/mocks.ts +++ b/src/plugins/data_view_management/public/mocks.ts @@ -57,6 +57,7 @@ const docLinks = { indexPatterns: {}, scriptedFields: {}, runtimeFields: {}, + query: {}, } as any, }; diff --git a/src/plugins/data_views/server/deprecations/scripted_fields.ts b/src/plugins/data_views/server/deprecations/scripted_fields.ts index 5866216801ab6..a70bb29219dcd 100644 --- a/src/plugins/data_views/server/deprecations/scripted_fields.ts +++ b/src/plugins/data_views/server/deprecations/scripted_fields.ts @@ -7,85 +7,83 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { +import type { CoreSetup, DeprecationsDetails, GetDeprecationsContext, RegisterDeprecationsConfig, + SavedObjectsFindResult, } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; -import { DataViewAttributes } from '../../common'; +import type { DocLinks } from '@kbn/doc-links'; +import type { DeprecationDetailsMessage } from '@kbn/core-deprecations-common'; +import type { DataViewAttributes } from '../../common'; -type IndexPatternAttributesWithFields = Pick; +type DataViewAttributesWithFields = Pick; export const createScriptedFieldsDeprecationsConfig: ( core: CoreSetup ) => RegisterDeprecationsConfig = (core: CoreSetup) => ({ getDeprecations: async (context: GetDeprecationsContext): Promise => { - const finder = - context.savedObjectsClient.createPointInTimeFinder({ + const finder = context.savedObjectsClient.createPointInTimeFinder( + { type: 'index-pattern', perPage: 1000, - fields: ['title', 'fields'], + fields: ['name', 'title', 'fields'], namespaces: ['*'], - }); + } + ); + + const dataViewsWithScriptedFields: Array> = + []; - const indexPatternsWithScriptedFields: IndexPatternAttributesWithFields[] = []; for await (const response of finder.find()) { - indexPatternsWithScriptedFields.push( - ...response.saved_objects.map((so) => so.attributes).filter(hasScriptedField) + dataViewsWithScriptedFields.push( + ...response.saved_objects.filter((so) => hasScriptedField(so.attributes)) ); } - if (indexPatternsWithScriptedFields.length > 0) { - const PREVIEW_LIMIT = 3; - const indexPatternTitles = indexPatternsWithScriptedFields.map((ip) => ip.title); - - return [ - { - title: i18n.translate('dataViews.deprecations.scriptedFieldsTitle', { - defaultMessage: 'Found data views using scripted fields', - }), - message: i18n.translate('dataViews.deprecations.scriptedFieldsMessage', { - defaultMessage: `You have {numberOfIndexPatternsWithScriptedFields} data views ({titlesPreview}...) that use scripted fields. Scripted fields are deprecated and will be removed in future. Use runtime fields instead.`, - values: { - titlesPreview: indexPatternTitles.slice(0, PREVIEW_LIMIT).join('; '), - numberOfIndexPatternsWithScriptedFields: indexPatternsWithScriptedFields.length, - }, - }), - documentationUrl: - 'https://www.elastic.co/guide/en/elasticsearch/reference/7.x/runtime.html', // TODO: documentation service is not available serverside https://github.com/elastic/kibana/issues/95389 - level: 'warning', // warning because it is not set in stone WHEN we remove scripted fields, hence this deprecation is not a blocker for 8.0 upgrade - correctiveActions: { - manualSteps: [ - i18n.translate('dataViews.deprecations.scriptedFields.manualStepOneMessage', { - defaultMessage: 'Navigate to Stack Management > Kibana > Data Views.', - }), - i18n.translate('dataViews.deprecations.scriptedFields.manualStepTwoMessage', { - defaultMessage: - 'Update {numberOfIndexPatternsWithScriptedFields} data views that have scripted fields to use runtime fields instead. In most cases, to migrate existing scripts, you will need to change "return ;" to "emit();". Data views with at least one scripted field: {allTitles}', - values: { - allTitles: indexPatternTitles.join('; '), - numberOfIndexPatternsWithScriptedFields: indexPatternsWithScriptedFields.length, - }, - ignoreTag: true, - }), - ], - }, - }, - ]; - } else { + if (!dataViewsWithScriptedFields.length) { return []; } + + return [ + { + title: i18n.translate('dataViews.deprecations.scriptedFieldsTitle', { + defaultMessage: 'Found data views using scripted fields', + }), + message: buildMessage({ + dataViewsWithScriptedFields, + docLinks: core.docLinks.links, + }), + documentationUrl: core.docLinks.links.indexPatterns.migrateOffScriptedFields, + deprecationType: 'feature', + level: 'warning', // warning because it is not set in stone WHEN we remove scripted fields, hence this deprecation is not a blocker for 9.0 upgrade + correctiveActions: { + manualSteps: [ + i18n.translate('dataViews.deprecations.scriptedFields.manualStepOneMessage', { + defaultMessage: 'Navigate to Stack Management > Kibana > Data Views.', + }), + i18n.translate('dataViews.deprecations.scriptedFields.manualStepTwoMessage', { + defaultMessage: + 'Update data views that have scripted fields to use runtime fields instead. In most cases, you will only need to change "return ;" to "emit();".', + ignoreTag: true, + }), + i18n.translate('dataViews.deprecations.scriptedFields.manualStepThreeMessage', { + defaultMessage: + 'Alternatively, you can achieve similar functionality by computing values at query time using the Elasticsearch Query Language (ES|QL).', + }), + ], + }, + }, + ]; }, }); -export function hasScriptedField(indexPattern: IndexPatternAttributesWithFields) { - if (indexPattern.fields) { +export function hasScriptedField(dataView: DataViewAttributesWithFields) { + if (dataView.fields) { try { - return JSON.parse(indexPattern.fields).some( - (field: { scripted?: boolean }) => field?.scripted - ); + return JSON.parse(dataView.fields).some((field: { scripted?: boolean }) => field?.scripted); } catch (e) { return false; } @@ -93,3 +91,55 @@ export function hasScriptedField(indexPattern: IndexPatternAttributesWithFields) return false; } } + +const dataViewIdLabel = i18n.translate('dataViews.deprecations.scriptedFields.dataViewIdLabel', { + defaultMessage: 'ID', +}); + +const dataViewNameLabel = i18n.translate( + 'dataViews.deprecations.scriptedFields.dataViewNameLabel', + { + defaultMessage: 'Name', + } +); + +const dataViewSpacesLabel = i18n.translate( + 'dataViews.deprecations.scriptedFields.dataViewSpacesLabel', + { + defaultMessage: 'Spaces', + } +); + +const buildDataViewsListEntry = ( + so: SavedObjectsFindResult +) => `- **${dataViewIdLabel}:** ${so.id} + - **${dataViewNameLabel}:** ${ + so.attributes.name + ? `!{tooltip[${so.attributes.name}](${so.attributes.title})}` + : so.attributes.title +} + - **${dataViewSpacesLabel}:** ${so.namespaces?.join(', ')}`; + +const buildMessage = ({ + dataViewsWithScriptedFields, + docLinks, +}: { + dataViewsWithScriptedFields: Array>; + docLinks: DocLinks; +}): DeprecationDetailsMessage => ({ + type: 'markdown', + content: i18n.translate('dataViews.deprecations.scriptedFieldsMessage', { + defaultMessage: `You have {numberOfDataViewsWithScriptedFields} {numberOfDataViewsWithScriptedFields, plural, one {data view} other {data views}} containing scripted fields. Scripted fields are deprecated and will be removed in the future. + +The ability to create new scripted fields in the Data Views management page has been disabled in 9.0, and it is recommended to migrate to [runtime fields]({runtimeFieldsLink}) or the [Elasticsearch Query Language (ES|QL)]({esqlLink}) instead. + +The following is a list of all data views with scripted fields and their associated spaces: +{dataViewsList}`, + values: { + numberOfDataViewsWithScriptedFields: dataViewsWithScriptedFields.length, + runtimeFieldsLink: docLinks.indexPatterns.runtimeFields, + esqlLink: docLinks.query.queryESQL, + dataViewsList: dataViewsWithScriptedFields.map(buildDataViewsListEntry).join('\n'), + }, + }), +}); diff --git a/src/plugins/data_views/tsconfig.json b/src/plugins/data_views/tsconfig.json index 45992b3548f8e..a9d2a6ed7a6a0 100644 --- a/src/plugins/data_views/tsconfig.json +++ b/src/plugins/data_views/tsconfig.json @@ -37,6 +37,8 @@ "@kbn/core-http-browser", "@kbn/core-http-browser-internal", "@kbn/logging-mocks", + "@kbn/doc-links", + "@kbn/core-deprecations-common", ], "exclude": [ "target/**/*", diff --git a/test/api_integration/apis/data_views/deprecations/scripted_fields.ts b/test/api_integration/apis/data_views/deprecations/scripted_fields.ts index 083fabada4ec7..6f54a02f97b3a 100644 --- a/test/api_integration/apis/data_views/deprecations/scripted_fields.ts +++ b/test/api_integration/apis/data_views/deprecations/scripted_fields.ts @@ -10,7 +10,8 @@ import expect from '@kbn/expect'; import type { DeprecationsGetResponse } from '@kbn/core/server'; import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; -import { FtrProviderContext } from '../../../ftr_provider_context'; +import type { DeprecationDetailsMessage } from '@kbn/core-deprecations-common'; +import type { FtrProviderContext } from '../../../ftr_provider_context'; export default function ({ getService }: FtrProviderContext) { const supertest = getService('supertest'); @@ -75,7 +76,9 @@ export default function ({ getService }: FtrProviderContext) { ); expect(dataPluginDeprecations.length).to.be(1); - expect(dataPluginDeprecations[0].message).to.contain(title); + expect((dataPluginDeprecations[0].message as DeprecationDetailsMessage).content).to.contain( + title + ); }); }); } diff --git a/test/functional/apps/management/data_views/_handle_version_conflict.ts b/test/functional/apps/management/data_views/_handle_version_conflict.ts index 5b91aaa6a034c..b2f703350ac79 100644 --- a/test/functional/apps/management/data_views/_handle_version_conflict.ts +++ b/test/functional/apps/management/data_views/_handle_version_conflict.ts @@ -45,8 +45,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.settings.navigateTo(); await PageObjects.settings.clickKibanaIndexPatterns(); await PageObjects.settings.clickIndexPatternLogstash(); - await PageObjects.settings.clickScriptedFieldsTab(); - await PageObjects.settings.clickAddScriptedField(); + await PageObjects.settings.goToAddScriptedField(); await PageObjects.settings.setScriptedFieldName(scriptedFiledName); await PageObjects.settings.setScriptedFieldScript(`doc['bytes'].value`); const response = await es.update( diff --git a/test/functional/apps/management/data_views/_scripted_fields.ts b/test/functional/apps/management/data_views/_scripted_fields.ts index df51514425a24..12eba2f5acaf5 100644 --- a/test/functional/apps/management/data_views/_scripted_fields.ts +++ b/test/functional/apps/management/data_views/_scripted_fields.ts @@ -59,8 +59,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.settings.navigateTo(); await PageObjects.settings.clickKibanaIndexPatterns(); await PageObjects.settings.clickIndexPatternLogstash(); - await PageObjects.settings.clickScriptedFieldsTab(); - await PageObjects.settings.clickAddScriptedField(); + await PageObjects.settings.goToAddScriptedField(); await PageObjects.settings.setScriptedFieldName('doomedScriptedField'); await PageObjects.settings.setScriptedFieldScript(`i n v a l i d s c r i p t`); await PageObjects.settings.clickSaveScriptedField(); @@ -78,7 +77,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.settings.clickKibanaIndexPatterns(); await PageObjects.settings.clickIndexPatternLogstash(); const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount(), 10); - await PageObjects.settings.clickScriptedFieldsTab(); await log.debug('add scripted field'); const script = `1`; await PageObjects.settings.addScriptedField( @@ -112,7 +110,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.settings.clickKibanaIndexPatterns(); await PageObjects.settings.clickIndexPatternLogstash(); const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount(), 10); - await PageObjects.settings.clickScriptedFieldsTab(); await log.debug('add scripted field'); const script = `if (doc['machine.ram'].size() == 0) return -1; else return doc['machine.ram'].value / (1024 * 1024 * 1024); @@ -227,7 +224,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.settings.clickKibanaIndexPatterns(); await PageObjects.settings.clickIndexPatternLogstash(); const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount(), 10); - await PageObjects.settings.clickScriptedFieldsTab(); await log.debug('add scripted field'); await PageObjects.settings.addScriptedField( scriptedPainlessFieldName2, @@ -331,7 +327,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.settings.clickKibanaIndexPatterns(); await PageObjects.settings.clickIndexPatternLogstash(); const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount(), 10); - await PageObjects.settings.clickScriptedFieldsTab(); await log.debug('add scripted field'); await PageObjects.settings.addScriptedField( scriptedPainlessFieldName2, @@ -428,7 +423,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.settings.clickKibanaIndexPatterns(); await PageObjects.settings.clickIndexPatternLogstash(); const startingCount = parseInt(await PageObjects.settings.getScriptedFieldsTabCount(), 10); - await PageObjects.settings.clickScriptedFieldsTab(); await log.debug('add scripted field'); await PageObjects.settings.addScriptedField( scriptedPainlessFieldName2, diff --git a/test/functional/apps/management/data_views/_scripted_fields_preview.ts b/test/functional/apps/management/data_views/_scripted_fields_preview.ts index 705bdc5f6179b..51d025d99f8e1 100644 --- a/test/functional/apps/management/data_views/_scripted_fields_preview.ts +++ b/test/functional/apps/management/data_views/_scripted_fields_preview.ts @@ -33,8 +33,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.settings.navigateTo(); await PageObjects.settings.clickKibanaIndexPatterns(); await PageObjects.settings.clickIndexPatternLogstash(); - await PageObjects.settings.clickScriptedFieldsTab(); - await PageObjects.settings.clickAddScriptedField(); + await PageObjects.settings.goToAddScriptedField(); await PageObjects.settings.setScriptedFieldName(SCRIPTED_FIELD_NAME); }); diff --git a/test/functional/page_objects/settings_page.ts b/test/functional/page_objects/settings_page.ts index 2d2f50fc9f1f1..dcb38a8cf3e7c 100644 --- a/test/functional/page_objects/settings_page.ts +++ b/test/functional/page_objects/settings_page.ts @@ -263,10 +263,12 @@ export class SettingsPageObject extends FtrService { } async getScriptedFieldsTabCount() { - return await this.retry.try(async () => { + try { const text = await this.testSubjects.getVisibleText('tab-scriptedFields'); - return text.split(' ')[2].replace(/\((.*)\)/, '$1'); - }); + return text.split(' ')[2].replace(/\((.*)\)/, '$1') || '0'; + } catch (e) { + return '0'; + } } async getRelationshipsTabCount() { @@ -727,7 +729,7 @@ export class SettingsPageObject extends FtrService { popularity: string, script: string ) { - await this.clickAddScriptedField(); + await this.goToAddScriptedField(); await this.setScriptedFieldName(name); if (language) await this.setScriptedFieldLanguage(language); if (type) await this.setScriptedFieldType(type); @@ -896,9 +898,12 @@ export class SettingsPageObject extends FtrService { await this.monacoEditor.setCodeEditorValue(script); } - async clickAddScriptedField() { - this.log.debug('click Add Scripted Field'); - await this.testSubjects.click('addScriptedFieldLink'); + async goToAddScriptedField() { + this.log.debug('go to Add Scripted Field url'); + const url = await this.browser.getCurrentUrl(); + const newUrl = url.split('#')[0]; + await this.browser.get(newUrl + '/create-field/'); + await this.header.waitUntilLoadingHasFinished(); } async clickSaveScriptedField() { diff --git a/test/tsconfig.json b/test/tsconfig.json index 1d8c301c44a2b..d7e0de39d5e5e 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -77,5 +77,6 @@ "@kbn/default-nav-devtools", "@kbn/core-saved-objects-import-export-server-internal", "@kbn/management-settings-ids", + "@kbn/core-deprecations-common", ] } diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 1f71da77a2a29..4041aff5b6039 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -2476,9 +2476,6 @@ "dataViews.contentManagementType": "Vue de données", "dataViews.dataStreamLabel": "Flux de données", "dataViews.deprecations.scriptedFields.manualStepOneMessage": "Accédez à Gestion de la Suite > Kibana > Vues de données.", - "dataViews.deprecations.scriptedFields.manualStepTwoMessage": "Mettez à jour les vues de données {numberOfIndexPatternsWithScriptedFields} qui ont des champs scriptés pour qu’elles utilisent des champs d'exécution. Dans la plupart des cas, pour migrer des scripts existants, vous devrez remplacer \"return ;\" par \"emit();\". Vues de données avec au moins un champ scripté : {allTitles}", - "dataViews.deprecations.scriptedFieldsMessage": "Vous avez {numberOfIndexPatternsWithScriptedFields} vues de données ({titlesPreview}...) qui utilisent des champs scriptés. Les champs scriptés sont déclassés et seront supprimés à l'avenir. Utilisez plutôt des champs d'exécution.", - "dataViews.deprecations.scriptedFieldsTitle": "Vues de données utilisant des champs scriptés trouvées", "dataViews.fetchFieldErrorTitle": "Erreur lors de l'extraction des champs pour la vue de données {title} (ID : {id})", "dataViews.frozenLabel": "Frozen", "dataViews.functions.dataViewLoad.help": "Charge une vue de données", @@ -5032,7 +5029,6 @@ "indexPatternManagement.editIndexPattern.couldNotLoadMessage": "La vue de données ayant l'ID {objectId} n'a pas pu être chargée. Essayez d'en créer une nouvelle.", "indexPatternManagement.editIndexPattern.couldNotLoadTitle": "Impossible de charger la vue de données", "indexPatternManagement.editIndexPattern.deleteButton": "Supprimer", - "indexPatternManagement.editIndexPattern.deprecation": "Les champs scriptés sont déclassés. Utilisez {runtimeDocs} à la place.", "indexPatternManagement.editIndexPattern.fields.addFieldButtonLabel": "Ajouter un champ", "indexPatternManagement.editIndexPattern.fields.conflictModal.closeBtn": "Fermer", "indexPatternManagement.editIndexPattern.fields.conflictModal.description": "Le type de champ {fieldName} change entre les index et peut ne pas être disponible pour la recherche, les visualisations et d'autres analyses.", @@ -5080,12 +5076,9 @@ "indexPatternManagement.editIndexPattern.list.histogramSummary": "{aggName} (intervalle : {interval})", "indexPatternManagement.editIndexPattern.mappingConflictHeader": "Conflit de mapping", "indexPatternManagement.editIndexPattern.mappingConflictLabel": "{conflictFieldsLength, plural, one {Un champ est défini} other {# champs sont définis}} avec plusieurs types (chaîne, entier, etc.) dans les différents index qui correspondent à ce modèle. Vous pourrez peut-être utiliser ce ou ces champs en conflit dans certaines parties de Kibana, mais ils ne seront pas disponibles pour les fonctions qui nécessitent que Kibana connaisse leur type. Pour corriger ce problème, vous devrez réindexer vos données.", - "indexPatternManagement.editIndexPattern.scripted.addFieldButton": "Ajouter un champ scripté", "indexPatternManagement.editIndexPattern.scripted.deleteField.cancelButton": "Annuler", "indexPatternManagement.editIndexPattern.scripted.deleteField.deleteButton": "Supprimer", "indexPatternManagement.editIndexPattern.scripted.deleteFieldLabel": "Supprimer le champ scripté \"{fieldName}\" ?", - "indexPatternManagement.editIndexPattern.scripted.deprecationLangHeader": "Langages déclassés en cours d'utilisation", - "indexPatternManagement.editIndexPattern.scripted.deprecationLangLabel.deprecationLangDetail": "Les langages déclassés suivants sont en cours d'utilisation : {deprecatedLangsInUse}. La prise en charge de ces langages sera supprimée dans la prochaine version majeure de Kibana et d'Elasticsearch. Convertissez vos champs scriptés en {link} pour éviter tout problème.", "indexPatternManagement.editIndexPattern.scripted.deprecationLangLabel.painlessDescription": "Painless", "indexPatternManagement.editIndexPattern.scripted.newFieldPlaceholder": "Nouveau champ scripté", "indexPatternManagement.editIndexPattern.scripted.table.deleteDescription": "Supprimer ce champ", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index e013fa2ee7fef..bc947c4e7f7df 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2475,9 +2475,6 @@ "dataViews.contentManagementType": "データビュー", "dataViews.dataStreamLabel": "データストリーム", "dataViews.deprecations.scriptedFields.manualStepOneMessage": "[スタック管理]>[Kibana]>[データビュー]に移動します。", - "dataViews.deprecations.scriptedFields.manualStepTwoMessage": "ランタイムフィールドを使用するには、スクリプト化されたフィールドがある{numberOfIndexPatternsWithScriptedFields}データビューを更新します。ほとんどの場合、既存のスクリプトを移行するには、「return ;」から「emit();」に変更する必要があります。1つ以上のスクリプト化されたフィールドがあるデータビュー:{allTitles}", - "dataViews.deprecations.scriptedFieldsMessage": "スクリプト化されたフィールドを使用する{numberOfIndexPatternsWithScriptedFields}データビュー({titlesPreview}...)があります。スクリプト化されたフィールドは廃止予定であり、今後は削除されます。ランタイムフィールドを使用してください。", - "dataViews.deprecations.scriptedFieldsTitle": "スクリプト化されたフィールドを使用しているデータビューが見つかりました。", "dataViews.fetchFieldErrorTitle": "データビューのフィールド取得中にエラーが発生 {title}(ID:{id})", "dataViews.frozenLabel": "凍結", "dataViews.functions.dataViewLoad.help": "データビューを読み込みます", @@ -5027,7 +5024,6 @@ "indexPatternManagement.editIndexPattern.couldNotLoadMessage": "ID {objectId}のデータビューを読み込めませんでした。新規作成してください。", "indexPatternManagement.editIndexPattern.couldNotLoadTitle": "データビューを読み込めません", "indexPatternManagement.editIndexPattern.deleteButton": "削除", - "indexPatternManagement.editIndexPattern.deprecation": "スクリプトフィールドは廃止予定です。代わりに{runtimeDocs}を使用してください。", "indexPatternManagement.editIndexPattern.fields.addFieldButtonLabel": "フィールドの追加", "indexPatternManagement.editIndexPattern.fields.conflictModal.closeBtn": "閉じる", "indexPatternManagement.editIndexPattern.fields.conflictModal.description": "{fieldName}フィールドの型がインデックス全体で変更され、検索、視覚化、他の分析で使用できない可能性があります。", @@ -5075,12 +5071,9 @@ "indexPatternManagement.editIndexPattern.list.histogramSummary": "{aggName} (間隔:{interval})", "indexPatternManagement.editIndexPattern.mappingConflictHeader": "マッピングの矛盾", "indexPatternManagement.editIndexPattern.mappingConflictLabel": "{conflictFieldsLength, plural, other {# 個のフィールド}}が、このパターンと一致するインデックスの間で異なるタイプ(文字列、整数など)に定義されています。これらの矛盾したフィールドはKibanaの一部で使用できますが、Kibanaがタイプを把握しなければならない機能には使用できません。この問題を修正するにはデータのレンダリングが必要です。", - "indexPatternManagement.editIndexPattern.scripted.addFieldButton": "スクリプトフィールドを追加", "indexPatternManagement.editIndexPattern.scripted.deleteField.cancelButton": "キャンセル", "indexPatternManagement.editIndexPattern.scripted.deleteField.deleteButton": "削除", "indexPatternManagement.editIndexPattern.scripted.deleteFieldLabel": "スクリプトフィールド''{fieldName}''を削除しますか?", - "indexPatternManagement.editIndexPattern.scripted.deprecationLangHeader": "廃止された言語が使用されています", - "indexPatternManagement.editIndexPattern.scripted.deprecationLangLabel.deprecationLangDetail": "次の廃止された言語が使用されています。{deprecatedLangsInUse}これらの言語は、KibanaとElasticsearchの次のメジャーバージョンでサポートされなくなります。問題を避けるため、スクリプトフィールドを{link}に変換してください。", "indexPatternManagement.editIndexPattern.scripted.deprecationLangLabel.painlessDescription": "Painless", "indexPatternManagement.editIndexPattern.scripted.newFieldPlaceholder": "新規スクリプトフィールド", "indexPatternManagement.editIndexPattern.scripted.table.deleteDescription": "このフィールドを削除します", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 1f97f21c8fafa..aa2ffa15132bc 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2466,9 +2466,6 @@ "dataViews.contentManagementType": "数据视图", "dataViews.dataStreamLabel": "数据流", "dataViews.deprecations.scriptedFields.manualStepOneMessage": "导航到'堆栈管理'>'Kibana'>'数据视图'。", - "dataViews.deprecations.scriptedFields.manualStepTwoMessage": "更新 {numberOfIndexPatternsWithScriptedFields} 个具有脚本字段的数据视图以改为使用运行时字段。多数情况下,要迁移现有脚本,您需要将'return ;'更改为'emit();'。至少有一个脚本字段的数据视图:{allTitles}", - "dataViews.deprecations.scriptedFieldsMessage": "您具有 {numberOfIndexPatternsWithScriptedFields} 个使用脚本字段的数据视图 ({titlesPreview}...)。脚本字段已过时,将在未来移除。请改为使用运行时脚本。", - "dataViews.deprecations.scriptedFieldsTitle": "找到使用脚本字段的数据视图", "dataViews.fetchFieldErrorTitle": "提取数据视图 {title}(ID:{id})的字段时出错", "dataViews.frozenLabel": "已冻结", "dataViews.functions.dataViewLoad.help": "加载数据视图", @@ -4993,7 +4990,6 @@ "indexPatternManagement.editIndexPattern.couldNotLoadMessage": "无法加载 ID 为 {objectId} 的数据视图。尝试创建新视图。", "indexPatternManagement.editIndexPattern.couldNotLoadTitle": "无法加载数据视图", "indexPatternManagement.editIndexPattern.deleteButton": "删除", - "indexPatternManagement.editIndexPattern.deprecation": "脚本字段已弃用。改用 {runtimeDocs}。", "indexPatternManagement.editIndexPattern.fields.addFieldButtonLabel": "添加字段", "indexPatternManagement.editIndexPattern.fields.conflictModal.closeBtn": "关闭", "indexPatternManagement.editIndexPattern.fields.conflictModal.description": "{fieldName} 字段的类型在不同索引中会有所不同,并且可能无法用于搜索、可视化和其他分析。", @@ -5041,11 +5037,8 @@ "indexPatternManagement.editIndexPattern.list.histogramSummary": "{aggName}(时间间隔:{interval})", "indexPatternManagement.editIndexPattern.mappingConflictHeader": "映射冲突", "indexPatternManagement.editIndexPattern.mappingConflictLabel": "{conflictFieldsLength, plural, one {一个字段} other {# 个字段}}已在匹配此模式的各个索引中定义为多个类型(字符串、整数等)。您也许仍能够在 Kibana 的各个部分中使用这些冲突字段,但它们将无法用于需要 Kibana 知道其类型的函数。要解决此问题,需要重新索引您的数据。", - "indexPatternManagement.editIndexPattern.scripted.addFieldButton": "添加脚本字段", "indexPatternManagement.editIndexPattern.scripted.deleteField.cancelButton": "取消", "indexPatternManagement.editIndexPattern.scripted.deleteField.deleteButton": "删除", - "indexPatternManagement.editIndexPattern.scripted.deprecationLangHeader": "在用的过时语言", - "indexPatternManagement.editIndexPattern.scripted.deprecationLangLabel.deprecationLangDetail": "以下过时的语言仍在使用:{deprecatedLangsInUse}。Kibana 和 Elasticsearch 的下一主要版本将移除对这些语言的支持。将您的脚本字段转换成 {link} 以避免问题。", "indexPatternManagement.editIndexPattern.scripted.deprecationLangLabel.painlessDescription": "Painless", "indexPatternManagement.editIndexPattern.scripted.newFieldPlaceholder": "新建脚本字段", "indexPatternManagement.editIndexPattern.scripted.table.deleteDescription": "删除此字段", diff --git a/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/deprecation_details_flyout.tsx b/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/deprecation_details_flyout.tsx index beb4c7c0c678c..7c03e5e770ade 100644 --- a/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/deprecation_details_flyout.tsx +++ b/x-pack/plugins/upgrade_assistant/public/application/components/kibana_deprecations/deprecation_details_flyout.tsx @@ -22,6 +22,9 @@ import { EuiText, EuiCallOut, EuiSpacer, + EuiMarkdownFormat, + getDefaultEuiMarkdownPlugins, + useEuiFontSize, } from '@elastic/eui'; import { uiMetricService, UIM_KIBANA_QUICK_RESOLVE_CLICK } from '../../lib/ui_metric'; @@ -103,6 +106,12 @@ const i18nTexts = { ), }; +const { processingPlugins } = getDefaultEuiMarkdownPlugins({ + processingConfig: { + linkProps: { target: '_blank' }, + }, +}); + interface AvailableCorrectiveActions { api: boolean; manual: boolean; @@ -158,6 +167,8 @@ export const DeprecationDetailsFlyout = ({ resolveDeprecation(deprecation); }, [deprecation, resolveDeprecation]); + const { lineHeight: lineHeightMedium } = useEuiFontSize('m'); + return ( <> @@ -185,11 +196,30 @@ export const DeprecationDetailsFlyout = ({ )} - {messages.map((m, i) => ( -

    - {m} -

    - ))} + {messages.map((currentMessage, i) => { + if (typeof currentMessage === 'object' && currentMessage.type === 'markdown') { + return ( + + {currentMessage.content} + + ); + } + + const textContent = + typeof currentMessage === 'string' ? currentMessage : currentMessage.content; + + return ( +

    + {textContent} +

    + ); + })} {documentationUrl && (

    diff --git a/x-pack/test/functional/apps/discover/async_scripted_fields.ts b/x-pack/test/functional/apps/discover/async_scripted_fields.ts index 454f99f231435..0795d154272c0 100644 --- a/x-pack/test/functional/apps/discover/async_scripted_fields.ts +++ b/x-pack/test/functional/apps/discover/async_scripted_fields.ts @@ -58,7 +58,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await settings.navigateTo(); await settings.clickKibanaIndexPatterns(); await settings.createIndexPattern('logsta'); - await settings.clickScriptedFieldsTab(); await log.debug('add scripted field'); await settings.addScriptedField( 'sharedFail', @@ -114,7 +113,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await settings.clickKibanaIndexPatterns(); await settings.clickIndexPatternLogstash(); const startingCount = parseInt(await settings.getScriptedFieldsTabCount(), 10); - await settings.clickScriptedFieldsTab(); await log.debug('add scripted field'); await settings.addScriptedField( 'goodScript', From 8abb976bbb8e0e397afec77cbfec64d129bedbe3 Mon Sep 17 00:00:00 2001 From: Jiawei Wu <74562234+JiaweiWu@users.noreply.github.com> Date: Thu, 5 Dec 2024 19:49:06 -0800 Subject: [PATCH 111/141] [Response Ops] Fix Task Manager Schedule Flaky Test (#201732) ## Summary Issue: https://github.com/elastic/kibana/issues/198664 Fixes task manager schedule flaky test according to guidance posted here: https://github.com/elastic/kibana/issues/161882 ### 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: Elastic Machine --- .../es_archives/task_manager_tasks/data.json | 54 +++----- .../task_manager_tasks/mappings.json | 121 ------------------ .../task_management_scheduled_at.ts | 3 +- 3 files changed, 19 insertions(+), 159 deletions(-) delete mode 100644 x-pack/test/functional/es_archives/task_manager_tasks/mappings.json diff --git a/x-pack/test/functional/es_archives/task_manager_tasks/data.json b/x-pack/test/functional/es_archives/task_manager_tasks/data.json index eb0db58dfb385..b84cec27c1fab 100644 --- a/x-pack/test/functional/es_archives/task_manager_tasks/data.json +++ b/x-pack/test/functional/es_archives/task_manager_tasks/data.json @@ -2,11 +2,9 @@ "type": "doc", "value": { "id": "task:be7e1250-3322-11eb-94c1-db6995e84f6a", - "index": ".kibana_task_manager_1", + "index": ".kibana_task_manager", "source": { - "migrationVersion": { - "task": "7.16.0" - }, + "typeMigrationVersion": "7.16.0", "references": [ ], "task": { @@ -33,11 +31,9 @@ "type": "doc", "value": { "id": "task:be7e1250-3322-11eb-94c1-db6995e8389f", - "index": ".kibana_task_manager_1", + "index": ".kibana_task_manager", "source": { - "migrationVersion": { - "task": "7.16.0" - }, + "typeMigrationVersion": "7.16.0", "references": [ ], "task": { @@ -64,11 +60,9 @@ "type": "doc", "value": { "id": "task:d33d7590-8377-11ec-8c11-2dfe94229b95", - "index": ".kibana_task_manager_1", + "index": ".kibana_task_manager", "source": { - "migrationVersion": { - "task": "7.6.0" - }, + "typeMigrationVersion": "7.6.0", "task": { "taskType": "alerting:xpack.uptime.alerts.monitorStatus", "retryAt": null, @@ -95,11 +89,9 @@ "type": "doc", "value": { "id": "task:ce7e1250-3322-11eb-94c1-db6995e84f6d", - "index": ".kibana_task_manager_1", + "index": ".kibana_task_manager", "source": { - "migrationVersion": { - "task": "7.16.0" - }, + "typeMigrationVersion": "7.16.0", "references": [ ], "task": { @@ -126,11 +118,9 @@ "type": "doc", "value": { "id": "task:fe7e1250-3322-11eb-94c1-db6395e84f6e", - "index": ".kibana_task_manager_1", + "index": ".kibana_task_manager", "source": { - "migrationVersion": { - "task": "7.16.0" - }, + "typeMigrationVersion": "7.16.0", "references": [ ], "task": { @@ -157,11 +147,9 @@ "type": "doc", "value": { "id": "task:ge7e1250-3322-11eb-94c1-db6395e84f6g", - "index": ".kibana_task_manager_1", + "index": ".kibana_task_manager", "source": { - "migrationVersion": { - "task": "7.16.0" - }, + "typeMigrationVersion": "7.16.0", "references": [ ], "task": { @@ -188,11 +176,9 @@ "type": "doc", "value": { "id": "task:ie7e1250-3322-11eb-94c1-db6395e84f6i", - "index": ".kibana_task_manager_1", + "index": ".kibana_task_manager", "source": { - "migrationVersion": { - "task": "7.16.0" - }, + "typeMigrationVersion": "7.16.0", "references": [ ], "task": { @@ -219,11 +205,9 @@ "type": "doc", "value": { "id": "task:d0487a50-c7f1-11ed-aefe-691acd8d4e25", - "index": ".kibana_task_manager_1", + "index": ".kibana_task_manager", "source": { - "migrationVersion": { - "task": "8.5.0" - }, + "typeMigrationVersion": "8.5.0", "task": { "retryAt": null, "runAt": "2023-03-21T14:08:29.777Z", @@ -255,11 +239,9 @@ "type": "doc", "value": { "id": "task:cf0ced10-c7f1-11ed-aefe-691acd8d4e25", - "index": ".kibana_task_manager_1", + "index": ".kibana_task_manager", "source": { - "migrationVersion": { - "task": "8.5.0" - }, + "typeMigrationVersion": "8.5.0", "task": { "retryAt": null, "runAt": "2023-03-21T14:08:29.777Z", diff --git a/x-pack/test/functional/es_archives/task_manager_tasks/mappings.json b/x-pack/test/functional/es_archives/task_manager_tasks/mappings.json deleted file mode 100644 index fe502959e9ec6..0000000000000 --- a/x-pack/test/functional/es_archives/task_manager_tasks/mappings.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "type": "index", - "value": { - "aliases": { - ".kibana_task_manager": { - } - }, - "index": ".kibana_task_manager_1", - "mappings": { - "_meta": { - "migrationMappingPropertyHashes": { - "migrationVersion": "4a1746014a75ade3a714e1db5763276f", - "namespace": "2f4316de49999235636386fe51dc06c1", - "namespaces": "2f4316de49999235636386fe51dc06c1", - "originId": "2f4316de49999235636386fe51dc06c1", - "references": "7997cf5a56cc02bdc9c93361bde732b0", - "task": "235412e52d09e7165fac8a67a43ad6b4", - "type": "2f4316de49999235636386fe51dc06c1", - "updated_at": "00da57df13e94e9d98437d13ace4bfe0" - } - }, - "dynamic": "strict", - "properties": { - "migrationVersion": { - "dynamic": "true", - "properties": { - "task": { - "fields": { - "keyword": { - "ignore_above": 256, - "type": "keyword" - } - }, - "type": "text" - } - } - }, - "references": { - "properties": { - "id": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "type": { - "type": "keyword" - } - }, - "type": "nested" - }, - "task": { - "properties": { - "taskType": { - "type": "keyword" - }, - "scheduledAt": { - "type": "date" - }, - "runAt": { - "type": "date" - }, - "startedAt": { - "type": "date" - }, - "retryAt": { - "type": "date" - }, - "enabled": { - "type": "boolean" - }, - "schedule": { - "properties": { - "interval": { - "type": "keyword" - } - } - }, - "attempts": { - "type": "integer" - }, - "status": { - "type": "keyword" - }, - "traceparent": { - "type": "text" - }, - "params": { - "type": "text" - }, - "state": { - "type": "text" - }, - "user": { - "type": "keyword" - }, - "scope": { - "type": "keyword" - }, - "ownerId": { - "type": "keyword" - } - } - }, - "type": { - "type": "keyword" - }, - "updated_at": { - "type": "date" - } - } - }, - "settings": { - "index": { - "auto_expand_replicas": "0-1", - "number_of_replicas": "0", - "number_of_shards": "1" - } - } - } -} diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management_scheduled_at.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management_scheduled_at.ts index 1a393b126dfda..a70225035d03c 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management_scheduled_at.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/task_management_scheduled_at.ts @@ -14,8 +14,7 @@ export default function createTaskManagementScheduledAtTests({ getService }: Ftr const esArchiver = getService('esArchiver'); const retry = getService('retry'); - // FLAKY: https://github.com/elastic/kibana/issues/198664 - describe.skip('task management scheduled at', () => { + describe('task management scheduled at', () => { before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/task_manager_tasks'); }); From ac8a81d02f57cf96a3d03ef48d3d183d6d2c5f58 Mon Sep 17 00:00:00 2001 From: Vadim Kibana <82822460+vadimkibana@users.noreply.github.com> Date: Fri, 6 Dec 2024 08:44:23 +0100 Subject: [PATCH 112/141] [ES|QL] `JOIN` command Traversal API and prety-printing support (#202750) ## Summary Partially addresses https://github.com/elastic/kibana/issues/200858 - Add support for the new `JOIN` command and `AS` expression in Traversal API: `Walker` and `Visitor` - Adds support for the new `JOIN`command and `AS` expression in the pretty-printer. - Fixes some parser bugs related to the `JOIN` command. ### 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 --- .../src/parser/__tests__/comments.test.ts | 113 +++++++++++++++++ .../src/parser/__tests__/join.test.ts | 30 ++++- packages/kbn-esql-ast/src/parser/factories.ts | 21 ++++ .../kbn-esql-ast/src/parser/factories/join.ts | 20 ++- .../basic_pretty_printer.comments.test.ts | 14 ++- .../__tests__/basic_pretty_printer.test.ts | 34 +++++ .../wrapping_pretty_printer.comments.test.ts | 43 +++++++ .../__tests__/wrapping_pretty_printer.test.ts | 23 +++- .../src/pretty_print/basic_pretty_printer.ts | 17 ++- .../pretty_print/wrapping_pretty_printer.ts | 20 ++- packages/kbn-esql-ast/src/types.ts | 10 +- .../src/visitor/__tests__/commands.test.ts | 117 ++++++++++++++++++ .../src/visitor/__tests__/expressions.test.ts | 22 ++++ packages/kbn-esql-ast/src/visitor/contexts.ts | 15 ++- .../src/visitor/global_visitor_context.ts | 28 +++++ packages/kbn-esql-ast/src/visitor/types.ts | 20 ++- packages/kbn-esql-ast/src/walker/helpers.ts | 39 +++++- .../kbn-esql-ast/src/walker/walker.test.ts | 49 ++++++++ 18 files changed, 607 insertions(+), 28 deletions(-) create mode 100644 packages/kbn-esql-ast/src/visitor/__tests__/commands.test.ts diff --git a/packages/kbn-esql-ast/src/parser/__tests__/comments.test.ts b/packages/kbn-esql-ast/src/parser/__tests__/comments.test.ts index dedc99ba322ec..73b022457d2f6 100644 --- a/packages/kbn-esql-ast/src/parser/__tests__/comments.test.ts +++ b/packages/kbn-esql-ast/src/parser/__tests__/comments.test.ts @@ -8,6 +8,7 @@ */ import { parse } from '..'; +import { Walker } from '../../walker'; describe('Comments', () => { describe('can attach "top" comment(s)', () => { @@ -442,6 +443,35 @@ FROM index`; ], }); }); + + it('to an identifier', () => { + const text = `FROM index | LEFT JOIN + // comment + abc + ON a = b`; + const { root } = parse(text, { withFormatting: true }); + + expect(root.commands[1]).toMatchObject({ + type: 'command', + name: 'join', + args: [ + { + type: 'identifier', + name: 'abc', + formatting: { + top: [ + { + type: 'comment', + subtype: 'single-line', + text: ' comment', + }, + ], + }, + }, + {}, + ], + }); + }); }); describe('can attach "left" comment(s)', () => { @@ -549,6 +579,34 @@ FROM index`; }, ]); }); + + it('to an identifier', () => { + const text = `FROM index | LEFT JOIN + /* left */ abc + ON a = b`; + const { root } = parse(text, { withFormatting: true }); + + expect(root.commands[1]).toMatchObject({ + type: 'command', + name: 'join', + args: [ + { + type: 'identifier', + name: 'abc', + formatting: { + left: [ + { + type: 'comment', + subtype: 'multi-line', + text: ' left ', + }, + ], + }, + }, + {}, + ], + }); + }); }); describe('can attach "right" comment(s)', () => { @@ -776,6 +834,61 @@ FROM index`; ], }); }); + + it('to an identifier', () => { + const text = `FROM index | LEFT JOIN + abc /* right */ // right 2 + ON a = b`; + const { root } = parse(text, { withFormatting: true }); + + expect(root.commands[1]).toMatchObject({ + type: 'command', + name: 'join', + args: [ + { + type: 'identifier', + name: 'abc', + formatting: { + right: [ + { + type: 'comment', + subtype: 'multi-line', + text: ' right ', + }, + ], + rightSingleLine: { + type: 'comment', + subtype: 'single-line', + text: ' right 2', + }, + }, + }, + {}, + ], + }); + }); + + it('to a column inside ON option', () => { + const text = `FROM index | LEFT JOIN + abc + ON a /* right */ = b`; + const { root } = parse(text, { withFormatting: true }); + const a = Walker.match(root, { type: 'column', name: 'a' }); + + expect(a).toMatchObject({ + type: 'column', + name: 'a', + formatting: { + right: [ + { + type: 'comment', + subtype: 'multi-line', + text: ' right ', + }, + ], + }, + }); + }); }); describe('can attach "right end" comments', () => { diff --git a/packages/kbn-esql-ast/src/parser/__tests__/join.test.ts b/packages/kbn-esql-ast/src/parser/__tests__/join.test.ts index 5784e0c71cb86..baeee1aeac446 100644 --- a/packages/kbn-esql-ast/src/parser/__tests__/join.test.ts +++ b/packages/kbn-esql-ast/src/parser/__tests__/join.test.ts @@ -184,19 +184,41 @@ describe(' JOIN command', () => { const node2 = Walker.match(query.ast, { type: 'identifier', name: 'alias' }); const node3 = Walker.match(query.ast, { type: 'column', name: 'on_1' }); const node4 = Walker.match(query.ast, { type: 'column', name: 'on_2' }); + const node5 = Walker.match(query.ast, { type: 'function', name: 'as' }); expect(query.src.slice(node1?.location.min, node1?.location.max! + 1)).toBe('index'); expect(query.src.slice(node2?.location.min, node2?.location.max! + 1)).toBe('alias'); expect(query.src.slice(node3?.location.min, node3?.location.max! + 1)).toBe('on_1'); expect(query.src.slice(node4?.location.min, node4?.location.max! + 1)).toBe('on_2'); + expect(query.src.slice(node5?.location.min, node5?.location.max! + 1)).toBe('index AS alias'); + }); + + it('correctly extracts JOIN command position', () => { + const text = `FROM employees | LOOKUP JOIN index AS alias ON on_1, on_2 | LIMIT 1`; + const query = EsqlQuery.fromSrc(text); + const join = Walker.match(query.ast, { type: 'command', name: 'join' }); + + expect(query.src.slice(join?.location.min, join?.location.max! + 1)).toBe( + 'LOOKUP JOIN index AS alias ON on_1, on_2' + ); + }); + + it('correctly extracts ON option position', () => { + const text = `FROM employees | LOOKUP JOIN index AS alias ON on_1, on_2 | LIMIT 1`; + const query = EsqlQuery.fromSrc(text); + const on = Walker.match(query.ast, { type: 'option', name: 'on' }); + + expect(query.src.slice(on?.location.min, on?.location.max! + 1)).toBe('ON on_1, on_2'); }); }); describe('incorrectly formatted', () => { - const text = `FROM employees | LOOKUP JOIN index AAS alias ON on_1, on_2 | LIMIT 1`; - const query = EsqlQuery.fromSrc(text); + it('throws error on invalid "AS" keyword', () => { + const text = `FROM employees | LOOKUP JOIN index AAS alias ON on_1, on_2 | LIMIT 1`; + const query = EsqlQuery.fromSrc(text); - expect(query.errors.length > 0).toBe(true); - expect(query.errors[0].message.includes('AAS')).toBe(true); + expect(query.errors.length > 0).toBe(true); + expect(query.errors[0].message.includes('AAS')).toBe(true); + }); }); }); diff --git a/packages/kbn-esql-ast/src/parser/factories.ts b/packages/kbn-esql-ast/src/parser/factories.ts index 311dcced8a617..388469e82ab99 100644 --- a/packages/kbn-esql-ast/src/parser/factories.ts +++ b/packages/kbn-esql-ast/src/parser/factories.ts @@ -55,6 +55,8 @@ import type { InlineCastingType, ESQLFunctionCallExpression, ESQLIdentifier, + ESQLBinaryExpression, + BinaryExpressionOperator, } from '../types'; import { parseIdentifier, getPosition } from './helpers'; import { Builder, type AstNodeParserFields } from '../builder'; @@ -240,6 +242,25 @@ export const createFunctionCall = (ctx: FunctionContext): ESQLFunctionCallExpres return node; }; +export const createBinaryExpression = ( + operator: BinaryExpressionOperator, + ctx: ParserRuleContext, + args: ESQLBinaryExpression['args'] +): ESQLBinaryExpression => { + const node = Builder.expression.func.binary( + operator, + args, + {}, + { + text: ctx.getText(), + location: getPosition(ctx.start, ctx.stop), + incomplete: Boolean(ctx.exception), + } + ) as ESQLBinaryExpression; + + return node; +}; + export const createIdentifierOrParam = (ctx: IdentifierOrParameterContext) => { const identifier = ctx.identifier(); if (identifier) { diff --git a/packages/kbn-esql-ast/src/parser/factories/join.ts b/packages/kbn-esql-ast/src/parser/factories/join.ts index 400313aa39045..9ff5083ac5e28 100644 --- a/packages/kbn-esql-ast/src/parser/factories/join.ts +++ b/packages/kbn-esql-ast/src/parser/factories/join.ts @@ -8,9 +8,13 @@ */ import { JoinCommandContext, JoinTargetContext } from '../../antlr/esql_parser'; -import { Builder } from '../../builder'; import { ESQLAstItem, ESQLBinaryExpression, ESQLCommand, ESQLIdentifier } from '../../types'; -import { createCommand, createIdentifier } from '../factories'; +import { + createBinaryExpression, + createCommand, + createIdentifier, + createOption, +} from '../factories'; import { visitValueExpression } from '../walkers'; const createNodeFromJoinTarget = ( @@ -24,7 +28,7 @@ const createNodeFromJoinTarget = ( } const alias = createIdentifier(aliasCtx); - const renameExpression = Builder.expression.func.binary('as', [ + const renameExpression = createBinaryExpression('as', ctx, [ index, alias, ]) as ESQLBinaryExpression; @@ -39,10 +43,11 @@ export const createJoinCommand = (ctx: JoinCommandContext): ESQLCommand => { command.commandType = (ctx._type_.text ?? '').toLocaleLowerCase(); const joinTarget = createNodeFromJoinTarget(ctx.joinTarget()); - const onOption = Builder.option({ name: 'on' }); + const joinCondition = ctx.joinCondition(); + const onOption = createOption('on', joinCondition); const joinPredicates: ESQLAstItem[] = onOption.args; - for (const joinPredicateCtx of ctx.joinCondition().joinPredicate_list()) { + for (const joinPredicateCtx of joinCondition.joinPredicate_list()) { const expression = visitValueExpression(joinPredicateCtx.valueExpression()); if (expression) { @@ -51,7 +56,10 @@ export const createJoinCommand = (ctx: JoinCommandContext): ESQLCommand => { } command.args.push(joinTarget); - command.args.push(onOption); + + if (onOption.args.length) { + command.args.push(onOption); + } return command; }; diff --git a/packages/kbn-esql-ast/src/pretty_print/__tests__/basic_pretty_printer.comments.test.ts b/packages/kbn-esql-ast/src/pretty_print/__tests__/basic_pretty_printer.comments.test.ts index 3839c5e52f9bc..d725759172928 100644 --- a/packages/kbn-esql-ast/src/pretty_print/__tests__/basic_pretty_printer.comments.test.ts +++ b/packages/kbn-esql-ast/src/pretty_print/__tests__/basic_pretty_printer.comments.test.ts @@ -14,7 +14,7 @@ const reprint = (src: string) => { const { root } = parse(src, { withFormatting: true }); const text = BasicPrettyPrinter.print(root); - // console.log(JSON.stringify(ast, null, 2)); + // console.log(JSON.stringify(root.commands, null, 2)); return { text }; }; @@ -184,3 +184,15 @@ describe('rename expressions', () => { assertPrint('FROM a | RENAME /*I*/ a /*II*/ AS /*III*/ b /*IV*/, c AS d'); }); }); + +describe('commands', () => { + describe('JOIN', () => { + test('around JOIN targets', () => { + assertPrint('FROM a | LEFT JOIN /*1*/ a /*2*/ AS /*3*/ b /*4*/ ON c'); + }); + + test('around JOIN conditions', () => { + assertPrint('FROM a | LEFT JOIN a AS b ON /*1*/ c /*2*/, /*3*/ d /*4*/'); + }); + }); +}); diff --git a/packages/kbn-esql-ast/src/pretty_print/__tests__/basic_pretty_printer.test.ts b/packages/kbn-esql-ast/src/pretty_print/__tests__/basic_pretty_printer.test.ts index c8880b9bfe678..81cde1ed94e7f 100644 --- a/packages/kbn-esql-ast/src/pretty_print/__tests__/basic_pretty_printer.test.ts +++ b/packages/kbn-esql-ast/src/pretty_print/__tests__/basic_pretty_printer.test.ts @@ -115,6 +115,40 @@ describe('single line query', () => { expect(text).toBe('FROM index | DISSECT input "pattern" APPEND_SEPARATOR = ""'); }); }); + + describe('JOIN', () => { + test('example from docs', () => { + const { text } = reprint(` + FROM employees + | EVAL language_code = languages + | LOOKUP JOIN languages_lookup ON language_code + | WHERE emp_no < 500 + | KEEP emp_no, language_name + | SORT emp_no + | LIMIT 10 + `); + + expect(text).toBe( + 'FROM employees | EVAL language_code = languages | LOOKUP JOIN languages_lookup ON language_code | WHERE emp_no < 500 | KEEP emp_no, language_name | SORT emp_no | LIMIT 10' + ); + }); + + test('supports aliases', () => { + const { text } = reprint(` + FROM employees | LEFT JOIN languages_lookup AS something ON language_code`); + + expect(text).toBe( + 'FROM employees | LEFT JOIN languages_lookup AS something ON language_code' + ); + }); + + test('supports multiple conditions', () => { + const { text } = reprint(` + FROM employees | LEFT JOIN a ON b, c, d.e.f`); + + expect(text).toBe('FROM employees | LEFT JOIN a ON b, c, d.e.f'); + }); + }); }); describe('expressions', () => { diff --git a/packages/kbn-esql-ast/src/pretty_print/__tests__/wrapping_pretty_printer.comments.test.ts b/packages/kbn-esql-ast/src/pretty_print/__tests__/wrapping_pretty_printer.comments.test.ts index 861d274493a42..1b1fa3b01896d 100644 --- a/packages/kbn-esql-ast/src/pretty_print/__tests__/wrapping_pretty_printer.comments.test.ts +++ b/packages/kbn-esql-ast/src/pretty_print/__tests__/wrapping_pretty_printer.comments.test.ts @@ -497,6 +497,49 @@ ROW 1 }); }); + describe('as-expressions', () => { + test('JOIN main arguments surrounded in comments', () => { + const query = ` + FROM index | LEFT JOIN + /* 1 */ + // 2 + /* 3 */ + // 4 + /* 5 */ a /* 6 */ AS /* 7 */ b + ON c`; + const text = reprint(query).text; + expect('\n' + text).toBe(` +FROM index + | LEFT JOIN + /* 1 */ + // 2 + /* 3 */ + // 4 + /* 5 */ a /* 6 */ AS + /* 7 */ b + ON c`); + }); + + test('JOIN "ON" option argument comments', () => { + const query = ` + FROM index | RIGHT JOIN a AS b ON + // c.1 + /* c.2 */ c /* c.3 */, + // d.1 + /* d.2 */ d /* d.3 */`; + const text = reprint(query).text; + expect('\n' + text).toBe(` +FROM index + | RIGHT JOIN + a AS b + ON + // c.1 + /* c.2 */ c, /* c.3 */ + // d.1 + /* d.2 */ d /* d.3 */`); + }); + }); + describe('function call expressions', () => { describe('binary expressions', () => { test('first operand surrounded by inline comments', () => { diff --git a/packages/kbn-esql-ast/src/pretty_print/__tests__/wrapping_pretty_printer.test.ts b/packages/kbn-esql-ast/src/pretty_print/__tests__/wrapping_pretty_printer.test.ts index 6422ae9a451af..b26906e5d2e75 100644 --- a/packages/kbn-esql-ast/src/pretty_print/__tests__/wrapping_pretty_printer.test.ts +++ b/packages/kbn-esql-ast/src/pretty_print/__tests__/wrapping_pretty_printer.test.ts @@ -14,12 +14,33 @@ const reprint = (src: string, opts?: WrappingPrettyPrinterOptions) => { const { root } = parse(src); const text = WrappingPrettyPrinter.print(root, opts); - // console.log(JSON.stringify(ast, null, 2)); + // console.log(JSON.stringify(root.commands, null, 2)); return { text }; }; describe('commands', () => { + describe('JOIN', () => { + test('with short identifiers', () => { + const { text } = reprint('FROM a | RIGHT JOIN b AS c ON d, e'); + + expect(text).toBe('FROM a | RIGHT JOIN b AS c ON d, e'); + }); + + test('with long identifiers', () => { + const { text } = reprint( + 'FROM aaaaaaaaaaaa | RIGHT JOIN bbbbbbbbbbbbbbbbb AS cccccccccccccccccccc ON dddddddddddddddddddddddddddddddddddddddd, eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + ); + + expect('\n' + text).toBe(` +FROM aaaaaaaaaaaa + | RIGHT JOIN bbbbbbbbbbbbbbbbb AS cccccccccccccccccccc + ON + dddddddddddddddddddddddddddddddddddddddd, + eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee`); + }); + }); + describe('GROK', () => { test('two basic arguments', () => { const { text } = reprint('FROM search-movies | GROK Awards "text"'); diff --git a/packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts b/packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts index cf252825c243f..60248774f9157 100644 --- a/packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts +++ b/packages/kbn-esql-ast/src/pretty_print/basic_pretty_printer.ts @@ -223,6 +223,11 @@ export class BasicPrettyPrinter { return ''; }) + .on('visitIdentifierExpression', (ctx) => { + const formatted = LeafPrinter.identifier(ctx.node); + return this.decorateWithComments(ctx.node, formatted); + }) + .on('visitSourceExpression', (ctx) => { const formatted = LeafPrinter.source(ctx.node); return this.decorateWithComments(ctx.node, formatted); @@ -383,12 +388,16 @@ export class BasicPrettyPrinter { const argsFormatted = args ? `${separator}${args}` : ''; const optionFormatted = `${option}${argsFormatted}`; - return optionFormatted; + return this.decorateWithComments(ctx.node, optionFormatted); }) .on('visitCommand', (ctx) => { const opts = this.opts; - const cmd = opts.lowercaseCommands ? ctx.node.name : ctx.node.name.toUpperCase(); + const node = ctx.node; + const cmd = opts.lowercaseCommands ? node.name : node.name.toUpperCase(); + const cmdType = !node.commandType + ? '' + : (opts.lowercaseCommands ? node.commandType : node.commandType.toUpperCase()) + ' '; let args = ''; let options = ''; @@ -406,9 +415,9 @@ export class BasicPrettyPrinter { const argsFormatted = args ? ` ${args}` : ''; const optionsFormatted = options ? ` ${options}` : ''; - const cmdFormatted = `${cmd}${argsFormatted}${optionsFormatted}`; + const cmdFormatted = `${cmdType}${cmd}${argsFormatted}${optionsFormatted}`; - return cmdFormatted; + return this.decorateWithComments(ctx.node, cmdFormatted); }) .on('visitQuery', (ctx) => { diff --git a/packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts b/packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts index 2f863524740ee..9ba4ce8b0a5ae 100644 --- a/packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts +++ b/packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts @@ -427,12 +427,19 @@ export class WrappingPrettyPrinter { return { txt, indented }; } - protected readonly visitor = new Visitor() + protected readonly visitor: Visitor = new Visitor() .on('visitExpression', (ctx, inp: Input): Output => { const txt = ctx.node.text ?? ''; return { txt }; }) + .on('visitIdentifierExpression', (ctx, inp: Input) => { + const formatted = LeafPrinter.identifier(ctx.node); + const { txt, indented } = this.decorateWithComments(inp.indent, ctx.node, formatted); + + return { txt, indented }; + }) + .on('visitSourceExpression', (ctx, inp: Input): Output => { const formatted = LeafPrinter.source(ctx.node) + (inp.suffix ?? ''); const { txt, indented } = this.decorateWithComments(inp.indent, ctx.node, formatted); @@ -570,7 +577,14 @@ export class WrappingPrettyPrinter { .on('visitCommand', (ctx, inp: Input): Output => { const opts = this.opts; - const cmd = opts.lowercaseCommands ? ctx.node.name : ctx.node.name.toUpperCase(); + const node = ctx.node; + let cmd = opts.lowercaseCommands ? node.name : node.name.toUpperCase(); + + if (node.commandType) { + const type = opts.lowercaseCommands ? node.commandType : node.commandType.toUpperCase(); + cmd = `${type} ${cmd}`; + } + const args = this.printArguments(ctx, { indent: inp.indent, remaining: inp.remaining - cmd.length - 1, @@ -678,6 +692,6 @@ export class WrappingPrettyPrinter { }); public print(query: ESQLAstQueryExpression) { - return this.visitor.visitQuery(query); + return this.visitor.visitQuery(query, undefined); } } diff --git a/packages/kbn-esql-ast/src/types.ts b/packages/kbn-esql-ast/src/types.ts index 60da69b04989a..a204cf50901ce 100644 --- a/packages/kbn-esql-ast/src/types.ts +++ b/packages/kbn-esql-ast/src/types.ts @@ -9,7 +9,7 @@ export type ESQLAst = ESQLAstCommand[]; -export type ESQLAstCommand = ESQLCommand | ESQLAstMetricsCommand; +export type ESQLAstCommand = ESQLCommand | ESQLAstMetricsCommand | ESQLAstJoinCommand; export type ESQLAstNode = ESQLAstCommand | ESQLAstExpression | ESQLAstItem; @@ -92,6 +92,10 @@ export interface ESQLAstMetricsCommand extends ESQLCommand<'metrics'> { grouping?: ESQLAstField[]; } +export interface ESQLAstJoinCommand extends ESQLCommand<'join'> { + commandType: 'lookup' | 'left' | 'right'; +} + export interface ESQLCommandOption extends ESQLAstBaseItem { type: 'option'; args: ESQLAstItem[]; @@ -199,12 +203,14 @@ export type BinaryExpressionOperator = | BinaryExpressionArithmeticOperator | BinaryExpressionAssignmentOperator | BinaryExpressionComparisonOperator - | BinaryExpressionRegexOperator; + | BinaryExpressionRegexOperator + | BinaryExpressionRenameOperator; export type BinaryExpressionArithmeticOperator = '+' | '-' | '*' | '/' | '%'; export type BinaryExpressionAssignmentOperator = '='; export type BinaryExpressionComparisonOperator = '==' | '=~' | '!=' | '<' | '<=' | '>' | '>='; export type BinaryExpressionRegexOperator = 'like' | 'not_like' | 'rlike' | 'not_rlike'; +export type BinaryExpressionRenameOperator = 'as'; // from https://github.com/elastic/elasticsearch/blob/122e7288200ee03e9087c98dff6cebbc94e774aa/docs/reference/esql/functions/kibana/inline_cast.json export type InlineCastingType = diff --git a/packages/kbn-esql-ast/src/visitor/__tests__/commands.test.ts b/packages/kbn-esql-ast/src/visitor/__tests__/commands.test.ts new file mode 100644 index 0000000000000..35bfda59070c8 --- /dev/null +++ b/packages/kbn-esql-ast/src/visitor/__tests__/commands.test.ts @@ -0,0 +1,117 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { EsqlQuery } from '../../query'; +import { Visitor } from '../visitor'; + +test('"visitCommand" captures all non-captured commands', () => { + const { ast } = EsqlQuery.fromSrc(` + FROM index + | STATS 1, "str", [true], a = b BY field + | LIMIT 123 + `); + const visitor = new Visitor() + .on('visitStatsCommand', (ctx) => { + return ''; + }) + .on('visitCommand', (ctx) => { + return `${ctx.name()}`; + }) + .on('visitQuery', (ctx) => { + return [...ctx.visitCommands()].join(' | '); + }); + const text = visitor.visitQuery(ast); + + expect(text).toBe('FROM | | LIMIT'); +}); + +test('can visit JOIN command', () => { + const { ast } = EsqlQuery.fromSrc(` + FROM index + | STATS 1, "str", [true], a = b BY field + | RIGHT JOIN abc ON xyz + | LIMIT 123 + `); + const visitor = new Visitor() + .on('visitJoinCommand', (ctx) => { + return `JOIN[type = ${ctx.node.commandType}]`; + }) + .on('visitCommand', (ctx) => { + return `${ctx.name()}`; + }) + .on('visitQuery', (ctx) => { + return [...ctx.visitCommands()].join(' | '); + }); + const text = visitor.visitQuery(ast); + + expect(text).toBe('FROM | STATS | JOIN[type = right] | LIMIT'); +}); + +test('can visit JOIN command arguments', () => { + const { ast } = EsqlQuery.fromSrc(` + FROM index + | STATS 1, "str", [true], a = b BY field + | RIGHT JOIN abc AS xxx ON xyz + | LIMIT 123 + `); + const visitor = new Visitor() + .on('visitFunctionCallExpression', (ctx) => { + if (ctx.node.subtype === 'binary-expression') { + return ctx.node.name; + } else { + return null; + } + }) + .on('visitExpression', (ctx) => { + return null; + }) + .on('visitJoinCommand', (ctx) => { + return [...ctx.visitArgs()]; + }) + .on('visitCommand', (ctx) => { + return null; + }) + .on('visitQuery', (ctx) => { + return [...ctx.visitCommands()]; + }); + const list = visitor.visitQuery(ast).flat().filter(Boolean); + + expect(list).toMatchObject(['as']); +}); + +test('can visit JOIN ON option', () => { + const { ast } = EsqlQuery.fromSrc(` + FROM index + | STATS 1, "str", [true], a = b BY field + | RIGHT JOIN abc AS xxx ON xyz + | LIMIT 123 + `); + const visitor = new Visitor() + .on('visitColumnExpression', (ctx) => { + return ctx.node.name; + }) + .on('visitExpression', (ctx) => { + return null; + }) + .on('visitCommandOption', (ctx) => { + return [...ctx.visitArguments()].flat(); + }) + .on('visitJoinCommand', (ctx) => { + return [...ctx.visitOptions()].flat(); + }) + .on('visitCommand', (ctx) => { + return null; + }) + .on('visitQuery', (ctx) => { + return [...ctx.visitCommands()].flat(); + }); + const list = visitor.visitQuery(ast).flat().filter(Boolean); + + expect(list).toMatchObject(['xyz']); +}); diff --git a/packages/kbn-esql-ast/src/visitor/__tests__/expressions.test.ts b/packages/kbn-esql-ast/src/visitor/__tests__/expressions.test.ts index 32f8fff9816a7..2d1d364b204ea 100644 --- a/packages/kbn-esql-ast/src/visitor/__tests__/expressions.test.ts +++ b/packages/kbn-esql-ast/src/visitor/__tests__/expressions.test.ts @@ -158,3 +158,25 @@ test('"visitLiteral" takes over all literal visits', () => { expect(text).toBe('FROM E | STATS , , E, E | LIMIT '); }); + +test('"visitExpression" does visit identifier nodes', () => { + const { ast } = parse(` + FROM index + | RIGHT JOIN a AS b ON c + `); + const expressions: string[] = []; + new Visitor() + .on('visitExpression', (ctx) => { + expressions.push(ctx.node.name); + for (const _ of ctx.visitArguments(undefined)); + }) + .on('visitCommand', (ctx) => { + for (const _ of ctx.visitArguments()); + }) + .on('visitQuery', (ctx) => { + for (const _ of ctx.visitCommands()); + }) + .visitQuery(ast); + + expect(expressions.sort()).toEqual(['a', 'as', 'b', 'index']); +}); diff --git a/packages/kbn-esql-ast/src/visitor/contexts.ts b/packages/kbn-esql-ast/src/visitor/contexts.ts index e1570f7143c07..913abfacd9702 100644 --- a/packages/kbn-esql-ast/src/visitor/contexts.ts +++ b/packages/kbn-esql-ast/src/visitor/contexts.ts @@ -17,6 +17,7 @@ import type { ESQLAstCommand, ESQLAstExpression, ESQLAstItem, + ESQLAstJoinCommand, ESQLAstNodeWithArgs, ESQLAstNodeWithChildren, ESQLAstRenameExpression, @@ -24,6 +25,7 @@ import type { ESQLCommandOption, ESQLDecimalLiteral, ESQLFunction, + ESQLIdentifier, ESQLInlineCast, ESQLIntegerLiteral, ESQLList, @@ -86,7 +88,7 @@ export class VisitorContext< const node = this.node; if (!isNodeWithArgs(node)) { - throw new Error('Node does not have arguments'); + return; } for (const arg of singleItems(node.args)) { @@ -467,6 +469,12 @@ export class MvExpandCommandVisitorContext< Data extends SharedData = SharedData > extends CommandVisitorContext {} +// JOIN ON +export class JoinCommandVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends CommandVisitorContext {} + // Expressions ----------------------------------------------------------------- export class ExpressionVisitorContext< @@ -567,3 +575,8 @@ export class OrderExpressionVisitorContext< Methods extends VisitorMethods = VisitorMethods, Data extends SharedData = SharedData > extends VisitorContext {} + +export class IdentifierExpressionVisitorContext< + Methods extends VisitorMethods = VisitorMethods, + Data extends SharedData = SharedData +> extends VisitorContext {} diff --git a/packages/kbn-esql-ast/src/visitor/global_visitor_context.ts b/packages/kbn-esql-ast/src/visitor/global_visitor_context.ts index 793803bc48f54..5240b4fe2e224 100644 --- a/packages/kbn-esql-ast/src/visitor/global_visitor_context.ts +++ b/packages/kbn-esql-ast/src/visitor/global_visitor_context.ts @@ -10,9 +10,11 @@ import * as contexts from './contexts'; import type { ESQLAstCommand, + ESQLAstJoinCommand, ESQLAstRenameExpression, ESQLColumn, ESQLFunction, + ESQLIdentifier, ESQLInlineCast, ESQLList, ESQLLiteral, @@ -165,6 +167,10 @@ export class GlobalVisitorContext< if (!this.methods.visitMvExpandCommand) break; return this.visitMvExpandCommand(parent, commandNode, input as any); } + case 'join': { + if (!this.methods.visitJoinCommand) break; + return this.visitJoinCommand(parent, commandNode as ESQLAstJoinCommand, input as any); + } } return this.visitCommandGeneric(parent, commandNode, input as any); } @@ -349,6 +355,15 @@ export class GlobalVisitorContext< return this.visitWithSpecificContext('visitMvExpandCommand', context, input); } + public visitJoinCommand( + parent: contexts.VisitorContext | null, + node: ESQLAstJoinCommand, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.JoinCommandVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitJoinCommand', context, input); + } + // Expression visiting ------------------------------------------------------- public visitExpressionGeneric( @@ -405,6 +420,10 @@ export class GlobalVisitorContext< if (!this.methods.visitOrderExpression) break; return this.visitOrderExpression(parent, expressionNode, input as any); } + case 'identifier': { + if (!this.methods.visitIdentifierExpression) break; + return this.visitIdentifierExpression(parent, expressionNode, input as any); + } case 'option': { switch (expressionNode.name) { case 'as': { @@ -501,4 +520,13 @@ export class GlobalVisitorContext< const context = new contexts.OrderExpressionVisitorContext(this, node, parent); return this.visitWithSpecificContext('visitOrderExpression', context, input); } + + public visitIdentifierExpression( + parent: contexts.VisitorContext | null, + node: ESQLIdentifier, + input: types.VisitorInput + ): types.VisitorOutput { + const context = new contexts.IdentifierExpressionVisitorContext(this, node, parent); + return this.visitWithSpecificContext('visitIdentifierExpression', context, input); + } } diff --git a/packages/kbn-esql-ast/src/visitor/types.ts b/packages/kbn-esql-ast/src/visitor/types.ts index 6dd49eabb013e..b471eb67258fe 100644 --- a/packages/kbn-esql-ast/src/visitor/types.ts +++ b/packages/kbn-esql-ast/src/visitor/types.ts @@ -61,7 +61,8 @@ export type ExpressionVisitorInput = AnyToVoid< VisitorInput & VisitorInput & VisitorInput & - VisitorInput + VisitorInput & + VisitorInput >; /** @@ -77,7 +78,8 @@ export type ExpressionVisitorOutput = | VisitorOutput | VisitorOutput | VisitorOutput - | VisitorOutput; + | VisitorOutput + | VisitorOutput; /** * Input that satisfies any command visitor input constraints. @@ -103,7 +105,8 @@ export type CommandVisitorInput = AnyToVoid< VisitorInput & VisitorInput & VisitorInput & - VisitorInput + VisitorInput & + VisitorInput >; /** @@ -130,7 +133,8 @@ export type CommandVisitorOutput = | VisitorOutput | VisitorOutput | VisitorOutput - | VisitorOutput; + | VisitorOutput + | VisitorOutput; export interface VisitorMethods< Visitors extends VisitorMethods = any, @@ -162,6 +166,7 @@ export interface VisitorMethods< visitGrokCommand?: Visitor, any, any>; visitEnrichCommand?: Visitor, any, any>; visitMvExpandCommand?: Visitor, any, any>; + visitJoinCommand?: Visitor, any, any>; visitCommandOption?: Visitor, any, any>; visitExpression?: Visitor, any, any>; visitSourceExpression?: Visitor< @@ -205,6 +210,11 @@ export interface VisitorMethods< any >; visitOrderExpression?: Visitor, any, any>; + visitIdentifierExpression?: Visitor< + contexts.IdentifierExpressionVisitorContext, + any, + any + >; } /** @@ -230,6 +240,8 @@ export type AstNodeToVisitorName = Node extends ESQ ? 'visitTimeIntervalLiteralExpression' : Node extends ast.ESQLInlineCast ? 'visitInlineCastExpression' + : Node extends ast.ESQLIdentifier + ? 'visitIdentifierExpression' : never; /** diff --git a/packages/kbn-esql-ast/src/walker/helpers.ts b/packages/kbn-esql-ast/src/walker/helpers.ts index eb455ec7991dc..8159c9abbde49 100644 --- a/packages/kbn-esql-ast/src/walker/helpers.ts +++ b/packages/kbn-esql-ast/src/walker/helpers.ts @@ -7,11 +7,46 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { ESQLProperNode } from '../types'; +import { + ESQLAstCommand, + ESQLAstQueryExpression, + ESQLColumn, + ESQLCommandMode, + ESQLCommandOption, + ESQLFunction, + ESQLIdentifier, + ESQLInlineCast, + ESQLList, + ESQLLiteral, + ESQLOrderExpression, + ESQLProperNode, + ESQLSource, + ESQLTimeInterval, + ESQLUnknownItem, +} from '../types'; + +export type NodeMatchKeys = + | keyof ESQLAstCommand + | keyof ESQLAstQueryExpression + | keyof ESQLFunction + | keyof ESQLCommandOption + | keyof ESQLSource + | keyof ESQLColumn + | keyof ESQLTimeInterval + | keyof ESQLList + | keyof ESQLLiteral + | keyof ESQLIdentifier + | keyof ESQLCommandMode + | keyof ESQLInlineCast + | keyof ESQLOrderExpression + | keyof ESQLUnknownItem; export type NodeMatchTemplateKey = V | V[] | RegExp; + export type NodeMatchTemplate = { - [K in keyof ESQLProperNode]?: NodeMatchTemplateKey; + [K in NodeMatchKeys]?: K extends keyof ESQLProperNode + ? NodeMatchTemplateKey + : NodeMatchTemplateKey; }; /** diff --git a/packages/kbn-esql-ast/src/walker/walker.test.ts b/packages/kbn-esql-ast/src/walker/walker.test.ts index 048e7e259eec2..c2db01f719d4b 100644 --- a/packages/kbn-esql-ast/src/walker/walker.test.ts +++ b/packages/kbn-esql-ast/src/walker/walker.test.ts @@ -20,6 +20,7 @@ import { ESQLTimeInterval, ESQLInlineCast, ESQLUnknownItem, + ESQLIdentifier, } from '../types'; import { walk, Walker } from './walker'; @@ -82,6 +83,23 @@ describe('structurally can walk all nodes', () => { ]); }); + test('can traverse JOIN command', () => { + const { ast } = parse('FROM index | LEFT JOIN a AS b ON c, d'); + const commands: ESQLCommand[] = []; + const identifiers: ESQLIdentifier[] = []; + const columns: ESQLColumn[] = []; + + walk(ast, { + visitCommand: (cmd) => commands.push(cmd), + visitIdentifier: (id) => identifiers.push(id), + visitColumn: (col) => columns.push(col), + }); + + expect(commands.map(({ name }) => name).sort()).toStrictEqual(['from', 'join']); + expect(identifiers.map(({ name }) => name).sort()).toStrictEqual(['a', 'as', 'b', 'c', 'd']); + expect(columns.map(({ name }) => name).sort()).toStrictEqual(['c', 'd']); + }); + test('"visitAny" can capture command nodes', () => { const { ast } = parse('FROM index | STATS a = 123 | WHERE 123 | LIMIT 10'); const commands: ESQLCommand[] = []; @@ -1050,6 +1068,37 @@ describe('Walker.match()', () => { name: 'a.b.c', }); }); + + test('can find WHERE command by its type', () => { + const query = 'FROM index | LEFT JOIN a | RIGHT JOIN b'; + const { root } = parse(query); + + const join1 = Walker.match(root, { + type: 'command', + name: 'join', + commandType: 'left', + })!; + const identifier1 = Walker.match(join1, { + type: 'identifier', + name: 'a', + })!; + const join2 = Walker.match(root, { + type: 'command', + name: 'join', + commandType: 'right', + })!; + const identifier2 = Walker.match(join2, { + type: 'identifier', + name: 'b', + })!; + + expect(identifier1).toMatchObject({ + name: 'a', + }); + expect(identifier2).toMatchObject({ + name: 'b', + }); + }); }); describe('Walker.matchAll()', () => { From 7985f0ed406bd3b3d42125f4cc472e70af56c66d Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 6 Dec 2024 20:07:13 +1100 Subject: [PATCH 113/141] [api-docs] 2024-12-06 Daily api_docs build (#203206) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/913 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_inventory.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.devdocs.json | 8 + api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_usage.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.devdocs.json | 12 + api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 6 +- api_docs/deprecations_by_plugin.mdx | 26 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.devdocs.json | 10 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.devdocs.json | 301 +-- api_docs/embeddable.mdx | 4 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.devdocs.json | 70 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/inventory.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_ai_assistant.mdx | 2 +- api_docs/kbn_ai_assistant_common.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cbor.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_cloud_security_posture.mdx | 2 +- .../kbn_cloud_security_posture_common.mdx | 2 +- api_docs/kbn_cloud_security_posture_graph.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...ent_management_content_insights_public.mdx | 2 +- ...ent_management_content_insights_server.mdx | 2 +- ...bn_content_management_favorites_common.mdx | 2 +- ...bn_content_management_favorites_public.mdx | 2 +- ...bn_content_management_favorites_server.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- .../kbn_content_management_user_profiles.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- ...bn_core_apps_browser_internal.devdocs.json | 24 +- api_docs/kbn_core_apps_browser_internal.mdx | 4 +- 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.devdocs.json | 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 +- .../kbn_core_deprecations_common.devdocs.json | 57 +- api_docs/kbn_core_deprecations_common.mdx | 4 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_browser.mdx | 2 +- ...bn_core_feature_flags_browser_internal.mdx | 2 +- .../kbn_core_feature_flags_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_server.mdx | 2 +- ...kbn_core_feature_flags_server_internal.mdx | 2 +- .../kbn_core_feature_flags_server_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 16 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server_utils.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...otifications_browser_internal.devdocs.json | 6 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- ...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_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.devdocs.json | 17 +- api_docs/kbn_deeplinks_search.mdx | 4 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- .../kbn_discover_contextual_components.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.devdocs.json | 162 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_editor.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_gen_ai_functional_testing.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grid_layout.devdocs.json | 4 +- api_docs/kbn_grid_layout.mdx | 4 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_adapter.mdx | 2 +- ...dex_lifecycle_management_common_shared.mdx | 2 +- .../kbn_index_management_shared_types.mdx | 2 +- api_docs/kbn_inference_common.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_investigation_shared.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_item_buffer.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- api_docs/kbn_language_documentation.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_manifest.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- .../kbn_ml_cancellable_search.devdocs.json | 20 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_field_stats_flyout.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_parse_interval.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_ml_validators.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_object_versioning_utils.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_observability_logs_overview.mdx | 2 +- ...kbn_observability_synthetics_test_data.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_product_doc_artifact_builder.mdx | 2 +- api_docs/kbn_product_doc_common.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- ...n_react_kibana_context_render.devdocs.json | 10 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- ...kbn_react_kibana_context_root.devdocs.json | 22 + api_docs/kbn_react_kibana_context_root.mdx | 4 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- ...bn_react_kibana_context_theme.devdocs.json | 58 +- api_docs/kbn_react_kibana_context_theme.mdx | 4 +- api_docs/kbn_react_kibana_mount.devdocs.json | 10 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_response_ops_rule_form.mdx | 2 +- api_docs/kbn_response_ops_rule_params.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- .../kbn_router_to_openapispec.devdocs.json | 14 +- api_docs/kbn_router_to_openapispec.mdx | 4 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_saved_search_component.mdx | 2 +- api_docs/kbn_scout.mdx | 2 +- api_docs/kbn_screenshotting_server.mdx | 2 +- api_docs/kbn_search_api_keys_components.mdx | 2 +- api_docs/kbn_search_api_keys_server.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.devdocs.json | 4 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_shared_ui.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- api_docs/kbn_security_authorization_core.mdx | 2 +- ...kbn_security_authorization_core_common.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- .../kbn_security_role_management_model.mdx | 2 +- ...kbn_security_solution_distribution_bar.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- api_docs/kbn_security_ui_components.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- .../kbn_securitysolution_utils.devdocs.json | 102 +- api_docs/kbn_securitysolution_utils.mdx | 7 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- .../kbn_server_route_repository_client.mdx | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_table_persist.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.devdocs.json | 2139 ++++++++++++++--- api_docs/kbn_slo_schema.mdx | 4 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_sse_utils.mdx | 2 +- api_docs/kbn_sse_utils_client.mdx | 2 +- api_docs/kbn_sse_utils_server.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_transpose_utils.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- .../kbn_user_profile_components.devdocs.json | 10 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.devdocs.json | 87 +- api_docs/kibana_react.mdx | 4 +- api_docs/kibana_utils.devdocs.json | 35 +- api_docs/kibana_utils.mdx | 4 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/llm_tasks.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.devdocs.json | 4 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- .../observability_onboarding.devdocs.json | 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 | 32 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/product_doc_base.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_assistant.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_indices.devdocs.json | 2 +- api_docs/search_indices.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_navigation.devdocs.json | 26 +- api_docs/search_navigation.mdx | 4 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.devdocs.json | 143 +- api_docs/search_playground.mdx | 4 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.devdocs.json | 4 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/streams.mdx | 2 +- api_docs/streams_app.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 804 files changed, 3399 insertions(+), 1623 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 44e6df0051c00..38898cd0f2342 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index d9b7684a21014..9042b942226e0 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 16b3d049774c3..c6f1f9830fc47 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-12-05 +date: 2024-12-06 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 f08953a636c2f..411375f8423b6 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-12-05 +date: 2024-12-06 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 e7364c539c72a..89014179c53ec 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-12-05 +date: 2024-12-06 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 af73a15c4d23d..a07f102645adc 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-12-05 +date: 2024-12-06 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 375bdd80ea47c..5d432f4600637 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_inventory.mdx b/api_docs/asset_inventory.mdx index 926e855163d18..b7e7385f57e1d 100644 --- a/api_docs/asset_inventory.mdx +++ b/api_docs/asset_inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetInventory title: "assetInventory" image: https://source.unsplash.com/400x175/?github description: API docs for the assetInventory plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetInventory'] --- import assetInventoryObj from './asset_inventory.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index dfe1f20c84c5c..70fa0bae84cb2 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-12-05 +date: 2024-12-06 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 10315cb41d758..486b4b2b35884 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-12-05 +date: 2024-12-06 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 440492b1035b2..48e2afaf769c3 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-12-05 +date: 2024-12-06 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 1c0bf62c8e510..57c2be12acc3e 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-12-05 +date: 2024-12-06 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 1d810a9559a4b..7f94bdf3cdbf0 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-12-05 +date: 2024-12-06 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 ef8cf26d2ecc0..b16cfba059b8c 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-12-05 +date: 2024-12-06 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 246d5634136f9..e7ac94de405f0 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-12-05 +date: 2024-12-06 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 9b6cc4b640853..b36c79dd8d5d0 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index f233f88b833e1..2e50e049d4ced 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-12-05 +date: 2024-12-06 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 1d5b02638c26b..3be4072f9c939 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-12-05 +date: 2024-12-06 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 15dbdf080af4d..0c8ee77152773 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-12-05 +date: 2024-12-06 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 e7b895fab2fe1..813552ae30e3a 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-12-05 +date: 2024-12-06 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 bd3bcc2e10e98..067b3bbb6b3b9 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index 48928e26afd80..da44b997606df 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-12-05 +date: 2024-12-06 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 15f3a035e41db..1afd294d10477 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 66e7a984e27ff..7d1f8ed4dc732 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -12734,6 +12734,10 @@ "plugin": "dataViews", "path": "src/plugins/data_views/common/data_views/data_views.ts" }, + { + "plugin": "dataViewManagement", + "path": "src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts" + }, { "plugin": "dataViewManagement", "path": "src/plugins/data_view_management/public/management_app/data_view_management_service.ts" @@ -19265,6 +19269,10 @@ "plugin": "dataViews", "path": "src/plugins/data_views/common/data_views/data_views.ts" }, + { + "plugin": "dataViewManagement", + "path": "src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts" + }, { "plugin": "dataViewManagement", "path": "src/plugins/data_view_management/public/management_app/data_view_management_service.ts" diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 0e44f5b6ae59d..9c73daaf79d44 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 30e7b68e6c5b9..0fa43c2a0fc4c 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 8322dc65837cf..9a56270a72be5 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-12-05 +date: 2024-12-06 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 c1168207a4e7d..2490d814b8f88 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index 66f926fb30ded..cbda7b2f49134 100644 --- a/api_docs/data_usage.mdx +++ b/api_docs/data_usage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataUsage title: "dataUsage" image: https://source.unsplash.com/400x175/?github description: API docs for the dataUsage plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataUsage'] --- import dataUsageObj from './data_usage.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index a2f7a703413bf..43e1206db6b3d 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-12-05 +date: 2024-12-06 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 f9dc815b24f43..55fa073e6baa0 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-12-05 +date: 2024-12-06 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 e8169220add69..7f3c2d7e228f7 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index 2db8e5ec94763..71fafa3cbdcd7 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -481,6 +481,10 @@ "deprecated": true, "trackAdoption": false, "references": [ + { + "plugin": "dataViewManagement", + "path": "src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts" + }, { "plugin": "dataViewManagement", "path": "src/plugins/data_view_management/public/management_app/data_view_management_service.ts" @@ -8351,6 +8355,10 @@ "deprecated": true, "trackAdoption": false, "references": [ + { + "plugin": "dataViewManagement", + "path": "src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts" + }, { "plugin": "dataViewManagement", "path": "src/plugins/data_view_management/public/management_app/data_view_management_service.ts" @@ -16870,6 +16878,10 @@ "deprecated": true, "trackAdoption": false, "references": [ + { + "plugin": "dataViewManagement", + "path": "src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts" + }, { "plugin": "dataViewManagement", "path": "src/plugins/data_view_management/public/management_app/data_view_management_service.ts" diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 9f0b52d55f51b..52a3b22dad93f 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-12-05 +date: 2024-12-06 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 4a9723ee0237f..d2302868ee1c1 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-12-05 +date: 2024-12-06 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 66a06d208d474..59f173109cf03 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-12-05 +date: 2024-12-06 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 a99a28bec938e..07a2f008d4a09 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -22,7 +22,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | actions, savedObjectsTagging, ml, enterpriseSearch | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, visualizations, aiops, dataVisualizer, ml, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | | | @kbn/core, embeddable, savedObjects, visualizations, canvas, graph, ml | - | -| | @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, dataViews, spaces, share, actions, data, alerting, dashboard, @kbn/core-saved-objects-migration-server-mocks, lens, cases, savedSearch, canvas, fleet, cloudSecurityPosture, ml, graph, lists, maps, infra, visualizations, apmDataAccess, securitySolution, apm, slo, synthetics, uptime, 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, taskManager, dataViews, spaces, share, actions, data, alerting, dashboard, @kbn/core-saved-objects-migration-server-mocks, lens, cases, savedSearch, canvas, fleet, cloudSecurityPosture, ml, graph, lists, maps, visualizations, apmDataAccess, infra, securitySolution, apm, slo, synthetics, uptime, 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 | - | | | dataVisualizer, stackAlerts, expressionPartitionVis | - | @@ -154,6 +154,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/core-logging-server-internal, security | - | | | security | - | | | observabilityShared | - | +| | aiAssistantManagementSelection, observabilityAiAssistantManagement | - | | | @kbn/react-kibana-context-styled, kibanaReact | - | | | indexLifecycleManagement | - | | | @kbn/reporting-public, discover | - | @@ -205,7 +206,6 @@ Safe to remove. | | data | | | data | | | embeddableEnhanced | -| | embeddable | | | embeddable | | | expressionGauge | | | expressionGauge | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index eb52c777ee8a3..ee9ec20cfbbcc 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -494,6 +494,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## aiAssistantManagementSelection + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [mount_section.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/ai_assistant_management/selection/public/management_section/mount_section.tsx#:~:text=wrapWithTheme), [mount_section.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/ai_assistant_management/selection/public/management_section/mount_section.tsx#:~:text=wrapWithTheme) | - | + + + ## aiops | Deprecated API | Reference location(s) | Remove By | @@ -559,7 +567,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [datasource_component.js](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/components/datasource/datasource_component.js#:~:text=title) | - | | | [embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx#:~:text=EmbeddablePanel), [embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx#:~:text=EmbeddablePanel) | - | -| | [embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx#:~:text=getEmbeddableFactories), [editor_menu.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/components/workpad_header/editor_menu/editor_menu.tsx#:~:text=getEmbeddableFactories), [flyout.component.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx#:~:text=getEmbeddableFactories), [flyout.component.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx#:~:text=getEmbeddableFactories) | - | +| | [embeddable.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/renderers/embeddable/embeddable.tsx#:~:text=getEmbeddableFactories), [editor_menu.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/components/workpad_header/editor_menu/editor_menu.tsx#:~:text=getEmbeddableFactories) | - | | | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/server/demodata/index.ts#:~:text=context), [embeddable.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/external/embeddable.ts#:~:text=context), [escount.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/escount.ts#:~:text=context), [esdocs.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/browser/esdocs.ts#:~:text=context), [filters.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/common/functions/filters.ts#:~:text=context), [neq.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/common/neq.ts#:~:text=context), [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/canvas_plugin_src/functions/server/pointseries/index.ts#:~:text=context) | - | | | [setup_expressions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/public/setup_expressions.ts#:~:text=getFunction) | - | | | [functions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getFunctions), [functions.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/functions/functions.ts#:~:text=getFunctions), [functions.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/canvas/server/routes/functions/functions.test.ts#:~:text=getFunctions) | - | @@ -697,13 +705,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=removeScriptedField), [field_editor.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/field_editor/field_editor.tsx#:~:text=removeScriptedField), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=removeScriptedField), [field_editor.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/field_editor/field_editor.tsx#:~:text=removeScriptedField) | - | | | [table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/components/table/table.tsx#:~:text=getNonScriptedFields), [table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/components/table/table.tsx#:~:text=getNonScriptedFields) | - | -| | [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=getScriptedFields) | - | +| | [utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=getScriptedFields), [utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=getScriptedFields) | - | | | [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=removeScriptedField), [field_editor.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/field_editor/field_editor.tsx#:~:text=removeScriptedField), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=removeScriptedField), [field_editor.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/field_editor/field_editor.tsx#:~:text=removeScriptedField) | - | | | [table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/components/table/table.tsx#:~:text=getNonScriptedFields), [table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/components/table/table.tsx#:~:text=getNonScriptedFields) | - | -| | [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=getScriptedFields) | - | +| | [utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=getScriptedFields), [utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=getScriptedFields) | - | | | [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=removeScriptedField), [field_editor.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/field_editor/field_editor.tsx#:~:text=removeScriptedField) | - | | | [table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/source_filters_table/components/table/table.tsx#:~:text=getNonScriptedFields) | - | -| | [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=getScriptedFields) | - | +| | [utils.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/tabs/utils.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [data_view_management_service.ts](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/management_app/data_view_management_service.ts#:~:text=getScriptedFields), [scripted_fields_table.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/scripted_fields_table/scripted_fields_table.tsx#:~:text=getScriptedFields) | - | | | [edit_index_pattern.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern.tsx#:~:text=title), [edit_index_pattern.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/edit_index_pattern.tsx#:~:text=title), [test_script.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/field_editor/components/scripting_help/test_script.tsx#:~:text=title), [field_editor.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/field_editor/field_editor.tsx#:~:text=title), [create_edit_field.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/data_view_management/public/components/edit_index_pattern/create_edit_field/create_edit_field.tsx#:~:text=title) | - | @@ -1121,6 +1129,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## observabilityAiAssistantManagement + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_ai_assistant_management/public/app.tsx#:~:text=wrapWithTheme), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_ai_assistant_management/public/app.tsx#:~:text=wrapWithTheme) | - | + + + ## observabilityOnboarding | Deprecated API | Reference location(s) | Remove By | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 7d98513dfb169..4f83a5a2eb961 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index e8a85571768a3..02a38018942c0 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index 770007141ebb5..8536402e375e1 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -3640,6 +3640,14 @@ "section": "def-public.HasTimeRange", "text": "HasTimeRange" }, + " & ", + { + "pluginId": "inspector", + "scope": "public", + "docId": "kibInspectorPluginApi", + "section": "def-public.HasInspectorAdapters", + "text": "HasInspectorAdapters" + }, " & Partial<", { "pluginId": "@kbn/presentation-publishing", @@ -3673,7 +3681,7 @@ "signature": [ "Omit<", "SearchEmbeddableState", - ", \"rows\" | \"searchSource\" | \"columnsMeta\" | \"totalHitCount\"> & Pick<", + ", \"rows\" | \"searchSource\" | \"inspectorAdapters\" | \"columnsMeta\" | \"totalHitCount\"> & Pick<", "SerializableSavedSearch", ", \"serializedSearchSource\"> & ", { diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index bf1f872ed5d90..6a199fffcf7e3 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-12-05 +date: 2024-12-06 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 443ae331e1b31..858c28084de4c 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 885628f638a5e..3f88887bd8be2 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index 47c1847ae25f3..fa27948b97003 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-12-05 +date: 2024-12-06 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 f42de26ee4fd2..eec6618a2433c 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index 29710266277e5..23bb84e398ae2 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -9033,13 +9033,13 @@ }, { "parentPluginId": "embeddable", - "id": "def-public.openAddPanelFlyout", + "id": "def-public.openAddFromLibraryFlyout", "type": "Function", "tags": [], - "label": "openAddPanelFlyout", + "label": "openAddFromLibraryFlyout", "description": [], "signature": [ - "({ container, onAddPanel, onClose, }: { container: ", + "({ container, onClose, }: { container: ", { "pluginId": "@kbn/presentation-containers", "scope": "public", @@ -9047,7 +9047,7 @@ "section": "def-public.CanAddNewPanel", "text": "CanAddNewPanel" }, - "; onAddPanel?: ((id: string) => void) | undefined; onClose?: (() => void) | undefined; }) => ", + "; onClose?: (() => void) | undefined; }) => ", { "pluginId": "@kbn/core-mount-utils-browser", "scope": "public", @@ -9056,24 +9056,24 @@ "text": "OverlayRef" } ], - "path": "src/plugins/embeddable/public/add_panel_flyout/open_add_panel_flyout.tsx", + "path": "src/plugins/embeddable/public/add_from_library/open_add_from_library_flyout.tsx", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "embeddable", - "id": "def-public.openAddPanelFlyout.$1", + "id": "def-public.openAddFromLibraryFlyout.$1", "type": "Object", "tags": [], - "label": "{\n container,\n onAddPanel,\n onClose,\n}", + "label": "{\n container,\n onClose,\n}", "description": [], - "path": "src/plugins/embeddable/public/add_panel_flyout/open_add_panel_flyout.tsx", + "path": "src/plugins/embeddable/public/add_from_library/open_add_from_library_flyout.tsx", "deprecated": false, "trackAdoption": false, "children": [ { "parentPluginId": "embeddable", - "id": "def-public.openAddPanelFlyout.$1.container", + "id": "def-public.openAddFromLibraryFlyout.$1.container", "type": "Object", "tags": [], "label": "container", @@ -9087,45 +9087,13 @@ "text": "CanAddNewPanel" } ], - "path": "src/plugins/embeddable/public/add_panel_flyout/open_add_panel_flyout.tsx", + "path": "src/plugins/embeddable/public/add_from_library/open_add_from_library_flyout.tsx", "deprecated": false, "trackAdoption": false }, { "parentPluginId": "embeddable", - "id": "def-public.openAddPanelFlyout.$1.onAddPanel", - "type": "Function", - "tags": [], - "label": "onAddPanel", - "description": [], - "signature": [ - "((id: string) => void) | undefined" - ], - "path": "src/plugins/embeddable/public/add_panel_flyout/open_add_panel_flyout.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "embeddable", - "id": "def-public.openAddPanelFlyout.$1.onAddPanel.$1", - "type": "string", - "tags": [], - "label": "id", - "description": [], - "signature": [ - "string" - ], - "path": "src/plugins/embeddable/public/add_panel_flyout/open_add_panel_flyout.tsx", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - }, - { - "parentPluginId": "embeddable", - "id": "def-public.openAddPanelFlyout.$1.onClose", + "id": "def-public.openAddFromLibraryFlyout.$1.onClose", "type": "Function", "tags": [], "label": "onClose", @@ -9133,7 +9101,7 @@ "signature": [ "(() => void) | undefined" ], - "path": "src/plugins/embeddable/public/add_panel_flyout/open_add_panel_flyout.tsx", + "path": "src/plugins/embeddable/public/add_from_library/open_add_from_library_flyout.tsx", "deprecated": false, "trackAdoption": false, "children": [], @@ -9564,6 +9532,39 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "embeddable", + "id": "def-public.useAddFromLibraryTypes", + "type": "Function", + "tags": [], + "label": "useAddFromLibraryTypes", + "description": [], + "signature": [ + "() => ", + { + "pluginId": "savedObjectsFinder", + "scope": "public", + "docId": "kibSavedObjectsFinderPluginApi", + "section": "def-public.SavedObjectMetaData", + "text": "SavedObjectMetaData" + }, + "<", + { + "pluginId": "savedObjectsFinder", + "scope": "common", + "docId": "kibSavedObjectsFinderPluginApi", + "section": "def-common.FinderAttributes", + "text": "FinderAttributes" + }, + ">[]" + ], + "path": "src/plugins/embeddable/public/add_from_library/registry.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "embeddable", "id": "def-public.useEmbeddableFactory", @@ -13794,37 +13795,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "embeddable", - "id": "def-public.ReactEmbeddableSavedObject", - "type": "Type", - "tags": [], - "label": "ReactEmbeddableSavedObject", - "description": [], - "signature": [ - "{ onAdd: SOToEmbeddable; savedObjectMetaData: ", - { - "pluginId": "savedObjectsFinder", - "scope": "public", - "docId": "kibSavedObjectsFinderPluginApi", - "section": "def-public.SavedObjectMetaData", - "text": "SavedObjectMetaData" - }, - "<", - { - "pluginId": "savedObjectsFinder", - "scope": "common", - "docId": "kibSavedObjectsFinderPluginApi", - "section": "def-common.FinderAttributes", - "text": "FinderAttributes" - }, - ">; }" - ], - "path": "src/plugins/embeddable/public/lib/embeddable_saved_object_registry/embeddable_saved_object_registry.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "embeddable", "id": "def-public.SELECT_RANGE_TRIGGER", @@ -14361,12 +14331,12 @@ "children": [ { "parentPluginId": "embeddable", - "id": "def-public.EmbeddableSetup.registerReactEmbeddableSavedObject", + "id": "def-public.EmbeddableSetup.registerAddFromLibraryType", "type": "Function", "tags": [], - "label": "registerReactEmbeddableSavedObject", + "label": "registerAddFromLibraryType", "description": [ - "\nRegister an embeddable API saved object with the Add from library flyout.\n" + "\nRegister a saved object type with the \"Add from library\" flyout.\n" ], "signature": [ "({ onAdd, embeddableType, savedObjectType, savedObjectName, getIconForSavedObject, getSavedObjectSubType, getTooltipForSavedObject, }: { onAdd: SOToEmbeddable; embeddableType: string; savedObjectType: string; savedObjectName: string; getIconForSavedObject: (savedObject: ", + ">({ onAdd, savedObjectType, savedObjectName, getIconForSavedObject, getSavedObjectSubType, getTooltipForSavedObject, }: { onAdd: (container: ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "public", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-public.CanAddNewPanel", + "text": "CanAddNewPanel" + }, + ", savedObject: ", + { + "pluginId": "savedObjectsFinder", + "scope": "common", + "docId": "kibSavedObjectsFinderPluginApi", + "section": "def-common.SavedObjectCommon", + "text": "SavedObjectCommon" + }, + "<", + { + "pluginId": "savedObjectsFinder", + "scope": "common", + "docId": "kibSavedObjectsFinderPluginApi", + "section": "def-common.FinderAttributes", + "text": "FinderAttributes" + }, + ">) => void; savedObjectType: string; savedObjectName: string; getIconForSavedObject: (savedObject: ", { "pluginId": "savedObjectsFinder", "scope": "common", @@ -14412,13 +14406,21 @@ "children": [ { "parentPluginId": "embeddable", - "id": "def-public.EmbeddableSetup.registerReactEmbeddableSavedObject.$1", + "id": "def-public.EmbeddableSetup.registerAddFromLibraryType.$1", "type": "Object", "tags": [], "label": "__0", "description": [], "signature": [ - "{ onAdd: SOToEmbeddable; embeddableType: string; savedObjectType: string; savedObjectName: string; getIconForSavedObject: (savedObject: ", + "{ onAdd: (container: ", + { + "pluginId": "@kbn/presentation-containers", + "scope": "public", + "docId": "kibKbnPresentationContainersPluginApi", + "section": "def-public.CanAddNewPanel", + "text": "CanAddNewPanel" + }, + ", savedObject: ", { "pluginId": "savedObjectsFinder", "scope": "common", @@ -14426,9 +14428,15 @@ "section": "def-common.SavedObjectCommon", "text": "SavedObjectCommon" }, - ") => ", - "IconType", - "; getSavedObjectSubType?: ((savedObject: ", + "<", + { + "pluginId": "savedObjectsFinder", + "scope": "common", + "docId": "kibSavedObjectsFinderPluginApi", + "section": "def-common.FinderAttributes", + "text": "FinderAttributes" + }, + ">) => void; savedObjectType: string; savedObjectName: string; getIconForSavedObject: (savedObject: ", { "pluginId": "savedObjectsFinder", "scope": "common", @@ -14436,7 +14444,9 @@ "section": "def-common.SavedObjectCommon", "text": "SavedObjectCommon" }, - ") => string) | undefined; getTooltipForSavedObject?: ((savedObject: ", + ") => ", + "IconType", + "; getSavedObjectSubType?: ((savedObject: ", { "pluginId": "savedObjectsFinder", "scope": "common", @@ -14444,52 +14454,7 @@ "section": "def-common.SavedObjectCommon", "text": "SavedObjectCommon" }, - ") => string) | undefined; }" - ], - "path": "src/plugins/embeddable/public/lib/embeddable_saved_object_registry/embeddable_saved_object_registry.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "embeddable", - "id": "def-public.EmbeddableSetup.registerSavedObjectToPanelMethod", - "type": "Function", - "tags": [ - "deprecated" - ], - "label": "registerSavedObjectToPanelMethod", - "description": [], - "signature": [ - "(savedObjectType: string, method: SavedObjectToPanelMethod) => void" - ], - "path": "src/plugins/embeddable/public/plugin.tsx", - "deprecated": true, - "trackAdoption": false, - "references": [], - "returnComment": [], - "children": [ - { - "parentPluginId": "embeddable", - "id": "def-public.EmbeddableSetup.registerSavedObjectToPanelMethod.$1", - "type": "string", - "tags": [], - "label": "savedObjectType", - "description": [], - "path": "src/plugins/embeddable/public/registry/saved_object_to_panel_methods.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "embeddable", - "id": "def-public.EmbeddableSetup.registerSavedObjectToPanelMethod.$2", - "type": "Function", - "tags": [], - "label": "method", - "description": [], - "signature": [ - "(savedObject: ", + ") => string) | undefined; getTooltipForSavedObject?: ((savedObject: ", { "pluginId": "savedObjectsFinder", "scope": "common", @@ -14497,35 +14462,11 @@ "section": "def-common.SavedObjectCommon", "text": "SavedObjectCommon" }, - ") => { savedObjectId: string; } | Partial" + ") => string) | undefined; }" ], - "path": "src/plugins/embeddable/public/registry/saved_object_to_panel_methods.ts", + "path": "src/plugins/embeddable/public/add_from_library/registry.ts", "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "embeddable", - "id": "def-public.EmbeddableSetup.registerSavedObjectToPanelMethod.$2.$1", - "type": "Object", - "tags": [], - "label": "savedObject", - "description": [], - "signature": [ - { - "pluginId": "@kbn/content-management-utils", - "scope": "server", - "docId": "kibKbnContentManagementUtilsPluginApi", - "section": "def-server.SOWithMetadata", - "text": "SOWithMetadata" - }, - "" - ], - "path": "src/plugins/embeddable/public/registry/saved_object_to_panel_methods.ts", - "deprecated": false, - "trackAdoption": false - } - ] + "trackAdoption": false } ] }, @@ -14924,42 +14865,6 @@ ], "returnComment": [] }, - { - "parentPluginId": "embeddable", - "id": "def-public.EmbeddableStart.getReactEmbeddableSavedObjects", - "type": "Function", - "tags": [], - "label": "getReactEmbeddableSavedObjects", - "description": [ - "\n" - ], - "signature": [ - "() => IterableIterator<[string, ", - { - "pluginId": "embeddable", - "scope": "public", - "docId": "kibEmbeddablePluginApi", - "section": "def-public.ReactEmbeddableSavedObject", - "text": "ReactEmbeddableSavedObject" - }, - "]>" - ], - "path": "src/plugins/embeddable/public/plugin.tsx", - "deprecated": false, - "trackAdoption": false, - "children": [], - "returnComment": [ - "An iterator over all {@link ReactEmbeddableSavedObject }s that have been registered using {@link registerReactEmbeddableSavedObject }." - ] - }, { "parentPluginId": "embeddable", "id": "def-public.EmbeddableStart.getEmbeddableFactory", @@ -15187,14 +15092,6 @@ { "plugin": "canvas", "path": "x-pack/plugins/canvas/public/components/workpad_header/editor_menu/editor_menu.tsx" - }, - { - "plugin": "canvas", - "path": "x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx" - }, - { - "plugin": "canvas", - "path": "x-pack/plugins/canvas/public/components/embeddable_flyout/flyout.component.tsx" } ], "children": [], diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index bcf9a3e04d446..3dbd1a8a2225f 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 578 | 1 | 468 | 9 | +| 571 | 1 | 462 | 9 | ## Client diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index a17079616ba63..445a3ba3206be 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-12-05 +date: 2024-12-06 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 9f5599e782000..60381fa29a8ba 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-12-05 +date: 2024-12-06 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 318c9cb6aae4e..26040eaaf8e47 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index 00e0e88820aca..5018793959c74 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index f50584f7f362a..3e0486821f7b7 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index f309d4fb9419c..64e453acf94f5 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index b6df8b06085f1..f8fa69ffd2c9e 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index 11f50f8c71474..d84b316478bcb 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index f496e8286b0fe..12da0698e7074 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-12-05 +date: 2024-12-06 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 292a5f672cbab..310cd6caacc0a 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-12-05 +date: 2024-12-06 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 6a0a0e1f57232..66d19461575fa 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index dfe16304652cc..ac73f4b061dea 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-12-05 +date: 2024-12-06 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 fc2c49ea0a549..b0adcd0f1d958 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-12-05 +date: 2024-12-06 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 fe8cf1d70e8da..e546c2fe7c896 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-12-05 +date: 2024-12-06 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 c5b47ba0533fa..bd0ddb02d212e 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-12-05 +date: 2024-12-06 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 6e8caf2c8470a..2abbc691c0d34 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-12-05 +date: 2024-12-06 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 bf7bc8c457d54..24576b4e17ee4 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-12-05 +date: 2024-12-06 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 77fa8c8f1bfe7..8c236e2fe1b91 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-12-05 +date: 2024-12-06 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 f42788be47536..b4e2c6a6d6429 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-12-05 +date: 2024-12-06 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 9217f8db6d058..4134cce11b9b6 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-12-05 +date: 2024-12-06 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 d61b5f529b8b6..2d7116f4830ba 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-12-05 +date: 2024-12-06 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 8e4f6107b4e87..87ed8386920ef 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-12-05 +date: 2024-12-06 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 ae20f22e10cf7..da7f1b165b089 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-12-05 +date: 2024-12-06 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 cd5e581996cd1..3b78492c578ff 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-12-05 +date: 2024-12-06 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 8e1ce15251e29..4eab544bfe8ad 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-12-05 +date: 2024-12-06 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 4dae3493adbbc..965caad3de0bc 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-12-05 +date: 2024-12-06 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 8519484bec428..12b96d68cac9a 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-12-05 +date: 2024-12-06 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 8f9409bcf4e65..26d2d1bb7c121 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index b520762cb0979..8db4f1dc494f1 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index c7008a3d269fa..4b9bb3432d8fd 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-12-05 +date: 2024-12-06 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 af0071c018d86..51af544ffba71 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-12-05 +date: 2024-12-06 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 faae03200d380..d59497a7d797c 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-12-05 +date: 2024-12-06 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 fecbc7e88e1c9..1c3f5a427a7bd 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-12-05 +date: 2024-12-06 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 c8c37b5fd2b64..730802a55c8a0 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-12-05 +date: 2024-12-06 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 eeea8aed87340..0f285b6ce19b8 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-12-05 +date: 2024-12-06 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 353208af2fcfe..cfbb87ee8fe5a 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-12-05 +date: 2024-12-06 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 8c6493d6cb739..a92e3a94ec092 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-12-05 +date: 2024-12-06 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 676529442492a..18e62158fd876 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 246349bd87696..85d3fd175be20 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index bd88e1d2395c0..dd83af03e1035 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index c7bdce7d50ea3..b7f21d300a092 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-12-05 +date: 2024-12-06 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 8caea386dffa0..c89c05c4519d3 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-12-05 +date: 2024-12-06 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 db766c7df9012..9a0b2aaa3e938 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.devdocs.json b/api_docs/integration_assistant.devdocs.json index 3c6f41d4c4c03..31bb0f5b3f00b 100644 --- a/api_docs/integration_assistant.devdocs.json +++ b/api_docs/integration_assistant.devdocs.json @@ -318,7 +318,7 @@ "label": "AnalyzeLogsResponse", "description": [], "signature": [ - "{ results: { samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; additionalProcessors?: ", + "{ results: { samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; additionalProcessors?: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -357,7 +357,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }; }" + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }; }" ], "path": "x-pack/plugins/integration_assistant/common/api/build_integration/build_integration.gen.ts", "deprecated": false, @@ -384,7 +384,7 @@ "label": "CategorizationRequestBody", "description": [], "signature": [ - "{ connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", + "{ connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -581,7 +581,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }" + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts", "deprecated": false, @@ -625,7 +625,7 @@ "label": "EcsMappingRequestBody", "description": [], "signature": [ - "{ connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; additionalProcessors?: ", + "{ connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; additionalProcessors?: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -714,7 +714,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }" + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts", "deprecated": false, @@ -848,7 +848,7 @@ "label": "RelatedRequestBody", "description": [], "signature": [ - "{ connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", + "{ connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -912,7 +912,7 @@ "\nFormat of the provided log samples." ], "signature": [ - "{ name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }" + "{ name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts", "deprecated": false, @@ -929,7 +929,7 @@ "\nThe name of the log samples format." ], "signature": [ - "\"ndjson\" | \"json\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\" | \"cef\"" + "\"ndjson\" | \"json\" | \"csv\" | \"structured\" | \"unstructured\" | \"unsupported\" | \"cef\" | \"leef\" | \"fix\"" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts", "deprecated": false, @@ -971,7 +971,7 @@ }, ", Zod.ZodTypeDef, ", "ESProcessorItemInput", - ">, \"many\">>; results: Zod.ZodObject<{ samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; parsedSamples: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }, { samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }>; }, \"strip\", Zod.ZodTypeAny, { results: { samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; additionalProcessors?: ", + ">, \"many\">>; results: Zod.ZodObject<{ samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\", \"leef\", \"fix\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; parsedSamples: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }, { samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }>; }, \"strip\", Zod.ZodTypeAny, { results: { samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; additionalProcessors?: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -979,7 +979,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }, { results: { samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; additionalProcessors?: ", + "[] | undefined; }, { results: { samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; parsedSamples: string[]; }; additionalProcessors?: ", "ESProcessorItemInput", "[] | undefined; }>" ], @@ -1036,7 +1036,7 @@ "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", - "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; celInput: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>; redactVars: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }>>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\", \"leef\", \"fix\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; celInput: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>; redactVars: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }>>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1052,11 +1052,11 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1072,11 +1072,11 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1092,11 +1092,11 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }; }, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }; }, { integration: { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }; }>" + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/build_integration/build_integration.gen.ts", "deprecated": false, @@ -1151,7 +1151,7 @@ "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", - "[] | undefined; }>; connectorId: Zod.ZodString; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", + "[] | undefined; }>; connectorId: Zod.ZodString; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\", \"leef\", \"fix\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1167,7 +1167,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", + "[] | undefined; }; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", @@ -1456,7 +1456,7 @@ "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", - "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; celInput: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>; redactVars: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }>>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\", \"leef\", \"fix\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; celInput: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>; redactVars: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }>>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1472,11 +1472,11 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }>" + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts", "deprecated": false, @@ -1506,7 +1506,7 @@ "label": "EcsMappingRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ packageName: Zod.ZodString; dataStreamName: Zod.ZodString; rawSamples: Zod.ZodArray; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; mapping: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; additionalProcessors: Zod.ZodOptional; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\", \"leef\", \"fix\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; mapping: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>>; additionalProcessors: Zod.ZodOptional, \"many\">>; connectorId: Zod.ZodString; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; additionalProcessors?: ", + ">, \"many\">>; connectorId: Zod.ZodString; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; additionalProcessors?: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1524,7 +1524,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; additionalProcessors?: ", + "[] | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; mapping?: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\"> | undefined; additionalProcessors?: ", "ESProcessorItemInput", "[] | undefined; }>" ], @@ -1716,7 +1716,7 @@ "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", - "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; celInput: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>; redactVars: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }>>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }>; docs: Zod.ZodArray, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>, \"many\">; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\", \"leef\", \"fix\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; celInput: Zod.ZodOptional, Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">>; redactVars: Zod.ZodArray; }, \"strip\", Zod.ZodTypeAny, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }, { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; }>>; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1732,11 +1732,11 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }, { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }>, \"many\">; logo: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1752,11 +1752,11 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", + "[] | undefined; }; docs: Zod.objectOutputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }, { name: string; title: string; description: string; dataStreams: { name: string; title: string; description: string; inputTypes: (\"kafka\" | \"aws-cloudwatch\" | \"aws-s3\" | \"azure-blob-storage\" | \"azure-eventhub\" | \"cel\" | \"cloudfoundry\" | \"filestream\" | \"gcp-pubsub\" | \"gcs\" | \"http_endpoint\" | \"journald\" | \"tcp\" | \"udp\")[]; rawSamples: string[]; pipeline: { processors: ", "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", - "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }>" + "[] | undefined; }; docs: Zod.objectInputType<{}, Zod.ZodUnknown, \"strip\">[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; celInput?: { program: string; stateSettings: {} & { [k: string]: unknown; }; redactVars: string[]; } | undefined; }[]; logo?: string | undefined; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts", "deprecated": false, @@ -1881,7 +1881,7 @@ "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", - "[] | undefined; }>; connectorId: Zod.ZodString; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", + "[] | undefined; }>; connectorId: Zod.ZodString; samplesFormat: Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\", \"leef\", \"fix\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>; langSmithOptions: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", { "pluginId": "integrationAssistant", "scope": "common", @@ -1897,7 +1897,7 @@ "section": "def-common.ESProcessorItem", "text": "ESProcessorItem" }, - "[] | undefined; }; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", + "[] | undefined; }; langSmithOptions?: { apiKey: string; projectName: string; } | undefined; }, { connectorId: string; packageName: string; rawSamples: string[]; samplesFormat: { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }; dataStreamName: string; currentPipeline: { processors: ", "ESProcessorItemInput", "[]; version?: number | undefined; name?: string | undefined; description?: string | undefined; on_failure?: ", "ESProcessorItemInput", @@ -2011,7 +2011,7 @@ "label": "SamplesFormat", "description": [], "signature": [ - "Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>" + "Zod.ZodObject<{ name: Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\", \"leef\", \"fix\"]>; multiline: Zod.ZodOptional; header: Zod.ZodOptional; columns: Zod.ZodOptional>; json_path: Zod.ZodOptional>; }, \"strip\", Zod.ZodTypeAny, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }, { name: \"unsupported\" | \"json\" | \"ndjson\" | \"csv\" | \"structured\" | \"unstructured\" | \"cef\" | \"leef\" | \"fix\"; columns?: string[] | undefined; header?: boolean | undefined; multiline?: boolean | undefined; json_path?: string[] | undefined; }>" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts", "deprecated": false, @@ -2026,7 +2026,7 @@ "label": "SamplesFormatName", "description": [], "signature": [ - "Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\"]>" + "Zod.ZodEnum<[\"ndjson\", \"json\", \"csv\", \"structured\", \"unstructured\", \"unsupported\", \"cef\", \"leef\", \"fix\"]>" ], "path": "x-pack/plugins/integration_assistant/common/api/model/common_attributes.gen.ts", "deprecated": false, diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index bbbf11ed39d71..44c5487cf9eb8 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index e3f71b62a81b1..8286c05585d9b 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/inventory.mdx b/api_docs/inventory.mdx index 358e44bec724e..f224d9ed82c1c 100644 --- a/api_docs/inventory.mdx +++ b/api_docs/inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inventory title: "inventory" image: https://source.unsplash.com/400x175/?github description: API docs for the inventory plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inventory'] --- import inventoryObj from './inventory.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index c75d1d6b30873..63f3eb9b8088d 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 80041fff6f649..1443fcdef5edb 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index 7bd5ce2e24be0..e4afa44b4e9f1 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant.mdx b/api_docs/kbn_ai_assistant.mdx index 2127ba43fe97f..279a5ddfcb658 100644 --- a/api_docs/kbn_ai_assistant.mdx +++ b/api_docs/kbn_ai_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant title: "@kbn/ai-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant'] --- import kbnAiAssistantObj from './kbn_ai_assistant.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant_common.mdx b/api_docs/kbn_ai_assistant_common.mdx index 6dae3837f8265..6bab1ec5076db 100644 --- a/api_docs/kbn_ai_assistant_common.mdx +++ b/api_docs/kbn_ai_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant-common title: "@kbn/ai-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-common'] --- import kbnAiAssistantCommonObj from './kbn_ai_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index b7c6fb7e6dab4..34f7f34d06613 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 10b46b612c11b..05dbbde89343c 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index b3a6437a88c2c..13a36e29cb6c2 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 7b03075b89e7a..ea9938823ca6e 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index f363044ec29bb..ae35eb28c653a 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 436cdfa5ac8b8..2c2b2d110f03d 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-12-05 +date: 2024-12-06 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 b4e927000fdad..4bf7e3b3a75a0 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-12-05 +date: 2024-12-06 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 32a2c5620280c..e24ff6865370a 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 705268d6772eb..246421c1177e4 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 03a37f44fe7c4..8bd78a8558332 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-12-05 +date: 2024-12-06 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 2a0ed19749522..c3c482e9d381d 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 2bc6282fc5ce3..76acd572a9d76 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 5789a45a790bf..e6982ee568828 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 56a6621ea877a..1e4f7eed67e07 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 599aa2fb083dc..9a76e2464ae39 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-12-05 +date: 2024-12-06 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 ffcac4379cef7..d30438bcbbee9 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index fb96df17d1788..71a434402d8fb 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index f1a9e5e8c8fd3..d883a2eae5827 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 0a520cce01d44..f7b61d8f03157 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 7d18395a49575..60c28fdaafa7d 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-12-05 +date: 2024-12-06 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 e97ce07efcea2..2a5b0c8e09526 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-12-05 +date: 2024-12-06 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 1ee103258509d..18a57104a56e9 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-12-05 +date: 2024-12-06 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 7a2a97b5e03e9..585dda7d943ab 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-12-05 +date: 2024-12-06 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 7f23851f916f3..15cca1a085425 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index 823e8c539063e..dc9f92a293af9 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 8d761c6213a28..5abd73d532ac1 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-12-05 +date: 2024-12-06 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 eceff927c7476..3e8800d8f41c6 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-12-05 +date: 2024-12-06 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 5182a6bc65785..64589d343e7fb 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-12-05 +date: 2024-12-06 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 37384a9fb79fe..1d3005c6326f6 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-12-05 +date: 2024-12-06 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 eec85e6d1ec36..4c1f60fd13c1e 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-12-05 +date: 2024-12-06 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 e6ae95bf722a1..93e6889204136 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-12-05 +date: 2024-12-06 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 eef9901d343f6..87d2dd36a06a0 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 7f538e041d2c3..30846c9594ab0 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index 3061b19b9b5b6..85ee93a5d9b91 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_graph.mdx b/api_docs/kbn_cloud_security_posture_graph.mdx index 0c4de1cb4f303..56661f8e523c4 100644 --- a/api_docs/kbn_cloud_security_posture_graph.mdx +++ b/api_docs/kbn_cloud_security_posture_graph.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-graph title: "@kbn/cloud-security-posture-graph" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-graph plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-graph'] --- import kbnCloudSecurityPostureGraphObj from './kbn_cloud_security_posture_graph.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 4e2366ef40ef0..5a243940d2f8e 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-12-05 +date: 2024-12-06 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 69f24d27ba3ed..2434acb034227 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-12-05 +date: 2024-12-06 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 a5d4ee78e778b..a1c3a51ef2412 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-12-05 +date: 2024-12-06 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 18f3e55f51bce..a74ad9582fe0f 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-12-05 +date: 2024-12-06 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 0d610b960ae19..74f9d5d466ba7 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-12-05 +date: 2024-12-06 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 2a9d3e05c72a4..7b9a56096c4b8 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 e5bc89bc83666..bb945d709d0d1 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-12-05 +date: 2024-12-06 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 3161c83420fab..75a1799fc1799 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index 8d37ce7a9090d..0bebcefb6f6d7 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index a161d2ea1d6db..0897acf0fc366 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_common.mdx b/api_docs/kbn_content_management_favorites_common.mdx index 73d3db4f243ab..5d9ccdc5b9c2b 100644 --- a/api_docs/kbn_content_management_favorites_common.mdx +++ b/api_docs/kbn_content_management_favorites_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-common title: "@kbn/content-management-favorites-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-common'] --- import kbnContentManagementFavoritesCommonObj from './kbn_content_management_favorites_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 001d4187cdb59..72d8823d7a0fe 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index 422aa03144436..61ac01279b33c 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 8e6097f33c5c7..492ff1b58682a 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-12-05 +date: 2024-12-06 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 88c4312a3f1fa..8d7a2cb9a1307 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-12-05 +date: 2024-12-06 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 759a66f28587b..69d2b9a5aa172 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-12-05 +date: 2024-12-06 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 cbe6712566e89..5e7a5f078eeac 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index ef4957429848d..0a82e24956f61 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 33a653d39a967..46404ef200306 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 a3832c4febbaa..6a4c0cb00be67 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 cf3c7a9263d90..02008f7e7247e 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 617fa01449b91..2a5d4a41364aa 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 59108e360bacc..6872bb5a21951 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-12-05 +date: 2024-12-06 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 4dbe3607886d8..51cdbce4c3946 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 07430df9d07f2..962b52d2ed105 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 fcb768fc96bad..36fdbd3f48bbc 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 a40c22b14fbb6..e090d06131591 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 b584e1505faa2..839164df37597 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 94c96cb04f150..6bd0e81a034b2 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_core_apps_browser_internal.devdocs.json index 18fb1dea37623..60ccac935c152 100644 --- a/api_docs/kbn_core_apps_browser_internal.devdocs.json +++ b/api_docs/kbn_core_apps_browser_internal.devdocs.json @@ -99,7 +99,7 @@ "label": "start", "description": [], "signature": [ - "({ application, docLinks, http, notifications, uiSettings, analytics, i18n, theme, }: ", + "({ application, docLinks, http, notifications, uiSettings, ...startDeps }: ", { "pluginId": "@kbn/core-apps-browser-internal", "scope": "public", @@ -118,7 +118,7 @@ "id": "def-public.CoreAppsService.start.$1", "type": "Object", "tags": [], - "label": "{\n application,\n docLinks,\n http,\n notifications,\n uiSettings,\n analytics,\n i18n,\n theme,\n }", + "label": "{\n application,\n docLinks,\n http,\n notifications,\n uiSettings,\n ...startDeps\n }", "description": [], "signature": [ { @@ -413,6 +413,26 @@ "path": "packages/core/apps/core-apps-browser-internal/src/core_app.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-apps-browser-internal", + "id": "def-public.CoreAppsServiceStartDeps.userProfile", + "type": "Object", + "tags": [], + "label": "userProfile", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + } + ], + "path": "packages/core/apps/core-apps-browser-internal/src/core_app.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index d682dff24480c..ed35b9828609d 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 23 | 0 | 22 | 0 | +| 24 | 0 | 23 | 0 | ## Client diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index 0b4146c285cc8..40d7843426253 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 77743705ed3a9..beeda8706b747 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 b1fc695a87a2c..1e43c00c289a4 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 bf98cd68db054..6d9da022c3a73 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-12-05 +date: 2024-12-06 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 bae54f0339b9a..121cdb4e362f0 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 9b89a6db2d7f9..37071a03c4746 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 b8bf30f841ca5..79a3fa77bb9af 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 eec671caf8033..7d111c4f6cafe 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-12-05 +date: 2024-12-06 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 953a27c63b3fd..a34bdda58520f 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-12-05 +date: 2024-12-06 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 c560507ef80ea..f29d3c76dc9e1 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_core_chrome_browser.devdocs.json index 113afb7d94fca..d4a707c96cdb1 100644 --- a/api_docs/kbn_core_chrome_browser.devdocs.json +++ b/api_docs/kbn_core_chrome_browser.devdocs.json @@ -3765,7 +3765,7 @@ "label": "AppDeepLinkId", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "packages/core/chrome/core-chrome-browser/src/project_navigation.ts", "deprecated": false, diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index b125a4e5e5fe9..4d4c613adb41b 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 2e071f814565d..8e81caa429718 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 81f63fae5fd40..66f12af03a367 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 ff2ef81681ee5..79322ec1da4f8 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 e759b5239a435..03e864fcccebd 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 4861840b61679..9a7b7d1382191 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 4a19096576956..d4a00e08013cc 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-12-05 +date: 2024-12-06 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 8f6ef2a0bda5c..f1ee7cb659e2e 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-12-05 +date: 2024-12-06 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 673c8088714c0..065a7bb164afd 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 5240f99dd403a..1a66199f5b780 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 29ec68ba35d27..75eed113b3c0a 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 84df54ab8e49e..fbfdc9ef49e3c 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 b589c715a6429..1c71369127609 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_core_deprecations_common.devdocs.json index 5d0eb866c4850..99c70aa28b9d9 100644 --- a/api_docs/kbn_core_deprecations_common.devdocs.json +++ b/api_docs/kbn_core_deprecations_common.devdocs.json @@ -112,7 +112,23 @@ "\nThe description message to be displayed for the deprecation.\nCheck the README for writing deprecations in `src/core/server/deprecations/README.mdx`" ], "signature": [ - "string | string[]" + "string | ", + { + "pluginId": "@kbn/core-deprecations-common", + "scope": "common", + "docId": "kibKbnCoreDeprecationsCommonPluginApi", + "section": "def-common.DeprecationDetailsMessage", + "text": "DeprecationDetailsMessage" + }, + " | (string | ", + { + "pluginId": "@kbn/core-deprecations-common", + "scope": "common", + "docId": "kibKbnCoreDeprecationsCommonPluginApi", + "section": "def-common.DeprecationDetailsMessage", + "text": "DeprecationDetailsMessage" + }, + ")[]" ], "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", "deprecated": false, @@ -257,6 +273,45 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.DeprecationDetailsMessage", + "type": "Interface", + "tags": [], + "label": "DeprecationDetailsMessage", + "description": [], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.DeprecationDetailsMessage.type", + "type": "CompoundType", + "tags": [], + "label": "type", + "description": [], + "signature": [ + "\"text\" | \"markdown\"" + ], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-deprecations-common", + "id": "def-common.DeprecationDetailsMessage.content", + "type": "string", + "tags": [], + "label": "content", + "description": [], + "path": "packages/core/deprecations/core-deprecations-common/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-deprecations-common", "id": "def-common.DeprecationsGetResponse", diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index 4c7c5678cea19..853fe70c65e83 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 20 | 0 | 12 | 0 | +| 23 | 0 | 15 | 0 | ## Common diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index 24078b4eea76e..01f892f972c08 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-12-05 +date: 2024-12-06 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 fb2be986c9134..b8ce816d39238 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 32c1f425f8faf..5b26f159a9891 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 b93e11588d665..dd5d3ef884a12 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 1763fc52fd0a0..6ad71580ad5f5 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 f93080392e2e1..09a5117b3ef63 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-12-05 +date: 2024-12-06 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 8eeb6aae2698e..aa52d64a1c96d 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 04c40d6fed6d3..bc695898f5cc9 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 207ebe5e5fdf9..271eaf3542264 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 be3482fd4d8a2..d182efb1a345c 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-12-05 +date: 2024-12-06 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 4f1cc7ed6f996..9e6c080de2bce 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 372b62a1600fb..ce9a2bd344560 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 e4907cb59999e..3fb114a234418 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 ce2c7c8a9d902..012d40a57257c 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 554bb432d4406..6bff148f6a8d8 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 b215bc409d44b..a48ea46d9229a 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 b72ef85c3b93a..de05967cf8084 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 a2ca12f0d754c..b7e08385c4d55 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-12-05 +date: 2024-12-06 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 fa00ae4b9c8a7..ecb690bd6b057 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-12-05 +date: 2024-12-06 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 9a5e33f5a5b6c..91164aaa85e09 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 cccff5fe48058..38faf3d6b6bb9 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 030f53e0d5b2b..2cc95bc5dd106 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 d3735a2615d17..b9c4b0e1efee4 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser.mdx b/api_docs/kbn_core_feature_flags_browser.mdx index e6fc3ef698ccd..1ec477c513b69 100644 --- a/api_docs/kbn_core_feature_flags_browser.mdx +++ b/api_docs/kbn_core_feature_flags_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser title: "@kbn/core-feature-flags-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser'] --- import kbnCoreFeatureFlagsBrowserObj from './kbn_core_feature_flags_browser.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_internal.mdx b/api_docs/kbn_core_feature_flags_browser_internal.mdx index 9614fcb0f9451..45840458a7519 100644 --- a/api_docs/kbn_core_feature_flags_browser_internal.mdx +++ b/api_docs/kbn_core_feature_flags_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-internal title: "@kbn/core-feature-flags-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-internal'] --- import kbnCoreFeatureFlagsBrowserInternalObj from './kbn_core_feature_flags_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_mocks.mdx b/api_docs/kbn_core_feature_flags_browser_mocks.mdx index 4216d28c0f163..ebcd424af5e4d 100644 --- a/api_docs/kbn_core_feature_flags_browser_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-mocks title: "@kbn/core-feature-flags-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-mocks'] --- import kbnCoreFeatureFlagsBrowserMocksObj from './kbn_core_feature_flags_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server.mdx b/api_docs/kbn_core_feature_flags_server.mdx index d42014a9d7d52..8c0d008a25a1e 100644 --- a/api_docs/kbn_core_feature_flags_server.mdx +++ b/api_docs/kbn_core_feature_flags_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server title: "@kbn/core-feature-flags-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server'] --- import kbnCoreFeatureFlagsServerObj from './kbn_core_feature_flags_server.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_internal.mdx b/api_docs/kbn_core_feature_flags_server_internal.mdx index b012e68abc8e6..6dc661b644a26 100644 --- a/api_docs/kbn_core_feature_flags_server_internal.mdx +++ b/api_docs/kbn_core_feature_flags_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-internal title: "@kbn/core-feature-flags-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-internal'] --- import kbnCoreFeatureFlagsServerInternalObj from './kbn_core_feature_flags_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_mocks.mdx b/api_docs/kbn_core_feature_flags_server_mocks.mdx index 74ec68ae732b5..deebd591d2e0c 100644 --- a/api_docs/kbn_core_feature_flags_server_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-mocks title: "@kbn/core-feature-flags-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-mocks'] --- import kbnCoreFeatureFlagsServerMocksObj from './kbn_core_feature_flags_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 93317a929f573..086eeed5e86ac 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 b87b7069f235f..b096e4b532445 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 85f080bef0e0d..2625dd00f32fe 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 f43071f0b5ad4..48d0583e1d741 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-12-05 +date: 2024-12-06 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 7d2a5791a5542..d70b9783b1cda 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 ebd3121542acb..beea6b193618f 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-12-05 +date: 2024-12-06 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 304e9829906c0..99bc84ea7867b 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-12-05 +date: 2024-12-06 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 3777e8370cfb9..3ae8f1d85b70c 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 b871c5844280a..29c17f230efa1 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 65c2d797fd88e..ed17137294d4f 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 3b6d88a4848e5..843d4f0811e14 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 dd55a6904231d..293cae2d49b91 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -4677,6 +4677,10 @@ "plugin": "logstash", "path": "x-pack/plugins/logstash/server/routes/pipelines/list.ts" }, + { + "plugin": "visTypeTimeseries", + "path": "src/plugins/vis_types/timeseries/server/routes/fields.ts" + }, { "plugin": "metricsDataAccess", "path": "x-pack/plugins/observability_solution/metrics_data_access/server/lib/adapters/framework/kibana_framework_adapter.ts" @@ -4685,10 +4689,6 @@ "plugin": "metricsDataAccess", "path": "x-pack/plugins/observability_solution/metrics_data_access/server/routes/metric_indices/index.ts" }, - { - "plugin": "visTypeTimeseries", - "path": "src/plugins/vis_types/timeseries/server/routes/fields.ts" - }, { "plugin": "infra", "path": "x-pack/plugins/observability_solution/infra/server/lib/adapters/framework/kibana_framework_adapter.ts" @@ -7299,14 +7299,14 @@ "plugin": "logstash", "path": "x-pack/plugins/logstash/server/routes/pipelines/delete.ts" }, - { - "plugin": "metricsDataAccess", - "path": "x-pack/plugins/observability_solution/metrics_data_access/server/lib/adapters/framework/kibana_framework_adapter.ts" - }, { "plugin": "visTypeTimeseries", "path": "src/plugins/vis_types/timeseries/server/routes/vis.ts" }, + { + "plugin": "metricsDataAccess", + "path": "x-pack/plugins/observability_solution/metrics_data_access/server/lib/adapters/framework/kibana_framework_adapter.ts" + }, { "plugin": "infra", "path": "x-pack/plugins/observability_solution/infra/server/lib/adapters/framework/kibana_framework_adapter.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index d53c431bc997c..c0359a6d9c549 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-12-05 +date: 2024-12-06 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 9f7800f0c42ed..44741b3bb74ba 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 eb5b1b4d22b1e..aa71827ffbf16 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_utils.mdx b/api_docs/kbn_core_http_server_utils.mdx index 6ae3c6c8bdc17..7f252527462ba 100644 --- a/api_docs/kbn_core_http_server_utils.mdx +++ b/api_docs/kbn_core_http_server_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-utils title: "@kbn/core-http-server-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-utils'] --- import kbnCoreHttpServerUtilsObj from './kbn_core_http_server_utils.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index e635398eccc7a..b1382123b70f2 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 3d0e8bb5c5054..7d3b55a255bf3 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 3fec91b07b63c..f5d3881f1ae05 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-12-05 +date: 2024-12-06 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 9c117c90e46e0..9c60535ff0985 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 33cb92b0bbf4c..c7a73613ed672 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 197b20f5decf4..50fe0fe010841 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 3dc7c57b7f83a..bceed51eb2fc9 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 c0ca84a0076f1..46822f3eb6d58 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 9c9397f5c0497..64404b9a4954d 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 546bae9e59052..3667e422664eb 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 8e3ca85eaeb44..dd9a2531fa5b5 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-12-05 +date: 2024-12-06 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 e6a888711379c..b39f4320ba254 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 de4833fdf3a65..0cb685b7e66fb 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 e94c2b96f1186..82fcfa0257a7f 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 7c9076fd10e6c..511ddedf0c87c 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-12-05 +date: 2024-12-06 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 b01050d97c3a3..c36f0cf287962 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 96472497405a0..1138806de35d7 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 5d2e583a447b3..8583413cde690 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 58fe2c7c7688a..21df0a6422218 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 654b4a5202382..ca8b2027ba345 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-12-05 +date: 2024-12-06 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 bc7bfdca9165d..0c16bd9ec0e22 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 4f55d8999fe14..2cbe948cfb2c4 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 a68f2a7115f09..e489bbc5e576d 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 5ffaad7010caa..7d36145505eae 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-12-05 +date: 2024-12-06 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 a66d2379f3b7b..c7dca3168d578 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 307edfb975a03..b460591e808db 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 0386b6ac66e02..9577641032bf9 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_core_notifications_browser_internal.devdocs.json index 6257757abbbd7..33ebcc7700734 100644 --- a/api_docs/kbn_core_notifications_browser_internal.devdocs.json +++ b/api_docs/kbn_core_notifications_browser_internal.devdocs.json @@ -78,7 +78,7 @@ "label": "start", "description": [], "signature": [ - "({ analytics, i18n: i18nDep, overlays, theme, targetDomElement, }: ", + "({ overlays, targetDomElement, ...startDeps }: ", "StartDeps", ") => ", { @@ -98,7 +98,7 @@ "id": "def-public.NotificationsService.start.$1", "type": "Object", "tags": [], - "label": "{\n analytics,\n i18n: i18nDep,\n overlays,\n theme,\n targetDomElement,\n }", + "label": "{ overlays, targetDomElement, ...startDeps }", "description": [], "signature": [ "StartDeps" @@ -804,7 +804,7 @@ "label": "NotificationsServiceContract", "description": [], "signature": [ - "{ start: ({ analytics, i18n: i18nDep, overlays, theme, targetDomElement, }: ", + "{ start: ({ overlays, targetDomElement, ...startDeps }: ", "StartDeps", ") => ", { diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index 444a44e81f75e..b88561ecc568a 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 277b8c8c7a8f3..09615036ab1dd 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 852b22548654b..aa7ca03818451 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 77a7444974c7b..768522477d586 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 56c9435e72204..8e70c3b8feea5 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 3da12cdd78ad2..3d245a5fb5f40 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 7cd76f5393ac2..1502d22591f58 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 542ec6f810c4d..4ddc607b640b3 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 cd1e406d4ef22..0973fc347a1a0 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-12-05 +date: 2024-12-06 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 c7815ec645a6d..efaf9b34fd5d2 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-12-05 +date: 2024-12-06 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 e38218fc0d999..c370b8b213d86 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 93b2a3e0df091..ea7c6c2ff1015 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-12-05 +date: 2024-12-06 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 df370cdc30d64..093e98427474a 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser.mdx b/api_docs/kbn_core_rendering_browser.mdx index d0fba64e00ba0..d8a4eddac60b8 100644 --- a/api_docs/kbn_core_rendering_browser.mdx +++ b/api_docs/kbn_core_rendering_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser title: "@kbn/core-rendering-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser'] --- import kbnCoreRenderingBrowserObj from './kbn_core_rendering_browser.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index 5771b78a30fa9..e9f4b08efcca4 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 a00f4a050123e..42804b0391c7e 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 518bac917d8c7..d2cfa5fbc0a05 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 9ededd3289f77..e7888be44888b 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 c18b4d37b20c3..bc5087efe15bf 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 f6e8e8d522a41..3617346d57e98 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-12-05 +date: 2024-12-06 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 fd07c7706410d..035f273dc1d51 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 1d54509a60e04..603b1435467b4 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 d764dcb29ce2c..ca1e27cb9e6d2 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 4a5cfacbfe05a..ce33907923295 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 60087c614efa3..bf8768060123f 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 356f860780c85..345a7c3e33a8b 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 cf0cb5f060a53..cd7e6d1a3ecb8 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-12-05 +date: 2024-12-06 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 a08d13c9ce455..d96305bf2c176 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 582f622e8f24c..95978057643b7 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 1738eda766167..f27a5f3d95c15 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 e06c6ffc6ba35..1d3f7db561e41 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 ba262035a1c0f..1937cfde7ca9e 100644 --- a/api_docs/kbn_core_saved_objects_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_server.devdocs.json @@ -10763,10 +10763,6 @@ "plugin": "maps", "path": "x-pack/plugins/maps/server/saved_objects/setup_saved_objects.ts" }, - { - "plugin": "infra", - "path": "x-pack/plugins/observability_solution/infra/server/lib/sources/saved_object_type.ts" - }, { "plugin": "visualizations", "path": "src/plugins/visualizations/server/saved_objects/visualization.ts" @@ -10775,6 +10771,10 @@ "plugin": "apmDataAccess", "path": "x-pack/plugins/observability_solution/apm_data_access/server/saved_objects/apm_indices.ts" }, + { + "plugin": "infra", + "path": "x-pack/plugins/observability_solution/infra/server/lib/sources/saved_object_type.ts" + }, { "plugin": "securitySolution", "path": "x-pack/plugins/security_solution/server/lib/timeline/saved_object_mappings/timelines.ts" diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index f709e4cf3dcc8..249ac180f56a2 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-12-05 +date: 2024-12-06 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 01cf64367b930..528a909a1b4ca 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 2eb1b6207be4c..fef48cdddd95e 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 c186fe40e4981..c4cf0d406f207 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index b7c9af8be4dde..739c5b4addde4 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 819a604f933a0..87631473d521c 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 9ef6baeef9af5..942872c584cf7 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index ade892a629634..edda096c7aa52 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index bbb402db93bb5..469b762b583e6 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 5c8aae302f6c8..3deadd05d9016 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index d4ebdd7093d4e..1f7fd72f6e6e4 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 25d492eec2cea..ec94f415e22e3 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index f8a6763467762..74d90c74ca11a 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-12-05 +date: 2024-12-06 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 72408f30f2a27..dd804d7137cb6 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 91075bc408082..876bc7ee18cad 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 b7dc893f5e661..23979de09354f 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-12-05 +date: 2024-12-06 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 89c3d76c580bc..0697cd6c4acc1 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 76610bb39ebb2..b114b8d3b01ba 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-12-05 +date: 2024-12-06 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 e0e62e3711a64..f2c860cbada26 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-12-05 +date: 2024-12-06 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 f05defa4a9c15..3105c1d20b319 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-12-05 +date: 2024-12-06 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 6524d0dad75f6..0231283ae4ae8 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 d050dd18c6903..5f52f908f2f73 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 3b412c2e35f2b..5be2861a86885 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 55239a0925ac7..4ed1619f0ba7d 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 a09e61f0614d9..6b8fa0a78ed2e 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 a23c8f2e760da..ebcdc723d413a 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 f07c8635c04a5..6445c1a20906b 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-12-05 +date: 2024-12-06 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 33c63a5136f77..266f76e6a7a0b 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-12-05 +date: 2024-12-06 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 e79c1e5558596..92431a9cad8cf 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 1829385b680e2..e39b2aeb8d0cb 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 bfb317da8da3f..f893aab9474f8 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-12-05 +date: 2024-12-06 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 e77142009e897..c2e517e80f633 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 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 7d34f39d430d3..a60937c527624 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index 74273043edcf8..a8315237734b4 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index cdcf484a5773a..51e2722fbce50 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index f711c7728abba..776891e576cf0 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 5771840dd7fdc..6a7bf97a3b96d 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index 1b3748d7e396c..fa122afffc518 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index d537c7cc88adc..bbc93cf5b7c42 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index a3803242e9fcc..cd4a48ed1bf92 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 3a80ee49393c9..399c73764f3dd 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index bf6260a407bee..9cf7f3029e5c6 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 8434d24e33989..79c5aad064a76 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-12-05 +date: 2024-12-06 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 66ed4410036aa..42697a33a335c 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 751e134214d1a..03e3a8b0b131f 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-12-05 +date: 2024-12-06 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 5edbcb21820aa..fceb5fc766a23 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-12-05 +date: 2024-12-06 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 5c58ff51d786a..dbde923ff8e99 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-12-05 +date: 2024-12-06 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 7c9548979c262..8659f31b0b00d 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-12-05 +date: 2024-12-06 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 db6539f65359b..ae797c2c5dc07 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-12-05 +date: 2024-12-06 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 a70a5c5713dd5..3d1f161ccb137 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-12-05 +date: 2024-12-06 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 fff86f338f532..b2a0edf5f1c30 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 0a262e45d7b90..048164869428f 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-12-05 +date: 2024-12-06 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 d9efc3af68e78..4c6944d753aec 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-12-05 +date: 2024-12-06 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 eb0611c880bc2..830f427690fac 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index fa840d7e95990..c44639b431e8d 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index eed1cf6cf5816..2d914e3a36c7e 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-12-05 +date: 2024-12-06 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 f76c4832b8bdd..26c704a3beaf4 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-12-05 +date: 2024-12-06 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 86d8cb02fb077..01186ffc34fd5 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.devdocs.json b/api_docs/kbn_deeplinks_search.devdocs.json index 99f4a86079d7f..70bce6e571b07 100644 --- a/api_docs/kbn_deeplinks_search.devdocs.json +++ b/api_docs/kbn_deeplinks_search.devdocs.json @@ -30,7 +30,7 @@ "label": "DeepLinkId", "description": [], "signature": [ - "\"appSearch\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\"" + "\"appSearch\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\"" ], "path": "packages/deeplinks/search/deep_links.ts", "deprecated": false, @@ -232,6 +232,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/deeplinks-search", + "id": "def-common.ES_SEARCH_PLAYGROUND_ID", + "type": "string", + "tags": [], + "label": "ES_SEARCH_PLAYGROUND_ID", + "description": [], + "signature": [ + "\"searchPlayground\"" + ], + "path": "packages/deeplinks/search/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/deeplinks-search", "id": "def-common.SEARCH_AI_SEARCH", diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 0c5aa89e27bac..ce84e5b22de3c 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-ki | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 21 | 0 | 21 | 0 | +| 22 | 0 | 22 | 0 | ## Common diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 0afa887c2cfa2..1b63acdc45fc3 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index d310a678a3511..788f80c818b1a 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index fb757ed168867..1389f742d9300 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-12-05 +date: 2024-12-06 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 3b66a3d944e06..85bfe3573cec5 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-12-05 +date: 2024-12-06 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 a1fef9959cf2a..c338264750511 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-12-05 +date: 2024-12-06 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 246e0bd5e365e..9c02a24259cf3 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-12-05 +date: 2024-12-06 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 16fe3b1ab4428..0429492780a59 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-12-05 +date: 2024-12-06 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 715be8b8e72a6..66aacae98cc47 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-12-05 +date: 2024-12-06 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 04a4817f24048..7b608ef141666 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-12-05 +date: 2024-12-06 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 b628230f9ab44..d725eef2c1ace 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_contextual_components.mdx b/api_docs/kbn_discover_contextual_components.mdx index dd540f89dd994..80a4fbe2eaf92 100644 --- a/api_docs/kbn_discover_contextual_components.mdx +++ b/api_docs/kbn_discover_contextual_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-contextual-components title: "@kbn/discover-contextual-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-contextual-components plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-contextual-components'] --- import kbnDiscoverContextualComponentsObj from './kbn_discover_contextual_components.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 832e2bd9dd49e..e88a1b9c6f6cd 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index eb3ea0aa8619c..9e7a1ab119ce3 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -38,7 +38,7 @@ "text": "DocLinks" } ], - "path": "packages/kbn-doc-links/src/get_doc_links.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -52,7 +52,7 @@ "signature": [ "GetDocLinkOptions" ], - "path": "packages/kbn-doc-links/src/get_doc_links.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -80,7 +80,7 @@ "text": "DocLinksMeta" } ], - "path": "packages/kbn-doc-links/src/get_doc_meta.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/get_doc_meta.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -94,7 +94,7 @@ "signature": [ "GetDocLinksMetaOptions" ], - "path": "packages/kbn-doc-links/src/get_doc_meta.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/get_doc_meta.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -112,7 +112,7 @@ "tags": [], "label": "DocLinks", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -123,7 +123,7 @@ "tags": [], "label": "settings", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -134,7 +134,7 @@ "tags": [], "label": "elasticStackGetStarted", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -145,7 +145,7 @@ "tags": [], "label": "apiReference", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -159,7 +159,7 @@ "signature": [ "{ readonly upgradingStackOnPrem: string; readonly upgradingStackOnCloud: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -173,7 +173,7 @@ "signature": [ "{ readonly kibanaSettings: string; readonly supportedServiceMaps: string; readonly customLinks: string; readonly droppedTransactionSpans: string; readonly upgrading: string; readonly metaData: string; readonly overview: string; readonly tailSamplingPolicies: string; readonly elasticAgent: string; readonly storageExplorer: string; readonly spanCompression: string; readonly transactionSampling: string; readonly indexLifecycleManagement: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -187,7 +187,7 @@ "signature": [ "{ readonly guide: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -201,7 +201,7 @@ "signature": [ "{ readonly beatsAndLogstashConfiguration: string; readonly indexManagement: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -215,7 +215,7 @@ "signature": [ "{ readonly guide: string; readonly serverlessGuide: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -229,7 +229,7 @@ "signature": [ "{ readonly guide: string; readonly drilldowns: string; readonly drilldownsTriggerPicker: string; readonly urlDrilldownTemplateSyntax: string; readonly urlDrilldownVariables: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -243,7 +243,7 @@ "signature": [ "{ [x: string]: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -257,7 +257,7 @@ "signature": [ "{ readonly base: string; readonly installation: string; readonly configuration: string; readonly elasticsearchOutput: string; readonly elasticsearchModule: string; readonly startup: string; readonly exportedFields: string; readonly suricataModule: string; readonly zeekModule: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -271,7 +271,7 @@ "signature": [ "{ readonly base: string; readonly auditdModule: string; readonly systemModule: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -285,7 +285,7 @@ "signature": [ "{ readonly base: string; readonly configure: string; readonly httpEndpoint: string; readonly install: string; readonly start: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -299,7 +299,7 @@ "signature": [ "{ readonly adaptiveRelevance: string; readonly apiRef: string; readonly apiClients: string; readonly apiKeys: string; readonly authentication: string; readonly crawlRules: string; readonly curations: string; readonly duplicateDocuments: string; readonly elasticsearchIndexedEngines: string; readonly entryPoints: string; readonly gettingStarted: string; readonly guide: string; readonly indexingDocuments: string; readonly indexingDocumentsSchema: string; readonly logSettings: string; readonly metaEngines: string; readonly precisionTuning: string; readonly relevanceTuning: string; readonly resultSettings: string; readonly searchUI: string; readonly security: string; readonly synonyms: string; readonly webCrawler: string; readonly webCrawlerEventLogs: string; readonly webCrawlerReference: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -313,7 +313,7 @@ "signature": [ "{ readonly aiSearchDoc: string; readonly aiSearchHelp: string; readonly apiKeys: string; readonly behavioralAnalytics: string; readonly behavioralAnalyticsCORS: string; readonly behavioralAnalyticsEvents: string; readonly buildConnector: string; readonly bulkApi: string; readonly configuration: string; readonly connectors: string; readonly connectorsClientDeploy: string; readonly connectorsMappings: string; readonly connectorsAzureBlobStorage: string; readonly connectorsBox: string; readonly connectorsClients: string; readonly connectorsConfluence: string; readonly connectorsContentExtraction: string; readonly connectorsDropbox: string; readonly connectorsGithub: string; readonly connectorsGoogleCloudStorage: string; readonly connectorsGoogleDrive: string; readonly connectorsGmail: string; readonly connectorsJira: string; readonly connectorsMicrosoftSQL: string; readonly connectorsMongoDB: string; readonly connectorsMySQL: string; readonly connectorsNative: string; readonly connectorsNetworkDrive: string; readonly connectorsNotion: string; readonly connectorsOneDrive: string; readonly connectorsOracle: string; readonly connectorsOutlook: string; readonly connectorsPostgreSQL: string; readonly connectorsRedis: string; readonly connectorsS3: string; readonly connectorsSalesforce: string; readonly connectorsServiceNow: string; readonly connectorsSharepoint: string; readonly connectorsSharepointOnline: string; readonly connectorsTeams: string; readonly connectorsSlack: string; readonly connectorsZoom: string; readonly crawlerExtractionRules: string; readonly crawlerManaging: string; readonly crawlerOverview: string; readonly deployTrainedModels: string; readonly documentLevelSecurity: string; readonly e5Model: string; readonly elser: string; readonly engines: string; readonly indexApi: string; readonly inferenceApiCreate: string; readonly ingestionApis: string; readonly ingestPipelines: string; readonly knnSearch: string; readonly knnSearchCombine: string; readonly languageAnalyzers: string; readonly languageClients: string; readonly licenseManagement: string; readonly machineLearningStart: string; readonly mailService: string; readonly mlDocumentEnrichment: string; readonly searchApplicationsTemplates: string; readonly searchApplicationsSearchApi: string; readonly searchApplications: string; readonly searchApplicationsSearch: string; readonly searchLabs: string; readonly searchLabsRepo: string; readonly semanticSearch: string; readonly searchTemplates: string; readonly semanticTextField: string; readonly start: string; readonly supportedNlpModels: string; readonly syncRules: string; readonly syncRulesAdvanced: string; readonly trainedModels: string; readonly textEmbedding: string; readonly troubleshootSetup: string; readonly usersAccess: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -327,7 +327,7 @@ "signature": [ "{ readonly apiKeys: string; readonly box: string; readonly confluenceCloud: string; readonly confluenceCloudConnectorPackage: string; readonly confluenceServer: string; readonly contentSources: string; readonly customConnectorPackage: string; readonly customSources: string; readonly customSourcePermissions: string; readonly documentPermissions: string; readonly dropbox: string; readonly externalSharePointOnline: string; readonly externalIdentities: string; readonly gatedFormBlog: string; readonly gitHub: string; readonly gettingStarted: string; readonly gmail: string; readonly googleDrive: string; readonly indexingSchedule: string; readonly jiraCloud: string; readonly jiraServer: string; readonly networkDrive: string; readonly oneDrive: string; readonly permissions: string; readonly privateSourcePermissions: string; readonly salesforce: string; readonly security: string; readonly serviceNow: string; readonly sharePoint: string; readonly sharePointServer: string; readonly slack: string; readonly synch: string; readonly zendesk: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -341,7 +341,7 @@ "signature": [ "{ readonly base: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -355,7 +355,7 @@ "signature": [ "{ readonly getStarted: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -369,7 +369,7 @@ "signature": [ "{ readonly base: string; readonly inputElasticAgent: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -383,7 +383,7 @@ "signature": [ "{ readonly base: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -397,7 +397,7 @@ "signature": [ "{ readonly composite: string; readonly composite_missing_bucket: string; readonly date_histogram: string; readonly date_range: string; readonly date_format_pattern: string; readonly filter: string; readonly filters: string; readonly geohash_grid: string; readonly histogram: string; readonly ip_range: string; readonly range: string; readonly significant_terms: string; readonly terms: string; readonly terms_doc_count_error: string; readonly rare_terms: string; readonly avg: string; readonly avg_bucket: string; readonly max_bucket: string; readonly min_bucket: string; readonly sum_bucket: string; readonly cardinality: string; readonly count: string; readonly cumulative_sum: string; readonly derivative: string; readonly geo_bounds: string; readonly geo_centroid: string; readonly max: string; readonly median: string; readonly min: string; readonly moving_avg: string; readonly percentile_ranks: string; readonly serial_diff: string; readonly std_dev: string; readonly sum: string; readonly top_hits: string; readonly change_point: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -411,7 +411,7 @@ "signature": [ "{ readonly overview: string; readonly mapping: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -425,7 +425,7 @@ "signature": [ "{ readonly scriptFields: string; readonly scriptAggs: string; readonly painless: string; readonly painlessApi: string; readonly painlessLangSpec: string; readonly painlessSyntax: string; readonly painlessWalkthrough: string; readonly luceneExpressions: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -439,7 +439,7 @@ "signature": [ "{ readonly sessions: string; readonly sessionLimits: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -451,9 +451,9 @@ "label": "indexPatterns", "description": [], "signature": [ - "{ readonly introduction: string; readonly fieldFormattersNumber: string; readonly fieldFormattersString: string; readonly runtimeFields: string; }" + "{ readonly introduction: string; readonly fieldFormattersNumber: string; readonly fieldFormattersString: string; readonly runtimeFields: string; readonly migrateOffScriptedFields: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -464,7 +464,7 @@ "tags": [], "label": "addData", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -478,7 +478,7 @@ "signature": [ "{ readonly askElastic: string; readonly createGithubIssue: string; readonly feedback: string; readonly guide: string; readonly autocompleteSuggestions: string; readonly secureSavedObject: string; readonly xpackSecurity: string; readonly dashboardImportExport: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -492,7 +492,7 @@ "signature": [ "{ readonly overview: string; readonly batchReindex: string; readonly remoteReindex: string; readonly reindexWithPipeline: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -503,7 +503,7 @@ "tags": [], "label": "rollupJobs", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -517,7 +517,7 @@ "signature": [ "{ [x: string]: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -531,7 +531,7 @@ "signature": [ "{ readonly privileges: string; readonly guide: string; readonly gettingStarted: string; readonly ml: string; readonly ruleChangeLog: string; readonly detectionsReq: string; readonly networkMap: string; readonly troubleshootGaps: string; readonly ruleApiOverview: string; readonly configureAlertSuppression: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -545,7 +545,7 @@ "signature": [ "{ readonly aiAssistant: string; readonly artifactControl: string; readonly avcResults: string; readonly bidirectionalIntegrations: string; readonly trustedApps: string; readonly eventFilters: string; readonly eventMerging: string; readonly blocklist: string; readonly endpointArtifacts: string; readonly policyResponseTroubleshooting: { full_disk_access: string; macos_system_ext: string; linux_deadlock: string; }; readonly packageActionTroubleshooting: { es_connection: string; }; readonly threatIntelInt: string; readonly responseActions: string; readonly configureEndpointIntegrationPolicy: string; readonly exceptions: { value_lists: string; }; readonly privileges: string; readonly manageDetectionRules: string; readonly createDetectionRules: string; readonly createEsqlRuleType: string; readonly ruleUiAdvancedParams: string; readonly entityAnalytics: { readonly riskScorePrerequisites: string; readonly entityRiskScoring: string; readonly assetCriticality: string; }; readonly detectionEngineOverview: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -559,7 +559,7 @@ "signature": [ "{ readonly eql: string; readonly kueryQuerySyntax: string; readonly luceneQuery: string; readonly luceneQuerySyntax: string; readonly percolate: string; readonly queryDsl: string; readonly queryESQL: string; readonly queryESQLExamples: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -573,7 +573,7 @@ "signature": [ "{ readonly dateMath: string; readonly dateMathIndexNames: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -587,7 +587,7 @@ "signature": [ "{ [x: string]: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -601,7 +601,7 @@ "signature": [ "{ [x: string]: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -615,7 +615,7 @@ "signature": [ "{ [x: string]: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -629,7 +629,7 @@ "signature": [ "{ [x: string]: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -643,7 +643,7 @@ "signature": [ "{ readonly bulkIndexAlias: string; readonly indexStats: string; readonly byteSizeUnits: string; readonly createAutoFollowPattern: string; readonly createFollower: string; readonly createIndex: string; readonly createSnapshotLifecyclePolicy: string; readonly createRoleMapping: string; readonly createRoleMappingTemplates: string; readonly createRollupJobsRequest: string; readonly createApiKey: string; readonly createPipeline: string; readonly createTransformRequest: string; readonly cronExpressions: string; readonly executeWatchActionModes: string; readonly indexExists: string; readonly inferTrainedModel: string; readonly multiSearch: string; readonly openIndex: string; readonly putComponentTemplate: string; readonly painlessExecute: string; readonly painlessExecuteAPIContexts: string; readonly putComponentTemplateMetadata: string; readonly putSnapshotLifecyclePolicy: string; readonly putIndexTemplateV1: string; readonly putWatch: string; readonly restApis: string; readonly searchPreference: string; readonly securityApis: string; readonly simulatePipeline: string; readonly tasks: string; readonly timeUnits: string; readonly unfreezeIndex: string; readonly updateTransform: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -657,7 +657,7 @@ "signature": [ "{ readonly guide: string; readonly infrastructureThreshold: string; readonly logsThreshold: string; readonly metricsThreshold: string; readonly customThreshold: string; readonly monitorStatus: string; readonly monitorUptime: string; readonly tlsCertificate: string; readonly uptimeDurationAnomaly: string; readonly monitorLogs: string; readonly analyzeMetrics: string; readonly monitorUptimeSynthetics: string; readonly userExperience: string; readonly createAlerts: string; readonly syntheticsAlerting: string; readonly syntheticsCommandReference: string; readonly syntheticsProjectMonitors: string; readonly syntheticsMigrateFromIntegration: string; readonly sloBurnRateRule: string; readonly aiAssistant: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -671,7 +671,7 @@ "signature": [ "{ readonly guide: string; readonly actionTypes: string; readonly apmRulesErrorCount: string; readonly apmRulesTransactionDuration: string; readonly apmRulesTransactionError: string; readonly apmRulesAnomaly: string; readonly emailAction: string; readonly emailActionConfig: string; readonly emailExchangeClientSecretConfig: string; readonly emailExchangeClientIdConfig: string; readonly generalSettings: string; readonly indexAction: string; readonly esQuery: string; readonly indexThreshold: string; readonly maintenanceWindows: string; readonly pagerDutyAction: string; readonly preconfiguredConnectors: string; readonly preconfiguredAlertHistoryConnector: string; readonly serviceNowAction: string; readonly serviceNowSIRAction: string; readonly setupPrerequisites: string; readonly slackAction: string; readonly slackApiAction: string; readonly teamsAction: string; readonly connectors: string; readonly legacyRuleApiDeprecations: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -685,7 +685,7 @@ "signature": [ "{ readonly healthMonitoring: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -699,7 +699,7 @@ "signature": [ "{ readonly connectToEms: string; readonly guide: string; readonly importGeospatialPrivileges: string; readonly gdalTutorial: string; readonly termJoinsExample: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -713,7 +713,7 @@ "signature": [ "{ [x: string]: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -727,7 +727,7 @@ "signature": [ "{ readonly cloudMinimumRequirements: string; readonly grantUserAccess: string; readonly browserSystemDependencies: string; readonly browserSandboxDependencies: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -741,7 +741,7 @@ "signature": [ "{ readonly apiKeyServiceSettings: string; readonly clusterPrivileges: string; readonly definingRoles: string; readonly elasticsearchSettings: string; readonly elasticsearchEnableSecurity: string; readonly elasticsearchEnableApiKeys: string; readonly indicesPrivileges: string; readonly kibanaTLS: string; readonly kibanaPrivileges: string; readonly mappingRoles: string; readonly mappingRolesFieldRules: string; readonly runAsPrivilege: string; readonly deprecatedV1Endpoints: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -755,7 +755,7 @@ "signature": [ "{ readonly kibanaLegacyUrlAliases: string; readonly kibanaDisableLegacyUrlAliasesApi: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -769,7 +769,7 @@ "signature": [ "{ [x: string]: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -783,7 +783,7 @@ "signature": [ "{ [x: string]: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -797,7 +797,7 @@ "signature": [ "{ azureRepo: string; gcsRepo: string; hdfsRepo: string; ingestAttachment: string; s3Repo: string; snapshotRestoreRepos: string; mapperSize: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -811,7 +811,7 @@ "signature": [ "{ [x: string]: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -825,7 +825,7 @@ "signature": [ "{ [x: string]: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -839,7 +839,7 @@ "signature": [ "{ readonly beatsAgentComparison: string; readonly guide: string; readonly fleetServer: string; readonly fleetServerAddFleetServer: string; readonly esSettings: string; readonly settings: string; readonly logstashSettings: string; readonly kafkaSettings: string; readonly settingsFleetServerHostSettings: string; readonly settingsFleetServerProxySettings: string; readonly troubleshooting: string; readonly elasticAgent: string; readonly datastreams: string; readonly datastreamsILM: string; readonly datastreamsNamingScheme: string; readonly datastreamsManualRollover: string; readonly datastreamsTSDS: string; readonly datastreamsTSDSMetrics: string; readonly datastreamsDownsampling: string; readonly installElasticAgent: string; readonly installElasticAgentStandalone: string; readonly grantESAccessToStandaloneAgents: string; readonly packageSignatures: string; readonly upgradeElasticAgent: string; readonly learnMoreBlog: string; readonly apiKeysLearnMore: string; readonly onPremRegistry: string; readonly secureLogstash: string; readonly agentPolicy: string; readonly api: string; readonly uninstallAgent: string; readonly installAndUninstallIntegrationAssets: string; readonly elasticAgentInputConfiguration: string; readonly policySecrets: string; readonly remoteESOoutput: string; readonly performancePresets: string; readonly scalingKubernetesResourcesAndLimits: string; readonly roleAndPrivileges: string; readonly proxiesSettings: string; readonly unprivilegedMode: string; readonly httpMonitoring: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -853,7 +853,7 @@ "signature": [ "{ upload: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -867,7 +867,7 @@ "signature": [ "{ readonly guide: string; readonly dataStreams: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -881,7 +881,7 @@ "signature": [ "{ readonly guide: string; readonly goConnecting: string; readonly goGettingStarted: string; readonly goIndex: string; readonly goOverview: string; readonly javaBasicAuthentication: string; readonly javaIndex: string; readonly javaInstallation: string; readonly javaIntroduction: string; readonly javaRestLow: string; readonly jsAdvancedConfig: string; readonly jsApiReference: string; readonly jsBasicConfig: string; readonly jsClientConnecting: string; readonly jsIntro: string; readonly netGuide: string; readonly netIntroduction: string; readonly netNest: string; readonly netSingleNode: string; readonly phpConfiguration: string; readonly phpConnecting: string; readonly phpGuide: string; readonly phpInstallation: string; readonly phpOverview: string; readonly pythonAuthentication: string; readonly pythonConfig: string; readonly pythonConnecting: string; readonly pythonGuide: string; readonly pythonOverview: string; readonly rubyAuthentication: string; readonly rubyAdvancedConfig: string; readonly rubyBasicConfig: string; readonly rubyExamples: string; readonly rubyOverview: string; readonly rustGuide: string; readonly rustOverview: string; readonly eland: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -895,7 +895,7 @@ "signature": [ "{ readonly troubleshooting: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -909,7 +909,7 @@ "signature": [ "{ readonly privacyStatement: string; readonly generalPrivacyStatement: string; readonly termsOfService: string; readonly dataUse: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -923,7 +923,7 @@ "signature": [ "{ readonly resolveMigrationFailures: string; readonly repeatedTimeoutRequests: string; readonly routingAllocationDisabled: string; readonly clusterShardLimitExceeded: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -937,7 +937,7 @@ "signature": [ "{ readonly appSearch: string; readonly elasticsearch: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -951,7 +951,7 @@ "signature": [ "{ readonly clientLib: string; readonly goApiReference: string; readonly goGettingStarted: string; readonly httpApis: string; readonly httpApiReferences: string; readonly jsApiReference: string; readonly jsGettingStarted: string; readonly phpApiReference: string; readonly phpGettingStarted: string; readonly pythonApiReference: string; readonly pythonGettingStarted: string; readonly pythonReferences: string; readonly rubyApiReference: string; readonly rubyGettingStarted: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -965,7 +965,7 @@ "signature": [ "{ readonly gettingStartedExplore: string; readonly gettingStartedIngest: string; readonly gettingStartedSearch: string; readonly integrations: string; readonly integrationsBeats: string; readonly integrationsConnectorClient: string; readonly integrationsConnectorClientAvailableConnectors: string; readonly integrationsConnectorClientRunFromSource: string; readonly integrationsConnectorClientRunWithDocker: string; readonly integrationsLogstash: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -979,7 +979,7 @@ "signature": [ "{ readonly apiKeyPrivileges: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -993,7 +993,7 @@ "signature": [ "{ readonly featureRoles: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -1007,7 +1007,7 @@ "signature": [ "{ readonly settings: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -1021,7 +1021,7 @@ "signature": [ "{ readonly chatPlayground: string; readonly retrievalOptimize: string; readonly retrieval: string; readonly context: string; readonly hiddenFields: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -1035,7 +1035,7 @@ "signature": [ "{ readonly inferenceAPIDocumentation: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -1049,7 +1049,7 @@ "signature": [ "{ readonly legacyApiDeprecations: string; }" ], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false } @@ -1063,7 +1063,7 @@ "tags": [], "label": "DocLinksMeta", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1074,7 +1074,7 @@ "tags": [], "label": "version", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -1085,7 +1085,7 @@ "tags": [], "label": "ecs_version", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -1096,7 +1096,7 @@ "tags": [], "label": "elasticWebsiteUrl", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -1107,7 +1107,7 @@ "tags": [], "label": "elasticGithubUrl", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -1118,7 +1118,7 @@ "tags": [], "label": "docsWebsiteUrl", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false }, @@ -1129,7 +1129,7 @@ "tags": [], "label": "searchLabsUrl", "description": [], - "path": "packages/kbn-doc-links/src/types.ts", + "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, "trackAdoption": false } diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index a336c7d7355f4..6c8d3d356be26 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-12-05 +date: 2024-12-06 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 ed2d5bbe7b9d2..53d2e26839a2e 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 c542c802d674c..720c78f7033e2 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-12-05 +date: 2024-12-06 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 c00fa59b7a85c..7238c12e1e08d 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-12-05 +date: 2024-12-06 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 25d1c1927ad9d..a8093e71ebc5f 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-12-05 +date: 2024-12-06 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 1bb3be1d94a6d..d1bd6f203002f 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 80756ca060356..f9e54b320ef99 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-12-05 +date: 2024-12-06 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 dcbda49d0549b..934b188822636 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 87e334ffee10d..c019c482807b1 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 06c36e7e3a0d7..34c7f68ade0c8 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-12-05 +date: 2024-12-06 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 f68c178f31a6a..7df03bd9ec2c5 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-12-05 +date: 2024-12-06 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 0a3bb4f9da1bc..536ffdcd685ce 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-12-05 +date: 2024-12-06 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 f6eb9a88e57d7..456f6c8c6b9ab 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-12-05 +date: 2024-12-06 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 a78417d27f38b..6e828e953cb41 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-12-05 +date: 2024-12-06 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 117463c4c3437..05c85e39ada9e 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 3dc114d5d9bbe..8aa0141581109 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx index 98f677db84a6f..022af3b8a0da8 100644 --- a/api_docs/kbn_esql_editor.mdx +++ b/api_docs/kbn_esql_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-editor title: "@kbn/esql-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-editor plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-editor'] --- import kbnEsqlEditorObj from './kbn_esql_editor.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 3b81e50c906a7..b7bbdf7f7ae26 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 64da979683dab..4f981e42aa068 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 2abeaca9ad9bb..6c93900b63f50 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-12-05 +date: 2024-12-06 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 a2051c6e8dbaf..f0a71cb04f293 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-12-05 +date: 2024-12-06 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 08a91bd2c969b..bc85793555482 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-12-05 +date: 2024-12-06 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 a9a414ef15111..7f9bd3bfda87e 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-12-05 +date: 2024-12-06 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 2d9af29fd67e3..2436b61711a16 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 edd29b5401904..25d9ce03ccd48 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-12-05 +date: 2024-12-06 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 862287ce98b76..94fc7190e9e97 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-12-05 +date: 2024-12-06 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 614beb41db6a4..9d1553f52a1ee 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-12-05 +date: 2024-12-06 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 b07c5ad9f2edb..9a847762781aa 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_gen_ai_functional_testing.mdx b/api_docs/kbn_gen_ai_functional_testing.mdx index 408ba16a232ed..0ddb9d75eaca9 100644 --- a/api_docs/kbn_gen_ai_functional_testing.mdx +++ b/api_docs/kbn_gen_ai_functional_testing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-gen-ai-functional-testing title: "@kbn/gen-ai-functional-testing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/gen-ai-functional-testing plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/gen-ai-functional-testing'] --- import kbnGenAiFunctionalTestingObj from './kbn_gen_ai_functional_testing.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 18972f01cb745..9b5ba49703ae8 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-12-05 +date: 2024-12-06 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 d8f624eb028bc..de52646511b71 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-12-05 +date: 2024-12-06 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 574b2ac6320fc..6386b08e4f418 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.devdocs.json b/api_docs/kbn_grid_layout.devdocs.json index 411b0d387d6e4..ecb0af149f3d0 100644 --- a/api_docs/kbn_grid_layout.devdocs.json +++ b/api_docs/kbn_grid_layout.devdocs.json @@ -11,7 +11,9 @@ "label": "GridLayout", "description": [], "signature": [ - "({ layout, gridSettings, renderPanelContents, onLayoutChange, expandedPanelId, accessMode, }: GridLayoutProps) => React.JSX.Element" + "({ layout, gridSettings, renderPanelContents, onLayoutChange, expandedPanelId, accessMode, }: ", + "GridLayoutProps", + ") => React.JSX.Element" ], "path": "packages/kbn-grid-layout/grid/grid_layout.tsx", "deprecated": false, diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index 51592ebbbbfbc..39c93b550d01f 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 17 | 0 | 17 | 1 | +| 17 | 0 | 17 | 2 | ## Client diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index c55abd4f399af..d470cd9a5188f 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index cb2167a5e2c8f..daa0bfbd88804 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-12-05 +date: 2024-12-06 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 9335d3b1dfd3c..9f1ae12090990 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-12-05 +date: 2024-12-06 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 8fbc998187d48..da459f236bada 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 74d54eb01052f..81fbd2ab1922e 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-12-05 +date: 2024-12-06 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 5e53efa31efb2..c487b13553df3 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-12-05 +date: 2024-12-06 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 4eb5e1615f19c..1aed1df9124f1 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-12-05 +date: 2024-12-06 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 c77e95de4cf00..27bf16e6b0194 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-12-05 +date: 2024-12-06 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 a6c639049514d..1fd8c6d2acfcb 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-12-05 +date: 2024-12-06 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 d74ee2e04c1cb..b5dcd30aeb118 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_adapter.mdx b/api_docs/kbn_index_adapter.mdx index 608ed7e6fae0c..1dd4c216335f4 100644 --- a/api_docs/kbn_index_adapter.mdx +++ b/api_docs/kbn_index_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-adapter title: "@kbn/index-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-adapter plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-adapter'] --- import kbnIndexAdapterObj from './kbn_index_adapter.devdocs.json'; diff --git a/api_docs/kbn_index_lifecycle_management_common_shared.mdx b/api_docs/kbn_index_lifecycle_management_common_shared.mdx index 1e83e617cefc0..376d13f2d0dca 100644 --- a/api_docs/kbn_index_lifecycle_management_common_shared.mdx +++ b/api_docs/kbn_index_lifecycle_management_common_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-lifecycle-management-common-shared title: "@kbn/index-lifecycle-management-common-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-lifecycle-management-common-shared plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-lifecycle-management-common-shared'] --- import kbnIndexLifecycleManagementCommonSharedObj from './kbn_index_lifecycle_management_common_shared.devdocs.json'; diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx index 741fb28236fec..2ea0a26299753 100644 --- a/api_docs/kbn_index_management_shared_types.mdx +++ b/api_docs/kbn_index_management_shared_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management-shared-types title: "@kbn/index-management-shared-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management-shared-types plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management-shared-types'] --- import kbnIndexManagementSharedTypesObj from './kbn_index_management_shared_types.devdocs.json'; diff --git a/api_docs/kbn_inference_common.mdx b/api_docs/kbn_inference_common.mdx index 8fea2dcf8433f..2982ec2d8b672 100644 --- a/api_docs/kbn_inference_common.mdx +++ b/api_docs/kbn_inference_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference-common title: "@kbn/inference-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-common'] --- import kbnInferenceCommonObj from './kbn_inference_common.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index f54206eb31cdd..08b13a8907a1e 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index fa0333569364a..de22cf3786ba7 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-12-05 +date: 2024-12-06 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 1d1336e746dcc..2f278c45cd440 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index 4d5858c688a5b..8a01100837bd7 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 93b98e6f037cf..61d2e8701365a 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index b1ff1a9a64209..160d94c71243a 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_item_buffer.mdx b/api_docs/kbn_item_buffer.mdx index b40672091ca60..4e72db4900a01 100644 --- a/api_docs/kbn_item_buffer.mdx +++ b/api_docs/kbn_item_buffer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-item-buffer title: "@kbn/item-buffer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/item-buffer plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/item-buffer'] --- import kbnItemBufferObj from './kbn_item_buffer.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 83de93d67d40d..55d3f4b52fb12 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-12-05 +date: 2024-12-06 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 f45e580d9e8c8..8b3898b7ba370 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-12-05 +date: 2024-12-06 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 e298af26ffe87..ac2e812de6e47 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 40672c6fca2e2..5b891793a1aa4 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 80f91463cb1ed..fdfed8e0efa0f 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation.mdx b/api_docs/kbn_language_documentation.mdx index c23569c5d0f07..85a8189936c48 100644 --- a/api_docs/kbn_language_documentation.mdx +++ b/api_docs/kbn_language_documentation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation title: "@kbn/language-documentation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation'] --- import kbnLanguageDocumentationObj from './kbn_language_documentation.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index e2bcd3824e403..0a673b0fec690 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 eac1fb96d8855..c3e5a2e1825be 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-12-05 +date: 2024-12-06 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 01ad495fe83ef..7c1234ecfdebf 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-12-05 +date: 2024-12-06 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 29ce476c33b4b..4025437d81046 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 210f36e7874d7..71a313fe97bf7 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-12-05 +date: 2024-12-06 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 c68b643a6b519..3a53be0e4d63c 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-12-05 +date: 2024-12-06 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 0e12559aa6b2f..96408fe3f3ed0 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-12-05 +date: 2024-12-06 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 1397355486a34..6bf57b442d016 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-12-05 +date: 2024-12-06 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 d1227bf640b28..9e176adad9d62 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-12-05 +date: 2024-12-06 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 6f07b3f85b9fc..10930b46862bf 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-12-05 +date: 2024-12-06 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 709af981d90b5..ff29464ee3309 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-12-05 +date: 2024-12-06 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 537ac2789f12d..2066747a64401 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-12-05 +date: 2024-12-06 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 e0f15b7a14a07..68699f3eb09c2 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-12-05 +date: 2024-12-06 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 a1517ceda355b..5d9599d078865 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-12-05 +date: 2024-12-06 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 7b1132020715e..e4d435a6ec5c7 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-12-05 +date: 2024-12-06 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 d6a59dfc0e5fc..79b4adb449686 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-12-05 +date: 2024-12-06 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 f371c43a002c1..e1b2b634c1ce6 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-12-05 +date: 2024-12-06 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 b81bff14d9060..4e3dafd617265 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_manifest.mdx b/api_docs/kbn_manifest.mdx index ac85da019b97a..61cd62345a5a6 100644 --- a/api_docs/kbn_manifest.mdx +++ b/api_docs/kbn_manifest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-manifest title: "@kbn/manifest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/manifest plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/manifest'] --- import kbnManifestObj from './kbn_manifest.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 62a82581c0345..34def0111cdcc 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-12-05 +date: 2024-12-06 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 edcbbba797d26..a5c5976a81fc3 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 492bace27e304..51531482b83f7 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 23ddc848ffcff..e80cb90f5d946 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_ml_cancellable_search.devdocs.json index 1f4d3468b63d8..0cb4441ffc548 100644 --- a/api_docs/kbn_ml_cancellable_search.devdocs.json +++ b/api_docs/kbn_ml_cancellable_search.devdocs.json @@ -35,7 +35,15 @@ "section": "def-public.DataPublicPluginStart", "text": "DataPublicPluginStart" }, - ") => { runRequest: { runRequest: , ResponseType extends ", { "pluginId": "@kbn/search-types", "scope": "common", @@ -95,7 +103,15 @@ "label": "runRequest", "description": [], "signature": [ - ", ResponseType extends ", { "pluginId": "@kbn/search-types", "scope": "common", diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index c867ea0c8370c..47f405f966337 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-12-05 +date: 2024-12-06 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 b12336ef55a6b..2cc423a0815b6 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-12-05 +date: 2024-12-06 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 0d5b6e09e5fc8..8bf4242f61f4c 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-12-05 +date: 2024-12-06 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 8df28c43af3cf..15d62f80b8b26 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 9e18b7177161c..1423a8220abc9 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-12-05 +date: 2024-12-06 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 ad86bbf3c2559..eb0e84fe47e06 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-12-05 +date: 2024-12-06 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 3d0abf5f4b708..33ac1175dbf7f 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 d9e898c21aec7..d35777148b2c0 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_field_stats_flyout.mdx b/api_docs/kbn_ml_field_stats_flyout.mdx index 1cf3cb5fab097..9ab971b922b00 100644 --- a/api_docs/kbn_ml_field_stats_flyout.mdx +++ b/api_docs/kbn_ml_field_stats_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-field-stats-flyout title: "@kbn/ml-field-stats-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-field-stats-flyout plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-field-stats-flyout'] --- import kbnMlFieldStatsFlyoutObj from './kbn_ml_field_stats_flyout.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index a528653c4b40f..cfd9a4e3ead2d 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-12-05 +date: 2024-12-06 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 d7954e63c4ddd..ef753e0ebf716 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-12-05 +date: 2024-12-06 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 0e4cb2194bcf5..1a18815fe78a7 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-12-05 +date: 2024-12-06 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 4e9a5aba92786..30b705060dbb1 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-12-05 +date: 2024-12-06 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 78da0cb7c0339..9e3c1254d1865 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-12-05 +date: 2024-12-06 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 e02ec4051f518..865856b1a06ba 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-12-05 +date: 2024-12-06 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 c8fd3d29090a7..b45d2760ede95 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_parse_interval.mdx b/api_docs/kbn_ml_parse_interval.mdx index b58eeacbf3e6d..8440a021d2ab6 100644 --- a/api_docs/kbn_ml_parse_interval.mdx +++ b/api_docs/kbn_ml_parse_interval.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-parse-interval title: "@kbn/ml-parse-interval" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-parse-interval plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-parse-interval'] --- import kbnMlParseIntervalObj from './kbn_ml_parse_interval.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 7d1fcc26425af..e68e36ead45dc 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 2c2627b325f36..054c89a5cf798 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 4c26e21e0ee7c..fb3077b8b4643 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 9ff6f48174d9c..b4554a01f3d5a 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 6b2eb5ad119f1..21ac48ba3ef18 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 4c0a167702c2d..4dc4593b0cf7e 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index c31fd63e7703f..894e133b66232 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 31deb90048027..baccfe70487c8 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-12-05 +date: 2024-12-06 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 b53472793003b..d7b28a1ea278c 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_ml_validators.mdx b/api_docs/kbn_ml_validators.mdx index ad55ccd0b8a1a..c946f0aee1149 100644 --- a/api_docs/kbn_ml_validators.mdx +++ b/api_docs/kbn_ml_validators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-validators title: "@kbn/ml-validators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-validators plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-validators'] --- import kbnMlValidatorsObj from './kbn_ml_validators.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index bb6286ad771ca..b9c776d8e6d18 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 8a8bc6fac69f3..017672be1aa13 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-12-05 +date: 2024-12-06 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 174f331a19a3f..33862fa6b2260 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index 957da727cba47..c8279932da0d5 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index e86c08a9c2caa..7f6dd3c9163f1 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index fea47baeb6880..0a38c0934dcfd 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 32e0165f932eb..d037d467cdad3 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-12-05 +date: 2024-12-06 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 a55eb6a2fa253..9cfefefcd8c1c 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_observability_logs_overview.mdx b/api_docs/kbn_observability_logs_overview.mdx index 2bb54a2dccf67..fa264d6f7bbe9 100644 --- a/api_docs/kbn_observability_logs_overview.mdx +++ b/api_docs/kbn_observability_logs_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-logs-overview title: "@kbn/observability-logs-overview" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-logs-overview plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-logs-overview'] --- import kbnObservabilityLogsOverviewObj from './kbn_observability_logs_overview.devdocs.json'; diff --git a/api_docs/kbn_observability_synthetics_test_data.mdx b/api_docs/kbn_observability_synthetics_test_data.mdx index 6c9fe9e705352..402213b3a0ab7 100644 --- a/api_docs/kbn_observability_synthetics_test_data.mdx +++ b/api_docs/kbn_observability_synthetics_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-synthetics-test-data title: "@kbn/observability-synthetics-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-synthetics-test-data plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-synthetics-test-data'] --- import kbnObservabilitySyntheticsTestDataObj from './kbn_observability_synthetics_test_data.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 93e21b43bd6ce..69e73fb5da2b9 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-12-05 +date: 2024-12-06 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 55c1eeed3cfdf..723efa53e02c2 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-12-05 +date: 2024-12-06 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 10ec9d427b92e..3a8369053fcd3 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-12-05 +date: 2024-12-06 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 ad63194371c64..eb955ba0c7b49 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-12-05 +date: 2024-12-06 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 230a3fe62b3a4..cf3b5abd89ddb 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-12-05 +date: 2024-12-06 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 3ce840271de91..ce2ac00d178e1 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-12-05 +date: 2024-12-06 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 72e3da7872478..57c80d4f31ff0 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-12-05 +date: 2024-12-06 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 f90d77eec7cbb..50023026d4caf 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-12-05 +date: 2024-12-06 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 5998e3f932fc1..83c9627ae06c2 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-12-05 +date: 2024-12-06 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 a6c31f6114c32..528647f2c74ee 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-12-05 +date: 2024-12-06 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 ad615f5265036..2b20a77fbf34e 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 8bed87f5c802f..65e2bbc2c1a2e 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_product_doc_artifact_builder.mdx b/api_docs/kbn_product_doc_artifact_builder.mdx index 418593a1d8087..661c5cd553c04 100644 --- a/api_docs/kbn_product_doc_artifact_builder.mdx +++ b/api_docs/kbn_product_doc_artifact_builder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-artifact-builder title: "@kbn/product-doc-artifact-builder" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-artifact-builder plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-artifact-builder'] --- import kbnProductDocArtifactBuilderObj from './kbn_product_doc_artifact_builder.devdocs.json'; diff --git a/api_docs/kbn_product_doc_common.mdx b/api_docs/kbn_product_doc_common.mdx index 9f116a29a743f..5996b8c170c98 100644 --- a/api_docs/kbn_product_doc_common.mdx +++ b/api_docs/kbn_product_doc_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-common title: "@kbn/product-doc-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-common'] --- import kbnProductDocCommonObj from './kbn_product_doc_common.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index ef52f5664e5d6..c95c4c0b5ca65 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 ca703801378e0..9e79aa2e877d5 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-12-05 +date: 2024-12-06 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 b3e283c5e3f64..0ffcaa5da86fc 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 6091507c022d5..7d995c3c43621 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 1446fedf9a793..a25f724a37c27 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_react_kibana_context_render.devdocs.json index ff9487eef622e..0ea5aeb8d24b3 100644 --- a/api_docs/kbn_react_kibana_context_render.devdocs.json +++ b/api_docs/kbn_react_kibana_context_render.devdocs.json @@ -108,7 +108,15 @@ "section": "def-common.ThemeServiceStart", "text": "ThemeServiceStart" }, - "; modify?: ", + "; userProfile?: Pick<", + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + ", \"getUserProfile$\"> | undefined; modify?: ", "RecursivePartial", "<", "EuiThemeShape", diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index 5a6091df5eddb..5ece35b4f228d 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_react_kibana_context_root.devdocs.json index cd903cc6ea8e9..074a223560fa5 100644 --- a/api_docs/kbn_react_kibana_context_root.devdocs.json +++ b/api_docs/kbn_react_kibana_context_root.devdocs.json @@ -168,6 +168,28 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "@kbn/react-kibana-context-root", + "id": "def-common.KibanaEuiProviderProps.userProfile", + "type": "Object", + "tags": [], + "label": "userProfile", + "description": [], + "signature": [ + "Pick<", + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + ", \"getUserProfile$\"> | undefined" + ], + "path": "packages/react/kibana_context/root/eui_provider.tsx", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "@kbn/react-kibana-context-root", "id": "def-common.KibanaEuiProviderProps.globalStyles", diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index 2f7ff52dc7544..a592e4244e47e 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 10 | 0 | 4 | 0 | +| 11 | 0 | 5 | 0 | ## Common diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index e52f54db570ce..9b72db91e9e3d 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_react_kibana_context_theme.devdocs.json index 7a9c3c53f6066..c9598a556fbd3 100644 --- a/api_docs/kbn_react_kibana_context_theme.devdocs.json +++ b/api_docs/kbn_react_kibana_context_theme.devdocs.json @@ -29,7 +29,7 @@ "\nA Kibana-specific theme provider that uses the Kibana theme service to customize the EUI theme.\n\nIf the theme provider is missing a parent EuiProvider, one will automatically be rendered instead." ], "signature": [ - "({ theme, children, ...props }: ", + "({ theme, userProfile, children, ...props }: ", { "pluginId": "@kbn/react-kibana-context-theme", "scope": "common", @@ -85,7 +85,15 @@ "section": "def-common.ThemeServiceStart", "text": "ThemeServiceStart" }, - ") => React.JSX.Element" + ", userProfile?: ", + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + " | undefined) => React.JSX.Element" ], "path": "packages/react/kibana_context/theme/with_theme.tsx", "deprecated": false, @@ -130,6 +138,28 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "@kbn/react-kibana-context-theme", + "id": "def-common.wrapWithTheme.$3", + "type": "Object", + "tags": [], + "label": "userProfile", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + " | undefined" + ], + "path": "packages/react/kibana_context/theme/with_theme.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [], @@ -223,6 +253,30 @@ "path": "packages/react/kibana_context/theme/theme_provider.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/react-kibana-context-theme", + "id": "def-common.KibanaThemeProviderProps.userProfile", + "type": "Object", + "tags": [], + "label": "userProfile", + "description": [ + "The `UserProfileService` start API." + ], + "signature": [ + "Pick<", + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + ", \"getUserProfile$\"> | undefined" + ], + "path": "packages/react/kibana_context/theme/theme_provider.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index a463bc58ecc6b..535878fc2085b 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 13 | 0 | 3 | 0 | +| 15 | 0 | 4 | 0 | ## Common diff --git a/api_docs/kbn_react_kibana_mount.devdocs.json b/api_docs/kbn_react_kibana_mount.devdocs.json index 08cb88df1a8d1..c55e4669fa28f 100644 --- a/api_docs/kbn_react_kibana_mount.devdocs.json +++ b/api_docs/kbn_react_kibana_mount.devdocs.json @@ -273,7 +273,15 @@ "section": "def-common.ThemeServiceStart", "text": "ThemeServiceStart" }, - "; }" + "; userProfile?: Pick<", + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + ", \"getUserProfile$\"> | undefined; }" ], "path": "packages/react/kibana_mount/to_mount_point.tsx", "deprecated": false, diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index ebb8a88be3839..4488663a74e73 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index 9c8ff5d44ee45..cecd666ce59d2 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 102cae640dc02..679fec5e26388 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-12-05 +date: 2024-12-06 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 e569773a34515..8cd83d345b345 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-12-05 +date: 2024-12-06 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 d75b1e2ddfb81..52b655fee878e 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-12-05 +date: 2024-12-06 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 4d8a4007410a9..5f81f144b7570 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-12-05 +date: 2024-12-06 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 72382f1d90f2c..3e97f5612464b 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index d292282a22f73..f1d05c260380c 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index dc38c6c3651fb..2f99ca09ce63c 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-12-05 +date: 2024-12-06 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 45bc0829b4beb..432f79269fd0b 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-12-05 +date: 2024-12-06 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 d660d1b5a78d6..73c8b6acb4b51 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-12-05 +date: 2024-12-06 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 610546d2d5c1b..bf77fab755460 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-12-05 +date: 2024-12-06 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 77eed3e73b29a..3726502e5b6ce 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-12-05 +date: 2024-12-06 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 b3006c504bc4b..c55be86aa3c15 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-12-05 +date: 2024-12-06 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 69bb64193e5b3..3e49180c4e4ff 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-12-05 +date: 2024-12-06 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 77353bf28dc64..2e27fed77542c 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-12-05 +date: 2024-12-06 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 ef3d16faa98a0..5c5346b618296 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-12-05 +date: 2024-12-06 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 97c54324476a5..09f244533b8c0 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index c327a15a73770..290d6e7599c18 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_form.mdx b/api_docs/kbn_response_ops_rule_form.mdx index 50104b165a34e..0f3fb18657837 100644 --- a/api_docs/kbn_response_ops_rule_form.mdx +++ b/api_docs/kbn_response_ops_rule_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-form title: "@kbn/response-ops-rule-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-form plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-form'] --- import kbnResponseOpsRuleFormObj from './kbn_response_ops_rule_form.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_params.mdx b/api_docs/kbn_response_ops_rule_params.mdx index 00169434f6cfb..c391dffaa7e39 100644 --- a/api_docs/kbn_response_ops_rule_params.mdx +++ b/api_docs/kbn_response_ops_rule_params.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-params title: "@kbn/response-ops-rule-params" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-params plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-params'] --- import kbnResponseOpsRuleParamsObj from './kbn_response_ops_rule_params.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 67baf7e906292..0612c5ee453a1 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index acbc7bc7652da..4e809f3cfb37b 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.devdocs.json b/api_docs/kbn_router_to_openapispec.devdocs.json index e63fd19f6c37f..7bf76c5463cce 100644 --- a/api_docs/kbn_router_to_openapispec.devdocs.json +++ b/api_docs/kbn_router_to_openapispec.devdocs.json @@ -168,11 +168,13 @@ "parentPluginId": "@kbn/router-to-openapispec", "id": "def-server.GenerateOpenApiDocumentOptionsFilters.access", "type": "CompoundType", - "tags": [], + "tags": [ + "default" + ], "label": "access", "description": [], "signature": [ - "\"internal\" | \"public\" | undefined" + "\"internal\" | \"public\"" ], "path": "packages/kbn-router-to-openapispec/src/generate_oas.ts", "deprecated": false, @@ -182,9 +184,13 @@ "parentPluginId": "@kbn/router-to-openapispec", "id": "def-server.GenerateOpenApiDocumentOptionsFilters.version", "type": "string", - "tags": [], + "tags": [ + "default" + ], "label": "version", - "description": [], + "description": [ + "\nWe generate spec for one version at a time" + ], "signature": [ "string | undefined" ], diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 4a1b01ceb6fba..68b4ef870baaa 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 10 | 0 | 10 | 1 | +| 10 | 0 | 9 | 1 | ## Server diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 29bdd119be031..880728e94388e 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 acc5865ce9ba1..d50a91d2e20c9 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-12-05 +date: 2024-12-06 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 082a217ee7599..8b02482f6845c 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 fe24e1ae6c654..c57d9b37a78a7 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_saved_search_component.mdx b/api_docs/kbn_saved_search_component.mdx index 2b115579f37e4..41864970a19d2 100644 --- a/api_docs/kbn_saved_search_component.mdx +++ b/api_docs/kbn_saved_search_component.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-search-component title: "@kbn/saved-search-component" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-search-component plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-search-component'] --- import kbnSavedSearchComponentObj from './kbn_saved_search_component.devdocs.json'; diff --git a/api_docs/kbn_scout.mdx b/api_docs/kbn_scout.mdx index 9e77b255f4883..a90a01e466597 100644 --- a/api_docs/kbn_scout.mdx +++ b/api_docs/kbn_scout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout title: "@kbn/scout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout'] --- import kbnScoutObj from './kbn_scout.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index d0c8c99189985..2157309622a32 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_components.mdx b/api_docs/kbn_search_api_keys_components.mdx index ddb0cbe006837..853ae31aaed90 100644 --- a/api_docs/kbn_search_api_keys_components.mdx +++ b/api_docs/kbn_search_api_keys_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-components title: "@kbn/search-api-keys-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-components plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-components'] --- import kbnSearchApiKeysComponentsObj from './kbn_search_api_keys_components.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_server.mdx b/api_docs/kbn_search_api_keys_server.mdx index 37429f7642573..0cfc221b88982 100644 --- a/api_docs/kbn_search_api_keys_server.mdx +++ b/api_docs/kbn_search_api_keys_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-server title: "@kbn/search-api-keys-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-server plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-server'] --- import kbnSearchApiKeysServerObj from './kbn_search_api_keys_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index 9528ef4986c2a..ea555e3faf6e0 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_search_connectors.devdocs.json index 31b9ff22f7e0d..345948c560e66 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -214,7 +214,7 @@ "label": "ConnectorConfigurationComponent", "description": [], "signature": [ - "({ children, connector, hasPlatinumLicense, isDisabled, isLoading, saveConfig, saveAndSync, subscriptionLink, stackManagementLink, }: React.PropsWithChildren) => React.JSX.Element" + "({ children, connector, hasPlatinumLicense, isDisabled, isLoading, saveConfig, saveAndSync, onEditStateChange, subscriptionLink, stackManagementLink, }: React.PropsWithChildren) => React.JSX.Element" ], "path": "packages/kbn-search-connectors/components/configuration/connector_configuration.tsx", "deprecated": false, @@ -225,7 +225,7 @@ "id": "def-common.ConnectorConfigurationComponent.$1", "type": "CompoundType", "tags": [], - "label": "{\n children,\n connector,\n hasPlatinumLicense,\n isDisabled,\n isLoading,\n saveConfig,\n saveAndSync,\n subscriptionLink,\n stackManagementLink,\n}", + "label": "{\n children,\n connector,\n hasPlatinumLicense,\n isDisabled,\n isLoading,\n saveConfig,\n saveAndSync,\n onEditStateChange,\n subscriptionLink,\n stackManagementLink,\n}", "description": [], "signature": [ "React.PropsWithChildren" diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 6f04f0a51eb80..70aef3fb9a684 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-12-05 +date: 2024-12-06 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 fd29730175a6b..53046f040310c 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-12-05 +date: 2024-12-06 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 e7d280a88f7a2..6b30127f9de07 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-12-05 +date: 2024-12-06 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 ca9d429f1b1c2..1a7b198a5209b 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_shared_ui.mdx b/api_docs/kbn_search_shared_ui.mdx index 628c66d36a652..ca0058e6a7e65 100644 --- a/api_docs/kbn_search_shared_ui.mdx +++ b/api_docs/kbn_search_shared_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-shared-ui title: "@kbn/search-shared-ui" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-shared-ui plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-shared-ui'] --- import kbnSearchSharedUiObj from './kbn_search_shared_ui.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 56e46027490e8..6ec2daa549a97 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index 8728b332fd669..b62fd90cb74cb 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index 1ad9916845546..15450d29e4b0b 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core_common.mdx b/api_docs/kbn_security_authorization_core_common.mdx index 2228b9d8c4085..1c4b3d0efb2cb 100644 --- a/api_docs/kbn_security_authorization_core_common.mdx +++ b/api_docs/kbn_security_authorization_core_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core-common title: "@kbn/security-authorization-core-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core-common plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core-common'] --- import kbnSecurityAuthorizationCoreCommonObj from './kbn_security_authorization_core_common.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 42499bf8d897f..1cec292edfc60 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 26d23c3b97258..55bb80ce1f209 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-12-05 +date: 2024-12-06 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 7b40a5f741eb0..13a7091dc6477 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-12-05 +date: 2024-12-06 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 0cec768d41108..d2f68985da7a7 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-12-05 +date: 2024-12-06 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 12a9ecb5b889e..141a59ca43657 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index 8fba07b3a26e8..32e52970ce1ed 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 60a31b402b494..e72a52cd12d9c 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index aece765ae9702..db1c7cba7b35d 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-12-05 +date: 2024-12-06 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 b22b550d202de..f29bc0be8658f 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-12-05 +date: 2024-12-06 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 83256bbb60a35..455f8f49cc103 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-12-05 +date: 2024-12-06 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 051a0883deae2..00a1d93dba05c 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index d58b0b0dfe47c..7e3d38a759401 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 8015bb4fed32e..a1babe133bddc 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-12-05 +date: 2024-12-06 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 518de5069f5c7..9616e84c796c4 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-12-05 +date: 2024-12-06 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 10872029fe051..e1139afe1d5c8 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-12-05 +date: 2024-12-06 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 30fe1092ae20c..761783c8ac887 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 18cc1d9824859..be495c2b2f9ee 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 59813dd16ca85..60e4bb630d6cd 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 cac972b0d625c..70df756507e3b 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-12-05 +date: 2024-12-06 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 e3488134e926b..6303587680963 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-12-05 +date: 2024-12-06 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 573a0af403027..e3462430c7eab 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-12-05 +date: 2024-12-06 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 f4d2902f71b7f..cf959794b4bb4 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 532c4aff3e698..3a13819e3a173 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-12-05 +date: 2024-12-06 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 a9330d8e5dbd0..14677e50673da 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-12-05 +date: 2024-12-06 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 105b3e4540180..795e9d47e4efa 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-12-05 +date: 2024-12-06 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 2d50a210666ee..8816b89a73e78 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 af93af1c2bd6c..5888a2f75a3df 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-12-05 +date: 2024-12-06 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 7cbb5cfcf4b21..c7be7b88e4fb6 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_securitysolution_utils.devdocs.json index 8fa42be623b61..380762a0e7328 100644 --- a/api_docs/kbn_securitysolution_utils.devdocs.json +++ b/api_docs/kbn_securitysolution_utils.devdocs.json @@ -634,6 +634,48 @@ "returnComment": [], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/securitysolution-utils", + "id": "def-common.parseEsqlQuery", + "type": "Function", + "tags": [], + "label": "parseEsqlQuery", + "description": [ + "\ncheck if esql query valid for Security rule:\n- if it's non aggregation query it must have metadata operator" + ], + "signature": [ + "(query: string) => ", + { + "pluginId": "@kbn/securitysolution-utils", + "scope": "common", + "docId": "kibKbnSecuritysolutionUtilsPluginApi", + "section": "def-common.ParseEsqlQueryResult", + "text": "ParseEsqlQueryResult" + } + ], + "path": "packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/securitysolution-utils", + "id": "def-common.parseEsqlQuery.$1", + "type": "string", + "tags": [], + "label": "query", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/securitysolution-utils", "id": "def-common.removeIdFromItem", @@ -954,7 +996,65 @@ "initialIsOpen": false } ], - "interfaces": [], + "interfaces": [ + { + "parentPluginId": "@kbn/securitysolution-utils", + "id": "def-common.ParseEsqlQueryResult", + "type": "Interface", + "tags": [], + "label": "ParseEsqlQueryResult", + "description": [], + "path": "packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/securitysolution-utils", + "id": "def-common.ParseEsqlQueryResult.errors", + "type": "Array", + "tags": [], + "label": "errors", + "description": [], + "signature": [ + { + "pluginId": "@kbn/esql-ast", + "scope": "common", + "docId": "kibKbnEsqlAstPluginApi", + "section": "def-common.EditorError", + "text": "EditorError" + }, + "[]" + ], + "path": "packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/securitysolution-utils", + "id": "def-common.ParseEsqlQueryResult.isEsqlQueryAggregating", + "type": "boolean", + "tags": [], + "label": "isEsqlQueryAggregating", + "description": [], + "path": "packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/securitysolution-utils", + "id": "def-common.ParseEsqlQueryResult.hasMetadataOperator", + "type": "boolean", + "tags": [], + "label": "hasMetadataOperator", + "description": [], + "path": "packages/kbn-securitysolution-utils/src/esql/parse_esql_query.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + } + ], "enums": [ { "parentPluginId": "@kbn/securitysolution-utils", diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index c370f29498099..cfd489ebead9d 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-detection-engine](https://github.com/orgs/elastic/tea | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 63 | 0 | 55 | 0 | +| 69 | 0 | 60 | 0 | ## Common @@ -31,6 +31,9 @@ Contact [@elastic/security-detection-engine](https://github.com/orgs/elastic/tea ### Classes +### Interfaces + + ### Enums diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index ded0e09e5950b..a13c6663a52b6 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-12-05 +date: 2024-12-06 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 8981034abc16c..87681c860122c 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index 99ec9eff9f1c9..9d59d8ad72997 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 3c63f400f5f7c..bbec68eaa0f8d 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index bf17fda265bd3..f10392c989063 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-12-05 +date: 2024-12-06 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 34b950278519e..2f96d276d389e 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-12-05 +date: 2024-12-06 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 235ddb8346826..8ee62126d76ab 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-12-05 +date: 2024-12-06 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 da738e6cd2cbe..7513689806085 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-12-05 +date: 2024-12-06 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 858f9f7085f3b..503d8f279b5de 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-12-05 +date: 2024-12-06 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 4ed5c69136af7..244301d6805de 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-12-05 +date: 2024-12-06 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 69c620329d44d..896a0247008d1 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-12-05 +date: 2024-12-06 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 dd0363c7f94d2..6795588d15cbc 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-12-05 +date: 2024-12-06 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 f041d73864106..82aa50186c35d 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-12-05 +date: 2024-12-06 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 7dfdc999d217e..7bbc0c00d9c9f 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-12-05 +date: 2024-12-06 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 6d0bc5b47d195..434a2fc5af5cf 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-12-05 +date: 2024-12-06 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 ae1c36ad0bf38..d524e23835a0a 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 f2faffce46eef..5a264b32f6f00 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-12-05 +date: 2024-12-06 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 afafdbe01cf52..e46308d5b985f 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-12-05 +date: 2024-12-06 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 74f76c42410cf..e4282c75db3bb 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-12-05 +date: 2024-12-06 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 c114b1c7c1242..c6d0d726147b2 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-12-05 +date: 2024-12-06 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 56fb65d18e823..7157b33825a89 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 dc14e663bb265..8b681edf6a467 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 c3ec414139b13..30beb96b27f11 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-12-05 +date: 2024-12-06 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 0a4f1ce0882d7..6acb294e4ac53 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-12-05 +date: 2024-12-06 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 c2ef00151dc26..57982ce5b7ab1 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-12-05 +date: 2024-12-06 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 fe233ec6c9b79..fd08ea1d7acf7 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-12-05 +date: 2024-12-06 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 cb1e518b57172..e52c69f393fb7 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-12-05 +date: 2024-12-06 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 b0a8ca2a55028..66a06759daa64 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 3e147a88ba27e..d63b533473610 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-12-05 +date: 2024-12-06 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 59d33903bd7b9..270e9ef3fd1a4 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 d128f233ffb51..cc8bb4d395b8a 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-12-05 +date: 2024-12-06 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 c7ab3578cfa55..af9d5878245d6 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 104b73f31f044..fbc82b1195531 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-12-05 +date: 2024-12-06 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 d8e0bea30a87a..764bef19531ae 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 2b5efee386948..40864d34f632f 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-12-05 +date: 2024-12-06 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 2acdcc173320c..a163bdefa87aa 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 482004a4a91a8..f4bae211b54de 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-12-05 +date: 2024-12-06 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 8f3bfae7f219d..76e10d48ab656 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-12-05 +date: 2024-12-06 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 c56fcbdc80657..191786097af8e 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 c41e6bd415dc1..c39517ab4c21b 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 cf40558b1d07d..8ae7a30d93fb6 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-12-05 +date: 2024-12-06 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 78afcc9ac763d..774a73cd21405 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-12-05 +date: 2024-12-06 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 8e0d9562d314a..3a07e4446f388 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 a52b1fe929535..a7f0a006d4359 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-12-05 +date: 2024-12-06 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 c446cbcb35a8e..d61b05c1b2c77 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-12-05 +date: 2024-12-06 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 ac4c69658a6eb..a7bc1371cb900 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-12-05 +date: 2024-12-06 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 bbbb33e24c127..8fef17c858306 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-12-05 +date: 2024-12-06 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 6e2f9a0d7edf0..1653a99cdce71 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 2ab9a355f339f..1977c552c18ac 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index 4a1be765fae64..af862bf19ec0d 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index c474cfa289d3b..d57105039543b 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_slo_schema.devdocs.json index 57d2f788dc036..434db5f52535c 100644 --- a/api_docs/kbn_slo_schema.devdocs.json +++ b/api_docs/kbn_slo_schema.devdocs.json @@ -561,7 +561,7 @@ "label": "APMTransactionDurationIndicator", "description": [], "signature": [ - "{ type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }" + "{ type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -576,7 +576,7 @@ "label": "APMTransactionErrorRateIndicator", "description": [], "signature": [ - "{ type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }" + "{ type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -606,7 +606,7 @@ "label": "CreateSLOInput", "description": [], "signature": [ - "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }" + "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/create.ts", "deprecated": false, @@ -621,7 +621,7 @@ "label": "CreateSLOParams", "description": [], "signature": [ - "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: ", + "{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -805,7 +805,7 @@ "label": "FiltersSchema", "description": [], "signature": [ - "{ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]" + "({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -835,7 +835,7 @@ "label": "FindSLODefinitionsResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; results: { id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }[]; }" + "{ page: number; perPage: number; total: number; results: { id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }[]; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find_definition.ts", "deprecated": false, @@ -895,7 +895,7 @@ "label": "FindSLOResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; })[]; }" + "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; })[]; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts", "deprecated": false, @@ -910,7 +910,7 @@ "label": "GetPreviewDataParams", "description": [], "signature": [ - "{ indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; range: { from: Date; to: Date; }; } & { objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", + "{ indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; range: { from: Date; to: Date; }; } & { objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -957,15 +957,30 @@ }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.GetSLOInstancesResponse", + "id": "def-common.GetSLOGroupingsParams", "type": "Type", "tags": [], - "label": "GetSLOInstancesResponse", + "label": "GetSLOGroupingsParams", "description": [], "signature": [ - "{ groupBy: string | string[]; instances: string[]; }" + "{ instanceId: string; groupingKey: string; } & { search?: string | undefined; afterKey?: string | undefined; size?: string | undefined; excludeStale?: boolean | undefined; remoteName?: string | undefined; }" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_slo_groupings.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/slo-schema", + "id": "def-common.GetSLOGroupingsResponse", + "type": "Type", + "tags": [], + "label": "GetSLOGroupingsResponse", + "description": [], + "signature": [ + "{ groupingKey: string; values: string[]; afterKey: string | undefined; }" + ], + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_slo_groupings.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -993,7 +1008,7 @@ "label": "GetSLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get.ts", "deprecated": false, @@ -1068,7 +1083,7 @@ "label": "HistogramIndicator", "description": [], "signature": [ - "{ type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }" + "{ type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1098,7 +1113,7 @@ "label": "Indicator", "description": [], "signature": [ - "{ type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }" + "{ type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1128,7 +1143,7 @@ "label": "KQLCustomIndicator", "description": [], "signature": [ - "{ type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }" + "{ type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1143,7 +1158,7 @@ "label": "KqlWithFiltersSchema", "description": [], "signature": [ - "{ kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }" + "{ kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1173,7 +1188,7 @@ "label": "MetricCustomIndicator", "description": [], "signature": [ - "{ type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }" + "{ type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1233,7 +1248,7 @@ "label": "QuerySchema", "description": [], "signature": [ - "string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }" + "string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1263,7 +1278,7 @@ "label": "ResetSLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/reset.ts", "deprecated": false, @@ -1278,7 +1293,7 @@ "label": "SLODefinitionResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -1293,7 +1308,7 @@ "label": "SLOWithSummaryResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -1308,7 +1323,7 @@ "label": "SyntheticsAvailabilityIndicator", "description": [], "signature": [ - "{ type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }" + "{ type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1323,7 +1338,7 @@ "label": "TimesclieMetricPercentileMetric", "description": [], "signature": [ - "{ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }" + "{ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1338,7 +1353,7 @@ "label": "TimesliceMetricBasicMetricWithField", "description": [], "signature": [ - "{ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }" + "{ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1353,7 +1368,7 @@ "label": "TimesliceMetricDocCountMetric", "description": [], "signature": [ - "{ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }" + "{ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1368,7 +1383,7 @@ "label": "TimesliceMetricIndicator", "description": [], "signature": [ - "{ type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }" + "{ type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/indicators.ts", "deprecated": false, @@ -1398,7 +1413,7 @@ "label": "UpdateSLOInput", "description": [], "signature": [ - "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | undefined; timeWindow?: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }) | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; }" + "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | undefined; timeWindow?: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; } | undefined; budgetingMethod?: \"occurrences\" | \"timeslices\" | undefined; objective?: ({ target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }) | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/update.ts", "deprecated": false, @@ -1413,7 +1428,7 @@ "label": "UpdateSLOParams", "description": [], "signature": [ - "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | undefined; timeWindow?: { duration: ", + "{ name?: string | undefined; description?: string | undefined; indicator?: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | undefined; timeWindow?: { duration: ", { "pluginId": "@kbn/slo-schema", "scope": "common", @@ -1468,7 +1483,7 @@ "label": "UpdateSLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/update.ts", "deprecated": false, @@ -1581,6 +1596,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -1618,7 +1635,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>" ], @@ -1697,6 +1718,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -1734,7 +1757,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>" ], @@ -1891,6 +1918,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -1928,7 +1957,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -1977,6 +2010,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2014,7 +2049,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -2087,6 +2126,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2124,7 +2165,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -2147,6 +2192,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2184,7 +2231,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -2195,6 +2246,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2232,7 +2285,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -2247,6 +2304,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2284,7 +2343,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -2325,6 +2388,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2362,7 +2427,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -2383,6 +2452,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2420,7 +2491,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -2451,6 +2526,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2488,7 +2565,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -2509,6 +2590,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2546,7 +2629,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -2563,6 +2650,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2600,7 +2689,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -2641,6 +2734,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2678,7 +2773,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -2699,6 +2798,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2736,7 +2837,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -2761,6 +2866,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2798,7 +2905,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -2819,6 +2930,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2856,7 +2969,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -2893,6 +3010,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2930,7 +3049,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -2955,6 +3078,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -2992,7 +3117,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -3015,6 +3144,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -3052,7 +3183,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -3077,6 +3212,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -3114,7 +3251,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -3127,6 +3268,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -3164,7 +3307,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>]>; timeWindow: ", "UnionC", @@ -3699,6 +3846,8 @@ "signature": [ "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -3736,7 +3885,11 @@ "StringC", ", ", "AnyC", - ">; }>>" + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", "deprecated": false, @@ -3845,6 +3998,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -3882,7 +4037,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -3931,6 +4090,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -3968,7 +4129,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -4041,6 +4206,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4078,7 +4245,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -4101,6 +4272,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4138,7 +4311,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -4149,6 +4326,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4186,7 +4365,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -4201,6 +4384,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4238,7 +4423,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -4279,6 +4468,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4316,7 +4507,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -4337,6 +4532,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4374,7 +4571,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -4405,6 +4606,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4442,7 +4645,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -4463,6 +4670,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4500,7 +4709,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -4517,6 +4730,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4554,7 +4769,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -4595,6 +4814,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4632,7 +4853,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -4653,6 +4878,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4690,7 +4917,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -4715,6 +4946,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4752,7 +4985,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -4773,6 +5010,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4810,7 +5049,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -4847,6 +5090,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4884,7 +5129,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -4909,6 +5158,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -4946,7 +5197,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -4969,6 +5224,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -5006,7 +5263,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -5031,6 +5292,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -5068,7 +5331,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -5081,6 +5348,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -5118,7 +5387,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>]>; timeWindow: ", "UnionC", @@ -5495,6 +5768,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -5532,7 +5807,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -5581,6 +5860,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -5618,7 +5899,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -5691,6 +5976,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -5728,7 +6015,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -5751,6 +6042,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -5788,7 +6081,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -5799,6 +6096,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -5836,7 +6135,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -5851,6 +6154,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -5888,7 +6193,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -5929,6 +6238,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -5966,7 +6277,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -5987,6 +6302,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6024,7 +6341,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -6055,6 +6376,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6092,7 +6415,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -6113,6 +6440,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6150,7 +6479,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -6167,6 +6500,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6204,7 +6539,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -6245,6 +6584,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6282,7 +6623,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -6303,6 +6648,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6340,7 +6687,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -6365,6 +6716,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6402,7 +6755,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -6423,6 +6780,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6460,7 +6819,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -6497,6 +6860,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6534,7 +6899,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -6559,6 +6928,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6596,7 +6967,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -6619,6 +6994,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6656,7 +7033,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -6681,7 +7062,9 @@ "; filters: ", "ArrayC", "<", - "TypeC", + "IntersectionC", + "<[", + "TypeC", "<{ meta: ", "PartialC", "<{ alias: ", @@ -6718,7 +7101,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -6731,6 +7118,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -6768,7 +7157,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>]>; timeWindow: ", "UnionC", @@ -7035,6 +7428,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7072,7 +7467,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -7121,6 +7520,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7158,7 +7559,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -7231,6 +7636,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7268,7 +7675,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -7291,6 +7702,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7328,7 +7741,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -7339,6 +7756,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7376,7 +7795,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -7391,6 +7814,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7428,7 +7853,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -7469,6 +7898,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7506,7 +7937,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -7527,6 +7962,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7564,7 +8001,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -7595,6 +8036,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7632,7 +8075,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -7653,6 +8100,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7690,7 +8139,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -7707,6 +8160,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7744,7 +8199,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -7785,6 +8244,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7822,7 +8283,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -7843,6 +8308,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7880,7 +8347,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -7905,6 +8376,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -7942,7 +8415,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -7963,6 +8440,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -8000,7 +8479,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -8037,6 +8520,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -8074,7 +8559,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -8099,6 +8588,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -8136,7 +8627,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -8159,6 +8654,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -8196,7 +8693,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -8221,6 +8722,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -8258,7 +8761,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -8271,6 +8778,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -8308,7 +8817,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>]>; range: ", "TypeC", @@ -8485,10 +8998,10 @@ }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.getSLOInstancesParamsSchema", + "id": "def-common.getSLOGroupingsParamsSchema", "type": "Object", "tags": [], - "label": "getSLOInstancesParamsSchema", + "label": "getSLOGroupingsParamsSchema", "description": [], "signature": [ "TypeC", @@ -8496,43 +9009,57 @@ "TypeC", "<{ id: ", "StringC", - "; }>; }>" + "; }>; query: ", + "IntersectionC", + "<[", + "TypeC", + "<{ instanceId: ", + "StringC", + "; groupingKey: ", + "StringC", + "; }>, ", + "PartialC", + "<{ search: ", + "StringC", + "; afterKey: ", + "StringC", + "; size: ", + "StringC", + "; excludeStale: ", + "Type", + "; remoteName: ", + "StringC", + "; }>]>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_slo_groupings.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "@kbn/slo-schema", - "id": "def-common.getSLOInstancesResponseSchema", + "id": "def-common.getSLOGroupingsResponseSchema", "type": "Object", "tags": [], - "label": "getSLOInstancesResponseSchema", + "label": "getSLOGroupingsResponseSchema", "description": [], "signature": [ "TypeC", - "<{ groupBy: ", - "UnionC", - "<[", - "LiteralC", - "<\"*\">, ", + "<{ groupingKey: ", "StringC", - ", ", + "; values: ", "ArrayC", "<", + "StringC", + ">; afterKey: ", "UnionC", "<[", - "LiteralC", - "<\"*\">, ", "StringC", - "]>>]>; instances: ", - "ArrayC", - "<", - "StringC", - ">; }>" + ", ", + "UndefinedC", + "]>; }>" ], - "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_instances.ts", + "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get_slo_groupings.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -8639,6 +9166,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -8676,7 +9205,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -8725,6 +9258,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -8762,7 +9297,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -8835,6 +9374,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -8872,7 +9413,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -8895,6 +9440,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -8932,7 +9479,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -8943,6 +9494,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -8980,7 +9533,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -8995,6 +9552,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9032,7 +9591,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -9073,6 +9636,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9110,7 +9675,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -9131,6 +9700,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9168,7 +9739,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -9199,6 +9774,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9236,7 +9813,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -9257,6 +9838,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9294,7 +9877,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -9311,6 +9898,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9348,7 +9937,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -9389,6 +9982,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9426,7 +10021,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -9447,6 +10046,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9484,7 +10085,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -9509,6 +10114,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9546,7 +10153,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -9567,6 +10178,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9604,7 +10217,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -9641,6 +10258,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9678,7 +10297,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -9703,6 +10326,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9740,7 +10365,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -9763,6 +10392,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9800,7 +10431,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -9825,6 +10460,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9862,7 +10499,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -9875,6 +10516,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -9912,7 +10555,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>]>; timeWindow: ", "UnionC", @@ -10301,6 +10948,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -10338,7 +10987,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -10363,6 +11016,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -10400,7 +11055,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -10423,6 +11082,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -10460,7 +11121,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -10485,6 +11150,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -10522,7 +11189,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -10535,6 +11206,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -10572,7 +11245,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>" ], @@ -10695,6 +11372,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -10732,7 +11411,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -10781,6 +11464,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -10818,7 +11503,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -10891,6 +11580,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -10928,7 +11619,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -10951,6 +11646,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -10988,7 +11685,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -10999,6 +11700,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11036,7 +11739,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -11051,6 +11758,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11088,7 +11797,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -11129,6 +11842,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11166,7 +11881,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -11187,6 +11906,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11224,7 +11945,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -11255,6 +11980,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11292,7 +12019,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -11313,6 +12044,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11350,7 +12083,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -11367,6 +12104,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11404,7 +12143,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -11445,6 +12188,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11482,7 +12227,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -11503,6 +12252,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11540,7 +12291,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -11565,6 +12320,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11602,7 +12359,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -11623,6 +12384,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11660,7 +12423,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -11697,6 +12464,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11734,7 +12503,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -11759,6 +12532,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11796,7 +12571,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -11819,6 +12598,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11856,7 +12637,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -11881,6 +12666,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11918,7 +12705,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -11931,6 +12722,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -11968,7 +12761,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>]>" ], @@ -12051,6 +12848,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -12088,7 +12887,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -12099,6 +12902,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -12136,7 +12941,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -12151,6 +12960,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -12188,7 +12999,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>" ], @@ -12242,6 +13057,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -12279,7 +13096,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>" + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", "deprecated": false, @@ -12360,6 +13181,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -12397,7 +13220,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>" + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", "deprecated": false, @@ -12432,6 +13259,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -12469,7 +13298,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>" + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", "deprecated": false, @@ -12522,6 +13355,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -12559,7 +13394,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -12580,6 +13419,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -12617,7 +13458,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -12648,6 +13493,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -12685,7 +13532,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -12706,6 +13557,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -12743,7 +13596,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -12760,6 +13617,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -12797,7 +13656,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>" ], @@ -13004,6 +13867,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13041,7 +13906,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>" + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", "deprecated": false, @@ -13154,6 +14023,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13191,7 +14062,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -13240,6 +14115,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13277,7 +14154,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -13350,6 +14231,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13387,7 +14270,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -13410,6 +14297,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13447,7 +14336,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -13458,6 +14351,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13495,7 +14390,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -13510,6 +14409,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13547,7 +14448,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -13588,6 +14493,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13625,7 +14532,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -13646,6 +14557,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13683,7 +14596,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -13714,6 +14631,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13751,7 +14670,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -13772,6 +14695,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13809,7 +14734,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -13826,6 +14755,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13863,7 +14794,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -13904,6 +14839,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13941,7 +14878,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -13962,6 +14903,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -13999,7 +14942,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -14024,6 +14971,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -14061,7 +15010,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -14082,6 +15035,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -14119,7 +15074,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -14156,6 +15115,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -14193,7 +15154,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -14218,6 +15183,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -14255,7 +15222,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -14278,6 +15249,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -14315,7 +15288,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -14340,6 +15317,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -14377,7 +15356,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -14390,6 +15373,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -14427,7 +15412,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>]>; timeWindow: ", "UnionC", @@ -14712,6 +15701,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -14749,7 +15740,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -14798,6 +15793,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -14835,7 +15832,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -14908,6 +15909,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -14945,7 +15948,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -14968,6 +15975,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15005,7 +16014,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -15016,6 +16029,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15053,7 +16068,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -15068,6 +16087,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15105,7 +16126,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -15146,6 +16171,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15183,7 +16210,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -15204,6 +16235,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15241,7 +16274,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -15272,6 +16309,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15309,7 +16348,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -15330,6 +16373,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15367,7 +16412,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -15384,6 +16433,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15421,7 +16472,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -15462,6 +16517,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15499,7 +16556,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -15520,6 +16581,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15557,7 +16620,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -15582,6 +16649,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15619,7 +16688,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -15640,6 +16713,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15677,7 +16752,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -15714,6 +16793,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15751,7 +16832,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -15776,6 +16861,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15813,7 +16900,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -15836,6 +16927,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15873,7 +16966,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -15898,6 +16995,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15935,7 +17034,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -15948,6 +17051,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -15985,7 +17090,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>]>; timeWindow: ", "UnionC", @@ -16302,6 +17411,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -16339,7 +17450,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -16388,6 +17503,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -16425,7 +17542,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -16498,6 +17619,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -16535,7 +17658,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -16558,6 +17685,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -16595,7 +17724,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -16606,6 +17739,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -16643,7 +17778,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -16658,6 +17797,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -16695,7 +17836,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -16736,6 +17881,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -16773,7 +17920,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -16794,6 +17945,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -16831,7 +17984,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -16862,6 +18019,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -16899,7 +18058,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -16920,6 +18083,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -16957,7 +18122,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -16974,6 +18143,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -17011,7 +18182,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -17052,6 +18227,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -17089,7 +18266,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -17110,6 +18291,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -17147,7 +18330,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -17172,6 +18359,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -17209,7 +18398,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -17230,6 +18423,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -17267,7 +18462,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -17304,6 +18503,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -17341,7 +18542,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -17366,6 +18571,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -17403,7 +18610,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -17426,6 +18637,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -17463,7 +18676,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -17488,6 +18705,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -17525,7 +18744,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -17538,6 +18761,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -17575,7 +18800,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>]>; timeWindow: ", "UnionC", @@ -17958,6 +19187,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -17995,7 +19226,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>" ], @@ -18086,6 +19321,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -18123,7 +19360,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>" + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", "deprecated": false, @@ -18216,6 +19457,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -18253,7 +19496,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>" + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", "deprecated": false, @@ -18306,6 +19553,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -18343,7 +19592,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -18364,6 +19617,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -18401,7 +19656,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -18426,6 +19685,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -18463,7 +19724,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -18484,6 +19749,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -18521,7 +19788,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>" ], @@ -18578,6 +19849,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -18615,7 +19888,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -18636,6 +19913,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -18673,7 +19952,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -18698,6 +19981,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -18735,7 +20020,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>" + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", "deprecated": false, @@ -18774,6 +20063,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -18811,7 +20102,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>" + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/indicators.ts", "deprecated": false, @@ -18968,6 +20263,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19005,7 +20302,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -19054,6 +20355,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19091,7 +20394,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -19164,6 +20471,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19201,7 +20510,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -19224,6 +20537,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19261,7 +20576,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -19272,6 +20591,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19309,7 +20630,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -19324,6 +20649,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19361,7 +20688,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -19402,6 +20733,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19439,7 +20772,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -19460,6 +20797,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19497,7 +20836,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -19528,6 +20871,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19565,7 +20910,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -19586,6 +20935,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19623,7 +20974,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -19640,6 +20995,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19677,7 +21034,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -19718,6 +21079,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19755,7 +21118,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -19776,6 +21143,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19813,7 +21182,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -19838,6 +21211,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19875,7 +21250,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -19896,6 +21275,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -19933,7 +21314,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -19970,6 +21355,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20007,7 +21394,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -20032,6 +21423,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20069,7 +21462,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -20092,6 +21489,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20129,7 +21528,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -20154,6 +21557,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20191,7 +21596,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -20204,6 +21613,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20241,7 +21652,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>]>; timeWindow: ", "UnionC", @@ -20420,6 +21835,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20457,7 +21874,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -20506,6 +21927,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20543,7 +21966,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -20616,6 +22043,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20653,7 +22082,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -20676,6 +22109,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20713,7 +22148,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; total: ", "UnionC", "<[", "StringC", @@ -20724,6 +22163,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20761,7 +22202,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; timestampField: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; timestampField: ", "StringC", "; }>, ", "PartialC", @@ -20776,6 +22221,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20813,7 +22260,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -20854,6 +22305,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20891,7 +22344,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -20912,6 +22369,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -20949,7 +22408,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; total: ", "TypeC", @@ -20980,6 +22443,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21017,7 +22482,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -21038,6 +22507,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21075,7 +22546,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; }>; timestampField: ", "StringC", @@ -21092,6 +22567,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21129,7 +22606,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -21170,6 +22651,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21207,7 +22690,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -21228,6 +22715,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21265,7 +22754,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -21290,6 +22783,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21327,7 +22822,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>>; equation: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>>; equation: ", "StringC", "; threshold: ", "NumberC", @@ -21348,6 +22847,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21385,7 +22886,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>, ", "TypeC", @@ -21422,6 +22927,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21459,7 +22966,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -21484,6 +22995,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21521,7 +23034,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; total: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; total: ", "UnionC", "<[", "IntersectionC", @@ -21544,6 +23061,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21581,7 +23100,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>, ", "IntersectionC", "<[", "TypeC", @@ -21606,6 +23129,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21643,7 +23168,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; }>]>]>; }>, ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; }>]>]>; }>, ", "PartialC", "<{ filter: ", "UnionC", @@ -21656,6 +23185,8 @@ "; filters: ", "ArrayC", "<", + "IntersectionC", + "<[", "TypeC", "<{ meta: ", "PartialC", @@ -21693,7 +23224,11 @@ "StringC", ", ", "AnyC", - ">; }>>; }>]>; dataViewId: ", + ">; }>, ", + "PartialC", + "<{ $state: ", + "AnyC", + "; }>]>>; }>]>; dataViewId: ", "StringC", "; }>]>; }>]>; timeWindow: ", "UnionC", diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index c9640e76e5b91..8ea257edf7cdd 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 182 | 0 | 182 | 0 | +| 183 | 0 | 183 | 0 | ## Common diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 1147c8628b73b..939cc9fa829d1 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-12-05 +date: 2024-12-06 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 59288860028b0..a2354c1502ae6 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_sse_utils.mdx b/api_docs/kbn_sse_utils.mdx index d9c6dc6a006e0..5b712987bf8e2 100644 --- a/api_docs/kbn_sse_utils.mdx +++ b/api_docs/kbn_sse_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils title: "@kbn/sse-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils'] --- import kbnSseUtilsObj from './kbn_sse_utils.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_client.mdx b/api_docs/kbn_sse_utils_client.mdx index b011596f89319..8a826f05b98bc 100644 --- a/api_docs/kbn_sse_utils_client.mdx +++ b/api_docs/kbn_sse_utils_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-client title: "@kbn/sse-utils-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-client plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-client'] --- import kbnSseUtilsClientObj from './kbn_sse_utils_client.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index cebfa7235f064..5638fa8a975e3 100644 --- a/api_docs/kbn_sse_utils_server.mdx +++ b/api_docs/kbn_sse_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-server title: "@kbn/sse-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-server plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index cacd4078dc9f0..af8e1829fa288 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-12-05 +date: 2024-12-06 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 14ded0c87e2f6..966009240ba38 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-12-05 +date: 2024-12-06 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 3837fd10aba3e..aa626941b3bd6 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 596a8d5f9ede5..0fd0fa14e20b3 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index c706181bdbeea..11d3d99593dcd 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 188bdf4c20e5e..c0eaed2931e65 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-12-05 +date: 2024-12-06 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 caaa930e0b2e5..1efad9614ef39 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-12-05 +date: 2024-12-06 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 49443b0f2b540..a00308f3ff0b2 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-12-05 +date: 2024-12-06 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 5f86aedaeaa0c..ea6c59932d79e 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-12-05 +date: 2024-12-06 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 bcf8c08d96cb0..01fb22998c870 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index e9c51c80bff42..0afc5aa229231 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-12-05 +date: 2024-12-06 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 c3c19c6e2707f..9cf0bf23b2a4b 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_transpose_utils.mdx b/api_docs/kbn_transpose_utils.mdx index 7ba5f027e9993..80b495301259c 100644 --- a/api_docs/kbn_transpose_utils.mdx +++ b/api_docs/kbn_transpose_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-transpose-utils title: "@kbn/transpose-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/transpose-utils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/transpose-utils'] --- import kbnTransposeUtilsObj from './kbn_transpose_utils.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 7a76b37e5528a..47589a04765ec 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 8f523be047a8b..2dbb021396338 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 88edc70deb634..6498c5feee1fd 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-12-05 +date: 2024-12-06 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 fe9ba6657fdbf..939fb741cdd11 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-12-05 +date: 2024-12-06 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 c1d1d422c7b0a..47ffe97f738ea 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-12-05 +date: 2024-12-06 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 c91d8bd2183b3..96f2096596e9e 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-12-05 +date: 2024-12-06 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 9fdc78b1aa38c..0f615cc088a56 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-12-05 +date: 2024-12-06 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 6c63158f5fc69..c498fb0e171f3 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-12-05 +date: 2024-12-06 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 b22ae3bb364a9..98108a63dba3f 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-12-05 +date: 2024-12-06 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 7b4012feffc81..e6ff76488e9f2 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-12-05 +date: 2024-12-06 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 59baf075fb9b4..64f64dcfc5cd2 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index 44f992677f2cd..e9ccb41aa9c40 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 2af23d5eb7500..305148f2a5854 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-12-05 +date: 2024-12-06 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.devdocs.json b/api_docs/kbn_user_profile_components.devdocs.json index 34214d8791833..8bc50f12685d1 100644 --- a/api_docs/kbn_user_profile_components.devdocs.json +++ b/api_docs/kbn_user_profile_components.devdocs.json @@ -981,7 +981,15 @@ "section": "def-common.ThemeServiceStart", "text": "ThemeServiceStart" }, - "; }" + "; userProfile?: Pick<", + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + ", \"getUserProfile$\"> | undefined; }" ], "path": "packages/react/kibana_mount/to_mount_point.tsx", "deprecated": false, diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 700263df9d6ca..ede628fd2d911 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-12-05 +date: 2024-12-06 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 df388be4045c2..7c0c4d213d7e4 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-12-05 +date: 2024-12-06 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 6894218660cc3..9fc98f3429532 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-12-05 +date: 2024-12-06 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 b201178f04fad..759c57179e199 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-12-05 +date: 2024-12-06 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 ec8f70b04abb0..87711d7671299 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-12-05 +date: 2024-12-06 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 c131b146a79f2..4241d08d0715b 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 a00cd4de5c0f6..5fd6048c204ad 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-12-05 +date: 2024-12-06 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 2b3655b4f7c96..76bd80d875eff 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 02522cb4a61a6..8ede4291962d3 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 3ef344eace2f1..719b3cd5184c8 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-12-05 +date: 2024-12-06 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 056ea08798a46..49b6b7b1503a6 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index 99e4d8fe29755..c893f92835185 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -493,7 +493,7 @@ "label": "KibanaThemeProvider", "description": [], "signature": [ - "({ children, theme$, modify }: ", + "({ children, theme$, userProfile, modify, }: ", { "pluginId": "kibanaReact", "scope": "public", @@ -513,7 +513,7 @@ "id": "def-public.KibanaThemeProvider.$1", "type": "CompoundType", "tags": [], - "label": "{ children, theme$, modify }", + "label": "{\n children,\n theme$,\n userProfile,\n modify,\n}", "description": [], "signature": [ { @@ -937,7 +937,7 @@ "label": "toMountPoint", "description": [], "signature": [ - "(node: React.ReactNode, { analytics, theme$ }?: ", + "(node: React.ReactNode, { analytics, theme$, userProfile }?: ", { "pluginId": "kibanaReact", "scope": "public", @@ -989,7 +989,7 @@ "id": "def-public.toMountPoint.$2", "type": "Object", "tags": [], - "label": "{ analytics, theme$ }", + "label": "{ analytics, theme$, userProfile }", "description": [], "signature": [ { @@ -1446,7 +1446,9 @@ "parentPluginId": "kibanaReact", "id": "def-public.wrapWithTheme", "type": "Function", - "tags": [], + "tags": [ + "deprecated" + ], "label": "wrapWithTheme", "description": [], "signature": [ @@ -1460,11 +1462,37 @@ "section": "def-common.KibanaTheme", "text": "KibanaTheme" }, - ">) => React.JSX.Element" + ">, userProfile?: ", + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + " | undefined) => React.JSX.Element" ], "path": "src/plugins/kibana_react/public/theme.tsx", - "deprecated": false, + "deprecated": true, "trackAdoption": false, + "references": [ + { + "plugin": "aiAssistantManagementSelection", + "path": "src/plugins/ai_assistant_management/selection/public/management_section/mount_section.tsx" + }, + { + "plugin": "aiAssistantManagementSelection", + "path": "src/plugins/ai_assistant_management/selection/public/management_section/mount_section.tsx" + }, + { + "plugin": "observabilityAiAssistantManagement", + "path": "x-pack/plugins/observability_solution/observability_ai_assistant_management/public/app.tsx" + }, + { + "plugin": "observabilityAiAssistantManagement", + "path": "x-pack/plugins/observability_solution/observability_ai_assistant_management/public/app.tsx" + } + ], "children": [ { "parentPluginId": "kibanaReact", @@ -1504,6 +1532,28 @@ "deprecated": false, "trackAdoption": false, "isRequired": true + }, + { + "parentPluginId": "kibanaReact", + "id": "def-public.wrapWithTheme.$3", + "type": "Object", + "tags": [], + "label": "userProfile", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + " | undefined" + ], + "path": "src/plugins/kibana_react/public/theme.tsx", + "deprecated": false, + "trackAdoption": false, + "isRequired": false } ], "returnComment": [], @@ -2193,6 +2243,27 @@ "path": "src/plugins/kibana_react/public/util/index.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "kibanaReact", + "id": "def-public.ToMountPointOptions.userProfile", + "type": "Object", + "tags": [], + "label": "userProfile", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + " | undefined" + ], + "path": "src/plugins/kibana_react/public/util/index.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -2658,7 +2729,7 @@ "section": "def-common.KibanaThemeProviderProps", "text": "KibanaThemeProviderProps" }, - ", \"children\" | \"modify\"> & ", + ", \"children\" | \"userProfile\" | \"modify\"> & ", { "pluginId": "@kbn/react-kibana-context-common", "scope": "common", diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 3702555c30403..ed77397a79c09 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 153 | 0 | 121 | 3 | +| 155 | 0 | 123 | 3 | ## Client diff --git a/api_docs/kibana_utils.devdocs.json b/api_docs/kibana_utils.devdocs.json index 2d16dd1f0fbfc..83e839ee43cf6 100644 --- a/api_docs/kibana_utils.devdocs.json +++ b/api_docs/kibana_utils.devdocs.json @@ -3327,7 +3327,7 @@ "\nCreates an error handler that will redirect to a url when a SavedObjectNotFound\nerror is thrown" ], "signature": [ - "({\n history,\n navigateToApp,\n basePath,\n mapping,\n toastNotifications,\n onBeforeRedirect,\n theme,\n}: { history: ", + "({\n history,\n navigateToApp,\n basePath,\n mapping,\n toastNotifications,\n onBeforeRedirect,\n theme,\n userProfile,\n}: { history: ", "History", "; navigateToApp: (appId: string, options?: ", { @@ -3369,7 +3369,15 @@ "section": "def-public.ThemeServiceSetup", "text": "ThemeServiceSetup" }, - "; }) => (error: ", + "; userProfile?: ", + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + " | undefined; }) => (error: ", { "pluginId": "kibanaUtils", "scope": "common", @@ -3388,7 +3396,7 @@ "id": "def-public.redirectWhenMissing.$1", "type": "Object", "tags": [], - "label": "{\n history,\n navigateToApp,\n basePath,\n mapping,\n toastNotifications,\n onBeforeRedirect,\n theme,\n}", + "label": "{\n history,\n navigateToApp,\n basePath,\n mapping,\n toastNotifications,\n onBeforeRedirect,\n theme,\n userProfile,\n}", "description": [], "path": "src/plugins/kibana_utils/public/history/redirect_when_missing.tsx", "deprecated": false, @@ -3591,6 +3599,27 @@ "path": "src/plugins/kibana_utils/public/history/redirect_when_missing.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "kibanaUtils", + "id": "def-public.redirectWhenMissing.$1.userProfile", + "type": "Object", + "tags": [], + "label": "userProfile", + "description": [], + "signature": [ + { + "pluginId": "@kbn/core-user-profile-browser", + "scope": "public", + "docId": "kibKbnCoreUserProfileBrowserPluginApi", + "section": "def-public.UserProfileService", + "text": "UserProfileService" + }, + " | undefined" + ], + "path": "src/plugins/kibana_utils/public/history/redirect_when_missing.tsx", + "deprecated": false, + "trackAdoption": false } ] } diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index f8771aa0535f7..1443ffbb19977 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 610 | 3 | 417 | 9 | +| 611 | 3 | 418 | 9 | ## Client diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 0d2731a0a307c..92af2bed4e382 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index e6bdcac40ce95..0a90017cea645 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-12-05 +date: 2024-12-06 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 d286697bfc3e6..55ddad38e8d5b 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-12-05 +date: 2024-12-06 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 fae5d1b6a1044..8d12c88c48fbf 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-12-05 +date: 2024-12-06 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 d71b97ac74c87..f6159135da045 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-12-05 +date: 2024-12-06 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 2b05c97edcd09..5d8d5a8d31731 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-12-05 +date: 2024-12-06 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 4963030c351da..781715045282a 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/llm_tasks.mdx b/api_docs/llm_tasks.mdx index 51dfe4c0368bc..8a50fffc3780f 100644 --- a/api_docs/llm_tasks.mdx +++ b/api_docs/llm_tasks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/llmTasks title: "llmTasks" image: https://source.unsplash.com/400x175/?github description: API docs for the llmTasks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'llmTasks'] --- import llmTasksObj from './llm_tasks.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 9430af534ee97..d8bc94c7dbcdc 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index b21975a42075f..1e726cdbf0fd6 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index f806e45f3c9cd..7e67824b5ebfa 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-12-05 +date: 2024-12-06 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 52c6c65034c3a..3b28a29d9186f 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 542cc753ed5e5..2e7c6bf2e29a3 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index eada5bc1fbbcd..b381a1fcb5e98 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-12-05 +date: 2024-12-06 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 709fe37157f55..5870c6eafb186 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-12-05 +date: 2024-12-06 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 16ba0339dc6b2..6f75bf364267e 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-12-05 +date: 2024-12-06 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 7597824780235..c78ebd6904b77 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-12-05 +date: 2024-12-06 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 48163e5eb5a95..8ed90a30a6942 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-12-05 +date: 2024-12-06 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 00a3703e00386..74650535d624e 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-12-05 +date: 2024-12-06 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 1fbb7cef1ed2c..a8d6afc078126 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-12-05 +date: 2024-12-06 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 706b2d7175277..1486f831c7cc9 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-12-05 +date: 2024-12-06 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 f2f3ba21b0499..b19c331617c33 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-12-05 +date: 2024-12-06 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 1ff8e8763a00f..f6eed356a303d 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-12-05 +date: 2024-12-06 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 89b649746b7af..3dc14fc3d10b8 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -1008,7 +1008,7 @@ "label": "useAnnotations", "description": [], "signature": [ - "({ domain, editAnnotation, slo, setEditAnnotation, }?: { slo?: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }) | undefined; editAnnotation?: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; }) | null | undefined; setEditAnnotation?: ((annotation: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; }) | null) => void) | undefined; domain?: { min: string | number; max: string | number; } | undefined; }) => { annotations: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; })[]; onAnnotationClick: (annotations: { rects: ", + "({ domain, editAnnotation, slo, setEditAnnotation, }?: { slo?: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }) | undefined; editAnnotation?: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; }) | null | undefined; setEditAnnotation?: ((annotation: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; }) | null) => void) | undefined; domain?: { min: string | number; max: string | number; } | undefined; }) => { annotations: ({ id: string; } & { annotation: { title?: string | undefined; type?: string | undefined; style?: { icon?: string | undefined; color?: string | undefined; line?: { width?: number | undefined; style?: \"dashed\" | \"solid\" | \"dotted\" | undefined; iconPosition?: \"top\" | \"bottom\" | undefined; textDecoration?: \"none\" | \"name\" | undefined; } | undefined; rect?: { fill?: \"inside\" | \"outside\" | undefined; } | undefined; } | undefined; }; '@timestamp': string; message: string; } & { event?: ({ start: string; } & { end?: string | undefined; }) | undefined; tags?: string[] | undefined; service?: { name?: string | undefined; environment?: string | undefined; version?: string | undefined; } | undefined; monitor?: { id?: string | undefined; } | undefined; slo?: ({ id: string; } & { instanceId?: string | undefined; }) | undefined; host?: { name?: string | undefined; } | undefined; })[]; onAnnotationClick: (annotations: { rects: ", "RectAnnotationEvent", "[]; lines: ", "LineAnnotationEvent", @@ -1045,7 +1045,7 @@ "label": "slo", "description": [], "signature": [ - "({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }) | undefined" + "({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; preventInitialBackfill: boolean; } & { syncField?: string | null | undefined; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; fiveMinuteBurnRate: number; oneHourBurnRate: number; oneDayBurnRate: number; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }) | undefined" ], "path": "x-pack/plugins/observability_solution/observability/public/components/annotations/use_annotations.tsx", "deprecated": false, diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 76fe12c04e84a..4dc201e169ac8 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index ac398a6a63ff6..60945c4ccdca0 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 64b91c74f67e5..40e2e3bb6b7fd 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index b9de9b86b93a4..5b6a6c9918a8b 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 748111ef2e697..aa87b9d800e15 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.devdocs.json b/api_docs/observability_onboarding.devdocs.json index bd783f18db002..da3e58096ae87 100644 --- a/api_docs/observability_onboarding.devdocs.json +++ b/api_docs/observability_onboarding.devdocs.json @@ -329,7 +329,7 @@ "signature": [ "{ readonly ui: Readonly<{} & { enabled: boolean; }>; readonly serverless: Readonly<{} & { enabled: true; }>; }" ], - "path": "x-pack/plugins/observability_solution/observability_onboarding/server/index.ts", + "path": "x-pack/plugins/observability_solution/observability_onboarding/server/config.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index 9637ce0f978ea..3c6aef3178a03 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-12-05 +date: 2024-12-06 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 8eb7b713ce5d5..c7bce4c2bf710 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-12-05 +date: 2024-12-06 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 7fb8c83b4ca75..13fde6f41b6a5 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-12-05 +date: 2024-12-06 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 1df633c972a10..f3e5e5468e1fd 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-12-05 +date: 2024-12-06 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 64cf6c4638b13..531f632843807 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 54976 | 240 | 41347 | 2038 | +| 54979 | 240 | 41354 | 2039 | ## Plugin Directory @@ -71,7 +71,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A stateful layer to register shared features and provide an access point to discover without a direct dependency | 26 | 0 | 23 | 2 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 56 | 0 | 41 | 2 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 578 | 1 | 468 | 9 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 571 | 1 | 462 | 9 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 19 | 0 | 19 | 2 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 54 | 0 | 47 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Adds dashboards for discovering and managing Enterprise Search products. | 5 | 0 | 5 | 0 | @@ -128,9 +128,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 43 | 0 | 43 | 4 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 5 | 0 | 5 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 6 | 0 | 6 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 153 | 0 | 121 | 3 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 155 | 0 | 123 | 3 | | kibanaUsageCollection | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 610 | 3 | 417 | 9 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 611 | 3 | 418 | 9 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 5 | 0 | 5 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Visualization editor allowing to quickly and easily configure compelling visualizations to use on dashboards and canvas workpads. Exposes components to embed visualizations and link into the Lens editor from within other apps in Kibana. | 647 | 0 | 548 | 60 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 8 | 0 | 8 | 0 | @@ -187,9 +187,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 18 | 0 | 10 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 18 | 0 | 18 | 0 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 11 | 0 | 7 | 1 | -| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 21 | 0 | 21 | 0 | +| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 22 | 0 | 22 | 1 | | | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | Plugin to provide access to and rendering of python notebooks for use in the persistent developer console. | 10 | 0 | 10 | 1 | -| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 22 | 0 | 16 | 1 | +| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 13 | 0 | 13 | 0 | | searchprofiler | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-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. | 455 | 0 | 238 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 191 | 0 | 123 | 34 | @@ -316,7 +316,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 20 | 0 | 17 | 3 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 13 | 0 | 13 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 8 | 0 | 1 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 23 | 0 | 22 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 24 | 0 | 23 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 3 | 0 | 3 | 0 | @@ -340,7 +340,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 3 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 6 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 20 | 0 | 12 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 23 | 0 | 15 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 16 | 0 | 13 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 3 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 6 | 0 | @@ -501,7 +501,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 4 | 0 | 4 | 0 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 3 | 0 | 3 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 65 | 0 | 53 | 0 | -| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 21 | 0 | 21 | 0 | +| | [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-kibana) | - | 22 | 0 | 22 | 0 | | | [@elastic/security-solution](https://github.com/orgs/elastic/teams/security-solution) | - | 5 | 0 | 5 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 8 | 0 | 8 | 0 | @@ -546,7 +546,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 1 | 0 | 1 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 26 | 0 | 26 | 1 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 17 | 0 | 17 | 1 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 17 | 0 | 17 | 2 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 17 | 0 | 12 | 11 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 49 | 0 | 47 | 0 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 33 | 3 | 24 | 6 | @@ -654,9 +654,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 9 | 0 | 8 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 15 | 0 | 8 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 3 | 0 | 1 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 4 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 11 | 0 | 5 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 18 | 0 | 3 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 13 | 0 | 3 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 15 | 0 | 4 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 11 | 0 | 8 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 14 | 0 | 7 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 18 | 0 | 18 | 0 | @@ -680,7 +680,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 8 | 0 | 8 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 2 | 8 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 3 | 0 | 3 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 10 | 0 | 10 | 1 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 10 | 0 | 9 | 1 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 2 | 0 | 1 | 1 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 16 | 0 | 16 | 1 | | | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 152 | 0 | 140 | 0 | @@ -728,7 +728,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 211 | 0 | 162 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 29 | 0 | 26 | 0 | | | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 120 | 0 | 116 | 0 | -| | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 63 | 0 | 55 | 0 | +| | [@elastic/security-detection-engine](https://github.com/orgs/elastic/teams/security-detection-engine) | - | 69 | 0 | 60 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 69 | 0 | 64 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 39 | 0 | 39 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 15 | 0 | 15 | 0 | @@ -780,7 +780,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 8 | 4 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 17 | 0 | 16 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 16 | 0 | 6 | 0 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 182 | 0 | 182 | 0 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 183 | 0 | 183 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 20 | 0 | 12 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 4 | 0 | 4 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 19 | 0 | 19 | 3 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 01414e90ef48f..4892998a10183 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-12-05 +date: 2024-12-06 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 a78dd1125b6fa..23b9071b90781 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/product_doc_base.mdx b/api_docs/product_doc_base.mdx index 5b32c12174e0b..04a0f4ca404af 100644 --- a/api_docs/product_doc_base.mdx +++ b/api_docs/product_doc_base.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/productDocBase title: "productDocBase" image: https://source.unsplash.com/400x175/?github description: API docs for the productDocBase plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'productDocBase'] --- import productDocBaseObj from './product_doc_base.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 0acc2ff44bf6a..aa6832574b6a7 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-12-05 +date: 2024-12-06 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 7912783a48de0..580435914d046 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-12-05 +date: 2024-12-06 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 2b63fa1ba1ae6..b7c3259dfb664 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-12-05 +date: 2024-12-06 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 6804d5935dd9f..d621daf71e856 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-12-05 +date: 2024-12-06 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 fb070eb291b15..d909f57917b25 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-12-05 +date: 2024-12-06 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 3dbb8c0e6a810..6112a70d6dcc7 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-12-05 +date: 2024-12-06 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 bc1b863e8305d..170fd711972f9 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-12-05 +date: 2024-12-06 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 9c871b27e32dc..60d13458dc9d1 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-12-05 +date: 2024-12-06 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 9add26b265187..b41168fa47a56 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-12-05 +date: 2024-12-06 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 f002a09248e93..dd9b68aa5033c 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-12-05 +date: 2024-12-06 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 21ea11b39b58f..0f6c19ddf2032 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-12-05 +date: 2024-12-06 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 3d80815e812b7..51a844537defc 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-12-05 +date: 2024-12-06 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 2046dd4fea9b5..272c4abae6d2e 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-12-05 +date: 2024-12-06 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 eb8517c03e3a4..fe3ed38a4ea7f 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-12-05 +date: 2024-12-06 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 80059588c47ab..1dcdde85a1ee1 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index b82bd5f8e4fda..c7fe93a504fc3 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 72bab57150441..c457eac05662e 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index 1349d9178902d..4485e60b37430 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.devdocs.json b/api_docs/search_indices.devdocs.json index c2b13298b2e18..5a7119d60d4f3 100644 --- a/api_docs/search_indices.devdocs.json +++ b/api_docs/search_indices.devdocs.json @@ -85,7 +85,7 @@ "label": "startAppId", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "x-pack/plugins/search_indices/public/types.ts", "deprecated": false, diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index 78d8ce1c1713e..c39decb91510c 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 6f67f4d4b6efd..2afa29aa66060 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_navigation.devdocs.json b/api_docs/search_navigation.devdocs.json index 2abd5573472a1..3c362fdfc3aa5 100644 --- a/api_docs/search_navigation.devdocs.json +++ b/api_docs/search_navigation.devdocs.json @@ -132,7 +132,7 @@ "label": "link", "description": [], "signature": [ - "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"enterpriseSearchApplications:playground\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" + "\"fleet\" | \"graph\" | \"ml\" | \"monitoring\" | \"profiling\" | \"metrics\" | \"management\" | \"apm\" | \"synthetics\" | \"ux\" | \"canvas\" | \"logs\" | \"dashboards\" | \"slo\" | \"observabilityAIAssistant\" | \"home\" | \"integrations\" | \"discover\" | \"observability-overview\" | \"streams\" | \"appSearch\" | \"dev_tools\" | \"maps\" | \"visualize\" | \"dev_tools:console\" | \"dev_tools:searchprofiler\" | \"dev_tools:painless_lab\" | \"dev_tools:grokdebugger\" | \"ml:notifications\" | \"ml:nodes\" | \"ml:overview\" | \"ml:memoryUsage\" | \"ml:settings\" | \"ml:dataVisualizer\" | \"ml:logPatternAnalysis\" | \"ml:logRateAnalysis\" | \"ml:singleMetricViewer\" | \"ml:anomalyDetection\" | \"ml:anomalyExplorer\" | \"ml:dataDrift\" | \"ml:dataFrameAnalytics\" | \"ml:resultExplorer\" | \"ml:analyticsMap\" | \"ml:aiOps\" | \"ml:changePointDetections\" | \"ml:modelManagement\" | \"ml:nodesOverview\" | \"ml:esqlDataVisualizer\" | \"ml:fileUpload\" | \"ml:indexDataVisualizer\" | \"ml:calendarSettings\" | \"ml:filterListsSettings\" | \"ml:suppliedConfigurations\" | \"osquery\" | \"management:transform\" | \"management:watcher\" | \"management:cases\" | \"management:tags\" | \"management:maintenanceWindows\" | \"management:cross_cluster_replication\" | \"management:dataViews\" | \"management:spaces\" | \"management:settings\" | \"management:users\" | \"management:migrate_data\" | \"management:search_sessions\" | \"management:data_quality\" | \"management:filesManagement\" | \"management:pipelines\" | \"management:roles\" | \"management:reporting\" | \"management:aiAssistantManagementSelection\" | \"management:securityAiAssistantManagement\" | \"management:observabilityAiAssistantManagement\" | \"management:api_keys\" | \"management:license_management\" | \"management:index_lifecycle_management\" | \"management:index_management\" | \"management:ingest_pipelines\" | \"management:jobsListLink\" | \"management:objects\" | \"management:remote_clusters\" | \"management:role_mappings\" | \"management:rollup_jobs\" | \"management:snapshot_restore\" | \"management:triggersActions\" | \"management:triggersActionsConnectors\" | \"management:upgrade_assistant\" | \"enterpriseSearch\" | \"enterpriseSearchContent\" | \"enterpriseSearchApplications\" | \"searchInferenceEndpoints\" | \"enterpriseSearchAnalytics\" | \"workplaceSearch\" | \"serverlessElasticsearch\" | \"serverlessConnectors\" | \"serverlessWebCrawlers\" | \"searchPlayground\" | \"searchHomepage\" | \"enterpriseSearchContent:connectors\" | \"enterpriseSearchContent:searchIndices\" | \"enterpriseSearchContent:webCrawlers\" | \"enterpriseSearchApplications:searchApplications\" | \"appSearch:engines\" | \"searchInferenceEndpoints:inferenceEndpoints\" | \"elasticsearchStart\" | \"elasticsearchIndices\" | \"enterpriseSearchElasticsearch\" | \"enterpriseSearchVectorSearch\" | \"enterpriseSearchSemanticSearch\" | \"enterpriseSearchAISearch\" | \"elasticsearchIndices:createIndex\" | \"observability-logs-explorer\" | \"last-used-logs-viewer\" | \"observabilityOnboarding\" | \"inventory\" | \"logs:settings\" | \"logs:stream\" | \"logs:log-categories\" | \"logs:anomalies\" | \"observability-overview:cases\" | \"observability-overview:alerts\" | \"observability-overview:rules\" | \"observability-overview:cases_create\" | \"observability-overview:cases_configure\" | \"metrics:settings\" | \"metrics:hosts\" | \"metrics:inventory\" | \"metrics:metrics-explorer\" | \"metrics:assetDetails\" | \"apm:services\" | \"apm:traces\" | \"apm:dependencies\" | \"apm:service-map\" | \"apm:settings\" | \"apm:service-groups-list\" | \"apm:storage-explorer\" | \"synthetics:overview\" | \"synthetics:certificates\" | \"profiling:functions\" | \"profiling:stacktraces\" | \"profiling:flamegraphs\" | \"inventory:datastreams\" | \"streams:overview\" | \"securitySolutionUI\" | \"securitySolutionUI:\" | \"securitySolutionUI:cases\" | \"securitySolutionUI:alerts\" | \"securitySolutionUI:rules\" | \"securitySolutionUI:policy\" | \"securitySolutionUI:overview\" | \"securitySolutionUI:dashboards\" | \"securitySolutionUI:kubernetes\" | \"securitySolutionUI:cases_create\" | \"securitySolutionUI:cases_configure\" | \"securitySolutionUI:hosts\" | \"securitySolutionUI:users\" | \"securitySolutionUI:cloud_defend-policies\" | \"securitySolutionUI:cloud_security_posture-dashboard\" | \"securitySolutionUI:cloud_security_posture-findings\" | \"securitySolutionUI:cloud_security_posture-benchmarks\" | \"securitySolutionUI:network\" | \"securitySolutionUI:data_quality\" | \"securitySolutionUI:explore\" | \"securitySolutionUI:assets\" | \"securitySolutionUI:cloud_defend\" | \"securitySolutionUI:notes\" | \"securitySolutionUI:administration\" | \"securitySolutionUI:attack_discovery\" | \"securitySolutionUI:blocklist\" | \"securitySolutionUI:cloud_security_posture-rules\" | \"securitySolutionUI:detections\" | \"securitySolutionUI:detection_response\" | \"securitySolutionUI:endpoints\" | \"securitySolutionUI:event_filters\" | \"securitySolutionUI:exceptions\" | \"securitySolutionUI:host_isolation_exceptions\" | \"securitySolutionUI:hosts-all\" | \"securitySolutionUI:hosts-anomalies\" | \"securitySolutionUI:hosts-risk\" | \"securitySolutionUI:hosts-events\" | \"securitySolutionUI:hosts-sessions\" | \"securitySolutionUI:hosts-uncommon_processes\" | \"securitySolutionUI:investigations\" | \"securitySolutionUI:get_started\" | \"securitySolutionUI:machine_learning-landing\" | \"securitySolutionUI:network-anomalies\" | \"securitySolutionUI:network-dns\" | \"securitySolutionUI:network-events\" | \"securitySolutionUI:network-flows\" | \"securitySolutionUI:network-http\" | \"securitySolutionUI:network-tls\" | \"securitySolutionUI:response_actions_history\" | \"securitySolutionUI:rules-add\" | \"securitySolutionUI:rules-create\" | \"securitySolutionUI:rules-landing\" | \"securitySolutionUI:siem_migrations-rules\" | \"securitySolutionUI:threat_intelligence\" | \"securitySolutionUI:timelines\" | \"securitySolutionUI:timelines-templates\" | \"securitySolutionUI:trusted_apps\" | \"securitySolutionUI:users-all\" | \"securitySolutionUI:users-anomalies\" | \"securitySolutionUI:users-authentications\" | \"securitySolutionUI:users-events\" | \"securitySolutionUI:users-risk\" | \"securitySolutionUI:entity_analytics\" | \"securitySolutionUI:entity_analytics-management\" | \"securitySolutionUI:entity_analytics-asset-classification\" | \"securitySolutionUI:entity_analytics-entity_store_management\" | \"securitySolutionUI:coverage-overview\" | \"fleet:settings\" | \"fleet:agents\" | \"fleet:policies\" | \"fleet:data_streams\" | \"fleet:enrollment_tokens\" | \"fleet:uninstall_tokens\"" ], "path": "x-pack/plugins/search_solution/search_navigation/public/types.ts", "deprecated": false, @@ -334,6 +334,30 @@ } ], "returnComment": [] + }, + { + "parentPluginId": "searchNavigation", + "id": "def-public.SearchNavigationPluginStart.breadcrumbs", + "type": "Object", + "tags": [], + "label": "breadcrumbs", + "description": [], + "signature": [ + "{ setSearchBreadCrumbs: (breadcrumbs: ", + { + "pluginId": "@kbn/core-chrome-browser", + "scope": "public", + "docId": "kibKbnCoreChromeBrowserPluginApi", + "section": "def-public.ChromeBreadcrumb", + "text": "ChromeBreadcrumb" + }, + "[], options?: ", + "SearchNavigationSetBreadcrumbsOptions", + " | undefined) => void; clearBreadcrumbs: () => void; }" + ], + "path": "x-pack/plugins/search_solution/search_navigation/public/types.ts", + "deprecated": false, + "trackAdoption": false } ], "lifecycle": "start", diff --git a/api_docs/search_navigation.mdx b/api_docs/search_navigation.mdx index e0c890e57baff..e96b8dcda0019 100644 --- a/api_docs/search_navigation.mdx +++ b/api_docs/search_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNavigation title: "searchNavigation" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNavigation plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNavigation'] --- import searchNavigationObj from './search_navigation.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-ki | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 21 | 0 | 21 | 0 | +| 22 | 0 | 22 | 1 | ## Client diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 134a0e12f368f..da7483ccb3d62 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.devdocs.json b/api_docs/search_playground.devdocs.json index c097d00d40a15..ae93251c8e63d 100644 --- a/api_docs/search_playground.devdocs.json +++ b/api_docs/search_playground.devdocs.json @@ -44,145 +44,7 @@ "path": "x-pack/plugins/search_playground/public/types.ts", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "searchPlayground", - "id": "def-public.SearchPlaygroundPluginStart.PlaygroundProvider", - "type": "Function", - "tags": [], - "label": "PlaygroundProvider", - "description": [], - "signature": [ - "React.FunctionComponent<{ children?: React.ReactNode; }>" - ], - "path": "x-pack/plugins/search_playground/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "searchPlayground", - "id": "def-public.SearchPlaygroundPluginStart.PlaygroundProvider.$1", - "type": "Uncategorized", - "tags": [], - "label": "props", - "description": [], - "signature": [ - "P" - ], - "path": "node_modules/@types/react/ts5.0/index.d.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "searchPlayground", - "id": "def-public.SearchPlaygroundPluginStart.PlaygroundProvider.$2", - "type": "Any", - "tags": [], - "label": "context", - "description": [], - "signature": [ - "any" - ], - "path": "node_modules/@types/react/ts5.0/index.d.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "searchPlayground", - "id": "def-public.SearchPlaygroundPluginStart.Playground", - "type": "Function", - "tags": [], - "label": "Playground", - "description": [], - "signature": [ - "React.FunctionComponent<", - "AppProps", - ">" - ], - "path": "x-pack/plugins/search_playground/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "searchPlayground", - "id": "def-public.SearchPlaygroundPluginStart.Playground.$1", - "type": "Uncategorized", - "tags": [], - "label": "props", - "description": [], - "signature": [ - "P" - ], - "path": "node_modules/@types/react/ts5.0/index.d.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "searchPlayground", - "id": "def-public.SearchPlaygroundPluginStart.Playground.$2", - "type": "Any", - "tags": [], - "label": "context", - "description": [], - "signature": [ - "any" - ], - "path": "node_modules/@types/react/ts5.0/index.d.ts", - "deprecated": false, - "trackAdoption": false - } - ] - }, - { - "parentPluginId": "searchPlayground", - "id": "def-public.SearchPlaygroundPluginStart.PlaygroundHeaderDocs", - "type": "Function", - "tags": [], - "label": "PlaygroundHeaderDocs", - "description": [], - "signature": [ - "React.FunctionComponent<{}>" - ], - "path": "x-pack/plugins/search_playground/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "searchPlayground", - "id": "def-public.SearchPlaygroundPluginStart.PlaygroundHeaderDocs.$1", - "type": "Uncategorized", - "tags": [], - "label": "props", - "description": [], - "signature": [ - "P" - ], - "path": "node_modules/@types/react/ts5.0/index.d.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "searchPlayground", - "id": "def-public.SearchPlaygroundPluginStart.PlaygroundHeaderDocs.$2", - "type": "Any", - "tags": [], - "label": "context", - "description": [], - "signature": [ - "any" - ], - "path": "node_modules/@types/react/ts5.0/index.d.ts", - "deprecated": false, - "trackAdoption": false - } - ] - } - ], + "children": [], "lifecycle": "start", "initialIsOpen": true } @@ -251,9 +113,6 @@ "tags": [], "label": "PLUGIN_NAME", "description": [], - "signature": [ - "\"Playground\"" - ], "path": "x-pack/plugins/search_playground/common/index.ts", "deprecated": false, "trackAdoption": false, diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 5754dd1df1c80..5fcab795f3e2a 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/search-kibana](https://github.com/orgs/elastic/teams/search-ki | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 22 | 0 | 16 | 1 | +| 13 | 0 | 13 | 0 | ## Client diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 86094ac61c79d..50d8cfbc34e75 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index fa48cda70fba1..5d81edfe370d6 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 4a58a37c33a08..376234b91f463 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-12-05 +date: 2024-12-06 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 3b87510bbab9a..2a8eb8b7d5da2 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-12-05 +date: 2024-12-06 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 1bce5689dd94b..e3618cd1cb3b3 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-12-05 +date: 2024-12-06 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 d8d823181a96e..b2fa67d78367d 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-12-05 +date: 2024-12-06 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 24a3beb0fe69c..75a0aec8ecf33 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-12-05 +date: 2024-12-06 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 592b08ffaa0ca..4c0c18d16b2c1 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-12-05 +date: 2024-12-06 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 b5d7cec902506..a7e8dfdf6e650 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.devdocs.json b/api_docs/slo.devdocs.json index 2aa0b68399118..6103989a90a7a 100644 --- a/api_docs/slo.devdocs.json +++ b/api_docs/slo.devdocs.json @@ -1163,7 +1163,7 @@ "section": "def-common.RecursivePartial", "text": "RecursivePartial" }, - "<{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }> | undefined; }>; }" + "<{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }> | undefined; }>; }" ], "path": "x-pack/plugins/observability_solution/slo/public/types.ts", "deprecated": false, @@ -1199,7 +1199,7 @@ }, "<", "RecursivePartial", - "<{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }>>; sloListLocator: ", + "<{ name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; total: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"cardinality\" | \"last_value\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: ({ meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; field?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; } & { $state?: any; })[]; } | undefined; dataViewId?: string | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; } & { id?: string | undefined; settings?: { syncDelay?: string | undefined; frequency?: string | undefined; preventInitialBackfill?: boolean | undefined; syncField?: string | null | undefined; } | undefined; tags?: string[] | undefined; groupBy?: string | string[] | undefined; revision?: number | undefined; }>>; sloListLocator: ", { "pluginId": "share", "scope": "common", diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 689806fa24559..eb24a3c2bde62 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 289ef73971b1f..adda19845be88 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-12-05 +date: 2024-12-06 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 7f3dbaebd92cf..2a67dcde5f9b8 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-12-05 +date: 2024-12-06 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 3626aafe3a713..d7d81aaef2236 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-12-05 +date: 2024-12-06 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 cf11b8e102cc2..0852e374e9011 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/streams.mdx b/api_docs/streams.mdx index 003aade7cc175..38402818f9e4d 100644 --- a/api_docs/streams.mdx +++ b/api_docs/streams.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streams title: "streams" image: https://source.unsplash.com/400x175/?github description: API docs for the streams plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streams'] --- import streamsObj from './streams.devdocs.json'; diff --git a/api_docs/streams_app.mdx b/api_docs/streams_app.mdx index 329525ae787fa..511d2fe961fe4 100644 --- a/api_docs/streams_app.mdx +++ b/api_docs/streams_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streamsApp title: "streamsApp" image: https://source.unsplash.com/400x175/?github description: API docs for the streamsApp plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streamsApp'] --- import streamsAppObj from './streams_app.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 703d8351735c7..acb599b5dfe11 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-12-05 +date: 2024-12-06 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 a866c7d3850ee..b4319b8b734a8 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-12-05 +date: 2024-12-06 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 d539948409e38..344f5958147ce 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 65a50a0688cdc..2a7f95260af04 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index ec46a182fa48e..849438cbdad8b 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-12-05 +date: 2024-12-06 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 2386818bb1276..196cd334e8a86 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-12-05 +date: 2024-12-06 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 8b0b38ff27c69..ea416a9e427c9 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-12-05 +date: 2024-12-06 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 82a0e67444e37..6997b216ad64c 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-12-05 +date: 2024-12-06 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 c19d33faafb53..2c09ad7b8f41b 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-12-05 +date: 2024-12-06 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 c7f6e59a5cfae..ae7ca33b1f7fa 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-12-05 +date: 2024-12-06 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 fb7e58deb13fa..5fdd58db9b3d0 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-12-05 +date: 2024-12-06 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 3189130e339ba..c6cb69dfddaff 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-12-05 +date: 2024-12-06 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 ed1eaebaba5d5..5aebd5a685e96 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-12-05 +date: 2024-12-06 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 344f79ae663cb..f24d774083adb 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-12-05 +date: 2024-12-06 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 47377ce873102..d6ad8decb5798 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-12-05 +date: 2024-12-06 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 6293673e8efce..ef41259c8da1b 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-12-05 +date: 2024-12-06 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 2959756858a34..99123990f71c7 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-12-05 +date: 2024-12-06 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 1849f153beb16..6691cad6fe45f 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-12-05 +date: 2024-12-06 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 cb30d696b8d47..0759c2b68fcfd 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-12-05 +date: 2024-12-06 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 fe5200e40449e..273e4d3f43895 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-12-05 +date: 2024-12-06 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 ac5c387a931f1..e47a96a00d9ce 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-12-05 +date: 2024-12-06 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 63309102a77df..53f4edc6dbc5b 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-12-05 +date: 2024-12-06 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 1bdaadadee3ed..d2d8991e00e54 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-12-05 +date: 2024-12-06 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 71b3830f68f21..9bed03ff724f5 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-12-05 +date: 2024-12-06 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 e99c9c96e2108..b1328ccf6ec6d 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-12-05 +date: 2024-12-06 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 7a2f0e25bc075..27b533fd4eff0 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-12-05 +date: 2024-12-06 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 668daa2023afb..ee1ad5c61ac00 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-12-05 +date: 2024-12-06 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 66222fd332344..b95d4cd7f7edc 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-12-05 +date: 2024-12-06 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 36b81ccc0ae54..4545f56af63bb 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-12-05 +date: 2024-12-06 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 07bf62a98d74fddbdb31feef733126a1d9948afb Mon Sep 17 00:00:00 2001 From: Navarone Feekery <13634519+navarone-feekery@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:10:26 +0100 Subject: [PATCH 114/141] [Search][a11y] Fix table row screen reader error (#203136) ## Closes https://github.com/elastic/kibana/issues/199113 Allows errors in the table row to be read by screen readers. --- .../shared/tables/reorderable_table/body_row.tsx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/enterprise_search/public/applications/shared/tables/reorderable_table/body_row.tsx b/x-pack/plugins/enterprise_search/public/applications/shared/tables/reorderable_table/body_row.tsx index 5df902e826cab..d4a89266b7792 100644 --- a/x-pack/plugins/enterprise_search/public/applications/shared/tables/reorderable_table/body_row.tsx +++ b/x-pack/plugins/enterprise_search/public/applications/shared/tables/reorderable_table/body_row.tsx @@ -66,7 +66,14 @@ export const BodyRow = ({ {errors.map((errorMessage, errorMessageIndex) => ( - + ))} From d25d644b008fc7657b60b7f7deda9721435354b3 Mon Sep 17 00:00:00 2001 From: Robert Jaszczurek <92210485+rbrtj@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:26:16 +0100 Subject: [PATCH 115/141] [ML] AiOps: Fix Log Rate Analysis Embeddable Error on the Alerts Page (#203093) ## Summary Fix for: [#203067](https://github.com/elastic/kibana/issues/203067) --- .../log_rate_analysis_content_wrapper.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx index 96b1f3f2c80e4..5ba8849474aae 100644 --- a/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx +++ b/x-pack/plugins/aiops/public/components/log_rate_analysis/log_rate_analysis_content/log_rate_analysis_content_wrapper.tsx @@ -20,6 +20,7 @@ import { DatePickerContextProvider } from '@kbn/ml-date-picker'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; import { LogRateAnalysisReduxProvider } from '@kbn/aiops-log-rate-analysis/state'; +import { FilterQueryContextProvider } from '../../../hooks/use_filters_query'; import { timeSeriesDataViewWarning } from '../../../application/utils/time_series_dataview_check'; import { AiopsAppContext, type AiopsAppContextValue } from '../../../hooks/use_aiops_app_context'; import { DataSourceContext } from '../../../hooks/use_data_source'; @@ -95,12 +96,14 @@ export const LogRateAnalysisContentWrapper: FC - + + + From 99e61a86e135306baa9e0a9929edd5d2f52e8c70 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 6 Dec 2024 21:05:51 +1100 Subject: [PATCH 116/141] skip failing test suite (#203205) --- x-pack/test/functional_gen_ai/inference/tests/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/functional_gen_ai/inference/tests/index.ts b/x-pack/test/functional_gen_ai/inference/tests/index.ts index 36cf2bbaffa14..65d93647511a1 100644 --- a/x-pack/test/functional_gen_ai/inference/tests/index.ts +++ b/x-pack/test/functional_gen_ai/inference/tests/index.ts @@ -11,7 +11,8 @@ import { chatCompleteSuite } from './chat_complete'; // eslint-disable-next-line import/no-default-export export default function (providerContext: FtrProviderContext) { - describe('Inference plugin - API integration tests', async () => { + // Failing: See https://github.com/elastic/kibana/issues/203205 + describe.skip('Inference plugin - API integration tests', async () => { getAvailableConnectors().forEach((connector) => { describe(`Connector ${connector.id}`, () => { chatCompleteSuite(connector, providerContext); From 79498314b587fee588a5fffd57732bf7ac33128e Mon Sep 17 00:00:00 2001 From: Kevin Lacabane Date: Fri, 6 Dec 2024 12:02:28 +0100 Subject: [PATCH 117/141] [eem] _search accepts kql filters (#203089) ## Summary `searchEntities` now accepts kql filters instead of esql and translates that to dsl filters at the query level --- .../server/lib/v2/entity_client.ts | 7 ++- .../server/lib/v2/queries/index.test.ts | 57 ++++++++++++++++++- .../server/lib/v2/queries/index.ts | 17 +++--- .../server/lib/v2/run_esql_query.ts | 11 +++- .../public/pages/overview/index.tsx | 2 +- 5 files changed, 76 insertions(+), 18 deletions(-) diff --git a/x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts b/x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts index 9eb2127ddc818..bb40fc2849a46 100644 --- a/x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts @@ -98,7 +98,7 @@ export class EntityClient { ); } - const query = getEntityInstancesQuery({ + const { query, filter } = getEntityInstancesQuery({ source: { ...source, metadata_fields: availableMetadataFields, @@ -109,10 +109,13 @@ export class EntityClient { sort, limit, }); - this.options.logger.debug(`Entity query: ${query}`); + this.options.logger.debug( + () => `Entity query: ${query}\nfilter: ${JSON.stringify(filter, null, 2)}` + ); const rawEntities = await runESQLQuery('resolve entities', { query, + filter, esClient: this.options.clusterClient.asCurrentUser, logger: this.options.logger, }); diff --git a/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts index e77be7d4172ca..9bc475d031923 100644 --- a/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts @@ -10,7 +10,7 @@ import { getEntityInstancesQuery } from '.'; describe('getEntityInstancesQuery', () => { describe('getEntityInstancesQuery', () => { it('generates a valid esql query', () => { - const query = getEntityInstancesQuery({ + const { query, filter } = getEntityInstancesQuery({ source: { id: 'service_source', type_id: 'service', @@ -29,14 +29,65 @@ describe('getEntityInstancesQuery', () => { expect(query).toEqual( 'FROM logs-*, metrics-* | ' + - 'WHERE service.name::keyword IS NOT NULL | ' + - 'WHERE custom_timestamp_field >= "2024-11-20T19:00:00.000Z" AND custom_timestamp_field <= "2024-11-20T20:00:00.000Z" | ' + 'STATS host.name = VALUES(host.name::keyword), entity.last_seen_timestamp = MAX(custom_timestamp_field), service.id = MAX(service.id::keyword) BY service.name::keyword | ' + 'RENAME `service.name::keyword` AS service.name | ' + 'EVAL entity.type = "service", entity.id = service.name, entity.display_name = COALESCE(service.id, entity.id) | ' + 'SORT entity.id DESC | ' + 'LIMIT 5' ); + + expect(filter).toEqual({ + bool: { + filter: [ + { + bool: { + should: [ + { + exists: { + field: 'service.name', + }, + }, + ], + minimum_should_match: 1, + }, + }, + { + bool: { + filter: [ + { + bool: { + should: [ + { + range: { + custom_timestamp_field: { + gte: '2024-11-20T19:00:00.000Z', + }, + }, + }, + ], + minimum_should_match: 1, + }, + }, + { + bool: { + should: [ + { + range: { + custom_timestamp_field: { + lte: '2024-11-20T20:00:00.000Z', + }, + }, + }, + ], + minimum_should_match: 1, + }, + }, + ], + }, + }, + ], + }, + }); }); }); }); diff --git a/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts index 43c73fe7debad..5ce7a54eb1d1c 100644 --- a/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { fromKueryExpression, toElasticsearchQuery } from '@kbn/es-query'; import { asKeyword } from './utils'; import { EntitySourceDefinition, SortBy } from '../types'; @@ -21,7 +22,7 @@ const sourceCommand = ({ source }: { source: EntitySourceDefinition }) => { return query; }; -const whereCommand = ({ +const dslFilter = ({ source, start, end, @@ -30,10 +31,7 @@ const whereCommand = ({ start: string; end: string; }) => { - const filters = [ - source.identity_fields.map((field) => `${asKeyword(field)} IS NOT NULL`).join(' AND '), - ...source.filters, - ]; + const filters = [...source.filters, ...source.identity_fields.map((field) => `${field}: *`)]; if (source.timestamp_field) { filters.push( @@ -41,7 +39,8 @@ const whereCommand = ({ ); } - return filters.map((filter) => `WHERE ${filter}`).join(' | '); + const kuery = filters.map((filter) => '(' + filter + ')').join(' AND '); + return toElasticsearchQuery(fromKueryExpression(kuery)); }; const statsCommand = ({ source }: { source: EntitySourceDefinition }) => { @@ -108,16 +107,16 @@ export function getEntityInstancesQuery({ start: string; end: string; sort?: SortBy; -}): string { +}) { const commands = [ sourceCommand({ source }), - whereCommand({ source, start, end }), statsCommand({ source }), renameCommand({ source }), evalCommand({ source }), sortCommand({ source, sort }), `LIMIT ${limit}`, ]; + const filter = dslFilter({ source, start, end }); - return commands.join(' | '); + return { query: commands.join(' | '), filter }; } diff --git a/x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts b/x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts index eda36a007ffe6..ccccacd0174df 100644 --- a/x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts +++ b/x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts @@ -7,6 +7,7 @@ import { withSpan } from '@kbn/apm-utils'; import { ElasticsearchClient, Logger } from '@kbn/core/server'; +import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import { ESQLColumn, ESQLRow, ESQLSearchResponse } from '@kbn/es-types'; export interface SourceAs { @@ -19,19 +20,24 @@ export async function runESQLQuery( esClient, logger, query, + filter, }: { esClient: ElasticsearchClient; logger: Logger; query: string; + filter?: QueryDslQueryContainer; } ): Promise { - logger.trace(() => `Request (${operationName}):\n${query}`); + logger.trace( + () => `Request (${operationName}):\nquery: ${query}\nfilter: ${JSON.stringify(filter, null, 2)}` + ); return withSpan( { name: operationName, labels: { plugin: '@kbn/entityManager-plugin' } }, async () => esClient.esql.query( { query, + filter, format: 'json', }, { querystring: { drop_null_columns: true } } @@ -62,8 +68,7 @@ function rowToObject(row: ESQLRow, columns: ESQLColumn[]) { return object; } - // Removes the type suffix from the column name - const name = column.name.replace(/\.(text|keyword)$/, ''); + const name = column.name; if (!object[name]) { object[name] = value; } diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx b/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx index d628ab306a1b1..e3d634557d4fb 100644 --- a/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx +++ b/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx @@ -70,7 +70,7 @@ function EntitySourceForm({ - + Date: Fri, 6 Dec 2024 04:20:13 -0700 Subject: [PATCH 118/141] [Security Assistant] Fix abort stream OpenAI issue (#203193) --- .../default_assistant_graph/helpers.test.ts | 125 ++++++++++++++++++ .../graphs/default_assistant_graph/helpers.ts | 11 +- .../graphs/default_assistant_graph/index.ts | 3 +- 3 files changed, 137 insertions(+), 2 deletions(-) diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.test.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.test.ts index d9ccd769592ff..32f2b808b41a1 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.test.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.test.ts @@ -117,6 +117,131 @@ describe('streamGraph', () => { ); }); }); + it('on_llm_end events with finish_reason != stop should not end the stream', async () => { + mockStreamEvents.mockReturnValue({ + next: jest + .fn() + .mockResolvedValueOnce({ + value: { + name: 'ActionsClientChatOpenAI', + event: 'on_llm_stream', + data: { chunk: { message: { content: 'content' } } }, + tags: [AGENT_NODE_TAG], + }, + done: false, + }) + .mockResolvedValueOnce({ + value: { + name: 'ActionsClientChatOpenAI', + event: 'on_llm_end', + data: { + output: { + generations: [[{ generationInfo: { finish_reason: 'function_call' }, text: '' }]], + }, + }, + tags: [AGENT_NODE_TAG], + }, + }) + .mockResolvedValue({ + done: true, + }), + return: jest.fn(), + }); + + const response = await streamGraph(requestArgs); + + expect(response).toBe(mockResponseWithHeaders); + expect(mockPush).toHaveBeenCalledWith({ payload: 'content', type: 'content' }); + await waitFor(() => { + expect(mockOnLlmResponse).not.toHaveBeenCalled(); + }); + }); + it('on_llm_end events without a finish_reason should end the stream', async () => { + mockStreamEvents.mockReturnValue({ + next: jest + .fn() + .mockResolvedValueOnce({ + value: { + name: 'ActionsClientChatOpenAI', + event: 'on_llm_stream', + data: { chunk: { message: { content: 'content' } } }, + tags: [AGENT_NODE_TAG], + }, + done: false, + }) + .mockResolvedValueOnce({ + value: { + name: 'ActionsClientChatOpenAI', + event: 'on_llm_end', + data: { + output: { + generations: [[{ generationInfo: {}, text: 'final message' }]], + }, + }, + tags: [AGENT_NODE_TAG], + }, + }) + .mockResolvedValue({ + done: true, + }), + return: jest.fn(), + }); + + const response = await streamGraph(requestArgs); + + expect(response).toBe(mockResponseWithHeaders); + expect(mockPush).toHaveBeenCalledWith({ payload: 'content', type: 'content' }); + await waitFor(() => { + expect(mockOnLlmResponse).toHaveBeenCalledWith( + 'final message', + { transactionId: 'transactionId', traceId: 'traceId' }, + false + ); + }); + }); + it('on_llm_end events is called with chunks if there is no final text value', async () => { + mockStreamEvents.mockReturnValue({ + next: jest + .fn() + .mockResolvedValueOnce({ + value: { + name: 'ActionsClientChatOpenAI', + event: 'on_llm_stream', + data: { chunk: { message: { content: 'content' } } }, + tags: [AGENT_NODE_TAG], + }, + done: false, + }) + .mockResolvedValueOnce({ + value: { + name: 'ActionsClientChatOpenAI', + event: 'on_llm_end', + data: { + output: { + generations: [[{ generationInfo: {}, text: '' }]], + }, + }, + tags: [AGENT_NODE_TAG], + }, + }) + .mockResolvedValue({ + done: true, + }), + return: jest.fn(), + }); + + const response = await streamGraph(requestArgs); + + expect(response).toBe(mockResponseWithHeaders); + expect(mockPush).toHaveBeenCalledWith({ payload: 'content', type: 'content' }); + await waitFor(() => { + expect(mockOnLlmResponse).toHaveBeenCalledWith( + 'content', + { transactionId: 'transactionId', traceId: 'traceId' }, + false + ); + }); + }); }); describe('Tool Calling Agent and Structured Chat Agent streaming', () => { diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts index a4b36dfa8dc22..f1a5413197632 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/helpers.ts @@ -160,7 +160,16 @@ export const streamGraph = async ({ finalMessage += msg.content; } } else if (event.event === 'on_llm_end' && !didEnd) { - handleStreamEnd(event.data.output?.generations[0][0]?.text ?? finalMessage); + const generation = event.data.output?.generations[0][0]; + if ( + // no finish_reason means the stream was aborted + !generation?.generationInfo?.finish_reason || + generation?.generationInfo?.finish_reason === 'stop' + ) { + handleStreamEnd( + generation?.text && generation?.text.length ? generation?.text : finalMessage + ); + } } } } diff --git a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts index 60c229b46e61c..cfcd0f49071b3 100644 --- a/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts +++ b/x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts @@ -173,9 +173,10 @@ export const callAssistantGraph: AgentExecutor = async ({ // we need to pass it like this or streaming does not work for bedrock createLlmInstance, logger, - signal: abortSignal, tools, replacements, + // some chat models (bedrock) require a signal to be passed on agent invoke rather than the signal passed to the chat model + ...(llmType === 'bedrock' ? { signal: abortSignal } : {}), }); const inputs: GraphInputs = { responseLanguage, From 019eac993ace334a2059bcd294f35a2ef354d38d Mon Sep 17 00:00:00 2001 From: Shahzad Date: Fri, 6 Dec 2024 12:54:07 +0100 Subject: [PATCH 119/141] [Synthetics] Fix flaky tests for alerting default !! (#203220) ## Summary Fix flaky tests for alerting default, removed unecessary code. I tested locally 30 times and it has been fixed now. --- .../e2e/synthetics/journeys/alerting_default.journey.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/alerting_default.journey.ts b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/alerting_default.journey.ts index d2e495e0cc17a..43084f0e54d7b 100644 --- a/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/alerting_default.journey.ts +++ b/x-pack/plugins/observability_solution/synthetics/e2e/synthetics/journeys/alerting_default.journey.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { journey, step, expect, before, after } from '@elastic/synthetics'; +import { journey, step, before, after } from '@elastic/synthetics'; import { byTestId } from '../../helpers/utils'; import { syntheticsAppPageProvider } from '../page_objects/synthetics_app'; import { cleanSettings } from './services/settings'; @@ -29,13 +29,10 @@ journey('AlertingDefaults', async ({ page, params }) => { step('Go to Settings page', async () => { await page.click('[aria-label="Toggle primary navigation"]'); await page.click('text=Synthetics'); - await page.click('text=Settings'); + await page.getByTestId('settings-page-link').click(); }); step('Click text=Synthetics', async () => { - expect(page.url()).toBe('http://localhost:5620/app/synthetics/settings/alerting'); - await page.click('.euiComboBox__inputWrap'); - await page.click("text=There aren't any options available"); await page.click('button:has-text("Add connector")'); await page.click('p:has-text("Slack")'); await page.click('input[type="text"]'); From bd56852819328c0abe9069f1283c4e7323f042fd Mon Sep 17 00:00:00 2001 From: Maxim Palenov Date: Fri, 6 Dec 2024 13:06:39 +0100 Subject: [PATCH 120/141] [Security Solution] Allow users to save rule query with non critical validation errors (#202544) **Addresses:** https://github.com/elastic/kibana/issues/171520 ## Summary This PR adds functionality to allow users save EQL and ES|QL queries in Prebuilt Rule Customization workflow by displaying a confirmation modal with non critical validation errors (a.k.a warnings). It also refactors confirmation modal usage in rule creation/editing forms for better reusability. ## Screenshots Screenshot 2024-12-03 at 14 01 36 https://github.com/user-attachments/assets/2a20fcfe-ffc0-4547-8621-7ac6873c8dc9 https://github.com/user-attachments/assets/50b5cf5a-ea3f-4c22-a443-b5d4056a92c8 Screenshot 2024-12-03 at 14 06 29 Screenshot 2024-12-03 at 14 06 51 Screenshot 2024-12-03 at 14 07 52 Screenshot 2024-12-03 at 14 08 18 --- .github/CODEOWNERS | 1 + .../public/common/hooks/eql/api.ts | 17 +- .../confirm_validation_errors_modal.tsx} | 27 +- .../index.tsx | 8 + .../translations.tsx | 36 +++ .../use_confirm_validation_errors_modal.tsx | 56 ++++ .../extract_validation_results.ts | 35 ++ .../form_hook_with_warnings.ts | 13 + .../hooks/use_form_with_warnings/index.ts | 9 + .../use_form_with_warnings.test.tsx | 241 ++++++++++++++ .../use_form_with_warnings.ts | 154 +++++++++ .../validation_results.ts | 13 + .../eql_query_edit/eql_query_bar.tsx | 23 +- .../eql_query_edit/eql_query_edit.tsx | 59 ++-- .../components/eql_query_edit/validators.ts | 29 -- .../eql_query_validator_factory.ts | 19 +- .../esql_query_edit/esql_query_edit.tsx | 10 +- .../esql_query_validator_factory.ts | 9 - .../constants/validation_warning_codes.ts | 38 +++ .../logic/extract_validation_messages.ts | 18 ++ .../translations.ts | 36 --- .../rule_creation_ui/pages/form.test.ts | 302 ------------------ .../rule_creation_ui/pages/form.tsx | 105 +----- .../pages/rule_creation/index.tsx | 148 ++++----- .../pages/rule_editing/index.tsx | 71 ++-- .../rule_creation_ui/pages/translations.ts | 6 - .../eql_query/eql_query_edit_adapter.tsx | 1 - .../esql_query/esql_query_edit_adapter.tsx | 1 - .../fields/rule_field_edit_form_wrapper.tsx | 37 ++- .../public/shared_imports.ts | 1 + .../translations/translations/fr-FR.json | 4 - .../translations/translations/ja-JP.json | 4 - .../translations/translations/zh-CN.json | 4 - 33 files changed, 827 insertions(+), 708 deletions(-) rename x-pack/plugins/security_solution/public/{detection_engine/rule_creation_ui/components/save_with_errors_confirmation/index.tsx => common/hooks/use_confirm_validation_errors_modal/confirm_validation_errors_modal.tsx} (59%) create mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/index.tsx create mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/translations.tsx create mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/use_confirm_validation_errors_modal.tsx create mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/extract_validation_results.ts create mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/form_hook_with_warnings.ts create mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/index.ts create mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/use_form_with_warnings.test.tsx create mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/use_form_with_warnings.ts create mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/validation_results.ts delete mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/validators.ts rename x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/{ => validators}/eql_query_validator_factory.ts (78%) create mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_creation/constants/validation_warning_codes.ts create mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/extract_validation_messages.ts delete mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/save_with_errors_confirmation/translations.ts delete mode 100644 x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.test.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 210ef172b78ea..5dbb563fda702 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2283,6 +2283,7 @@ x-pack/test/security_solution_cypress/cypress/tasks/expandable_flyout @elastic/ /x-pack/plugins/security_solution/public/common/components/with_hover_actions @elastic/security-threat-hunting-explore /x-pack/plugins/security_solution/public/common/containers/matrix_histogram @elastic/security-threat-hunting-explore /x-pack/plugins/security_solution/public/common/lib/cell_actions @elastic/security-threat-hunting-explore +/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warn @elastic/security-detection-rule-management /x-pack/plugins/security_solution/public/cases @elastic/security-threat-hunting-explore /x-pack/plugins/security_solution/public/explore @elastic/security-threat-hunting-explore /x-pack/plugins/security_solution/public/overview @elastic/security-threat-hunting-explore diff --git a/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts b/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts index b586e0593ab6f..b26f935612755 100644 --- a/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts +++ b/x-pack/plugins/security_solution/public/common/hooks/eql/api.ts @@ -36,11 +36,18 @@ interface Params { signal?: AbortSignal; } -export interface EqlResponseError { - code: EQL_ERROR_CODES; - messages?: string[]; - error?: Error; -} +export type EqlResponseError = + | { + code: + | EQL_ERROR_CODES.INVALID_SYNTAX + | EQL_ERROR_CODES.INVALID_EQL + | EQL_ERROR_CODES.MISSING_DATA_SOURCE; + messages: string[]; + } + | { + code: EQL_ERROR_CODES.FAILED_REQUEST; + error: Error; + }; export interface ValidateEqlResponse { valid: boolean; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/save_with_errors_confirmation/index.tsx b/x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/confirm_validation_errors_modal.tsx similarity index 59% rename from x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/save_with_errors_confirmation/index.tsx rename to x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/confirm_validation_errors_modal.tsx index 3f14945bedadc..52ef0465e39aa 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/save_with_errors_confirmation/index.tsx +++ b/x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/confirm_validation_errors_modal.tsx @@ -5,41 +5,39 @@ * 2.0. */ -import React from 'react'; - +import React, { memo } from 'react'; import { EuiConfirmModal, EuiSpacer, EuiText } from '@elastic/eui'; - import * as i18n from './translations'; -interface SaveWithErrorsModalProps { +interface ConfirmValidationErrorsModalProps { errors: string[]; onCancel: () => void; onConfirm: () => void; } -const SaveWithErrorsModalComponent = ({ +export const ConfirmValidationErrorsModal = memo(function ConfirmValidationErrorsModal({ errors, onCancel, onConfirm, -}: SaveWithErrorsModalProps) => { +}: ConfirmValidationErrorsModalProps): JSX.Element { return ( <> - {i18n.SAVE_WITH_ERRORS_MODAL_MESSAGE(errors.length)} + {i18n.SAVE_WITH_ERRORS_MESSAGE(errors.length)}

      - {errors.map((validationError, idx) => { + {errors.map((error) => { return ( -
    • - {validationError} +
    • + {error}
    • ); })} @@ -47,7 +45,4 @@ const SaveWithErrorsModalComponent = ({ ); -}; - -export const SaveWithErrorsModal = React.memo(SaveWithErrorsModalComponent); -SaveWithErrorsModal.displayName = 'SaveWithErrorsModal'; +}); diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/index.tsx b/x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/index.tsx new file mode 100644 index 0000000000000..505422ad807ae --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/index.tsx @@ -0,0 +1,8 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export * from './use_confirm_validation_errors_modal'; diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/translations.tsx b/x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/translations.tsx new file mode 100644 index 0000000000000..de95f91e6ce73 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/translations.tsx @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const SAVE_WITH_ERRORS_MODAL_TITLE = i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.upgradeRules.saveWithErrorsConfirmationModal.title', + { + defaultMessage: 'There are validation errors', + } +); + +export const CANCEL = i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.upgradeRules.saveWithErrorsConfirmationModal.cancel', + { + defaultMessage: 'Cancel', + } +); + +export const CONFIRM = i18n.translate( + 'xpack.securitySolution.detectionEngine.rules.upgradeRules.saveWithErrorsConfirmationModal.confirm', + { + defaultMessage: 'Confirm', + } +); + +export const SAVE_WITH_ERRORS_MESSAGE = (errorsCount: number) => + i18n.translate('xpack.securitySolution.detectionEngine.createRule.saveWithErrorsModalMessage', { + defaultMessage: + 'There {errorsCount, plural, one {is} other {are}} {errorsCount} validation {errorsCount, plural, one {error} other {errors}} which can lead to failed rule executions, save anyway?', + values: { errorsCount }, + }); diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/use_confirm_validation_errors_modal.tsx b/x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/use_confirm_validation_errors_modal.tsx new file mode 100644 index 0000000000000..5dfdbfb969865 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/use_confirm_validation_errors_modal/use_confirm_validation_errors_modal.tsx @@ -0,0 +1,56 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ReactNode } from 'react'; +import React, { useCallback, useState, useMemo } from 'react'; +import { useBoolean } from '@kbn/react-hooks'; +import { useAsyncConfirmation } from '../../../detection_engine/rule_management_ui/components/rules_table/rules_table/use_async_confirmation'; +import { ConfirmValidationErrorsModal } from './confirm_validation_errors_modal'; + +interface UseFieldConfirmValidationErrorsModalResult { + modal: ReactNode; + confirmValidationErrors: (errorMessages: string[]) => Promise; +} + +export function useConfirmValidationErrorsModal(): UseFieldConfirmValidationErrorsModalResult { + const [visible, { on: showModal, off: hideModal }] = useBoolean(false); + const [initModal, confirm, cancel] = useAsyncConfirmation({ + onInit: showModal, + onFinish: hideModal, + }); + const [errorsToConfirm, setErrorsToConfirm] = useState([]); + + const confirmValidationErrors = useCallback( + (errorMessages: string[]) => { + if (errorMessages.length === 0) { + return Promise.resolve(true); + } + + setErrorsToConfirm(errorMessages); + + return initModal(); + }, + [initModal, setErrorsToConfirm] + ); + + const modal = useMemo( + () => + visible ? ( + + ) : null, + [visible, errorsToConfirm, confirm, cancel] + ); + + return { + modal, + confirmValidationErrors, + }; +} diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/extract_validation_results.ts b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/extract_validation_results.ts new file mode 100644 index 0000000000000..b3de9f58f1afb --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/extract_validation_results.ts @@ -0,0 +1,35 @@ +/* + * 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 { FieldHook, ValidationError } from '../../../shared_imports'; +import type { ValidationResults } from './validation_results'; + +export function extractValidationResults( + formFields: Readonly, + warningValidationCodes: Readonly +): ValidationResults { + const warningValidationCodesSet = new Set(warningValidationCodes); + const errors: ValidationError[] = []; + const warnings: ValidationError[] = []; + + for (const field of formFields) { + for (const error of field.errors) { + const path = error.path ?? field.path; + + if (!error.code || !warningValidationCodesSet.has(error.code)) { + errors.push({ ...error, path }); + } else { + warnings.push({ ...error, path }); + } + } + } + + return { + errors, + warnings, + }; +} diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/form_hook_with_warnings.ts b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/form_hook_with_warnings.ts new file mode 100644 index 0000000000000..eb823cd19d25d --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/form_hook_with_warnings.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { FormHook, FormData, ValidationError } from '../../../shared_imports'; + +export interface FormHookWithWarnings + extends FormHook { + getValidationWarnings(): ValidationError[]; +} diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/index.ts b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/index.ts new file mode 100644 index 0000000000000..29e5c064b1a7a --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export type * from './form_hook_with_warnings'; +export * from './use_form_with_warnings'; diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/use_form_with_warnings.test.tsx b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/use_form_with_warnings.test.tsx new file mode 100644 index 0000000000000..c9c9a939458e2 --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/use_form_with_warnings.test.tsx @@ -0,0 +1,241 @@ +/* + * 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 { act, fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { TextField } from '@kbn/es-ui-shared-plugin/static/forms/components'; +import type { FieldConfig } from '../../../shared_imports'; +import { Form, UseField } from '../../../shared_imports'; +import type { FormWithWarningsSubmitHandler } from './use_form_with_warnings'; +import { useFormWithWarnings } from './use_form_with_warnings'; + +describe('useFormWithWarn', () => { + describe('isValid', () => { + it('is `undefined` initially', async () => { + render(); + + expect(screen.getByText('isValid: "undefined"')).toBeInTheDocument(); + }); + + it('is `true` when input is valid', async () => { + render(); + + typeText('someValue'); + await submitForm(); + + await waitFor(() => { + expect(screen.getByText('isValid: true')).toBeInTheDocument(); + }); + }); + + it('is `true` when input has warnings', async () => { + render(); + + typeText('warning'); + await submitForm(); + + expect(screen.getByText('isValid: true')).toBeInTheDocument(); + }); + + it('is `false` when input has error', async () => { + render(); + + typeText('error'); + await submitForm(); + + expect(screen.getByText('isValid: false')).toBeInTheDocument(); + }); + }); + + describe('isSubmitting', () => { + it('toggles upon form submission', async () => { + render(); + + expect(screen.getByText('isSubmitting: false')).toBeInTheDocument(); + + const finishAct = submitForm(); + + expect(screen.getByText('isSubmitting: true')).toBeInTheDocument(); + + await finishAct; + await waitFor(() => { + expect(screen.getByText('isSubmitting: false')).toBeInTheDocument(); + }); + }); + }); + + describe('isSubmitted', () => { + it('switched to true after form submission', async () => { + render(); + + expect(screen.getByText('isSubmitted: false')).toBeInTheDocument(); + + await submitForm(); + + await waitFor(() => { + expect(screen.getByText('isSubmitted: true')).toBeInTheDocument(); + }); + }); + }); + + describe('input w/o warnings', () => { + it('submits form successfully', async () => { + const handleSubmit = jest.fn(); + + render(); + typeText('someValue'); + + await submitForm(); + + await waitFor(() => { + expect(handleSubmit).toHaveBeenCalledWith({ testField: 'someValue' }, true, { + errors: [], + warnings: [], + }); + }); + }); + }); + + describe('w/ warnings', () => { + it('submits form successfully', async () => { + const handleSubmit = jest.fn(); + + render(); + typeText('warning'); + + await submitForm(); + + await waitFor(() => { + expect(handleSubmit).toHaveBeenCalledWith({ testField: 'warning' }, true, { + errors: [], + warnings: [ + expect.objectContaining({ + code: 'warning', + message: 'Validation warning', + path: 'testField', + }), + ], + }); + }); + }); + }); + + describe('w/ errors', () => { + it('passes validation errors to submit handler', async () => { + const handleSubmit = jest.fn(); + + render(); + typeText('error'); + + await submitForm(); + + await waitFor(() => { + expect(handleSubmit).toHaveBeenCalledWith({}, false, { + errors: [ + expect.objectContaining({ + code: 'error', + message: 'Validation error', + path: 'testField', + }), + ], + warnings: [], + }); + }); + }); + }); + + describe('w/ errors and warnings', () => { + it('passes validation errors and warnings to submit handler', async () => { + const handleSubmit = jest.fn(); + + render(); + typeText('error warning'); + + await submitForm(); + + await waitFor(() => { + expect(handleSubmit).toHaveBeenCalledWith({}, false, { + errors: [ + expect.objectContaining({ + code: 'error', + message: 'Validation error', + path: 'testField', + }), + ], + warnings: [], + }); + }); + }); + }); +}); + +interface TestFormProps { + onSubmit?: FormWithWarningsSubmitHandler; + warningValidationCodes: string[]; +} + +function TestForm({ onSubmit, warningValidationCodes }: TestFormProps): JSX.Element { + const { form } = useFormWithWarnings({ + onSubmit, + options: { + warningValidationCodes, + }, + }); + const textFieldConfig: FieldConfig = { + validations: [ + { + validator: (data) => { + if (data.value.includes('error')) { + return { + code: 'error', + message: 'Validation error', + }; + } + + if (data.value.includes('warning')) { + return { + code: 'warning', + message: 'Validation warning', + }; + } + }, + }, + ], + }; + + return ( +
      +
      + {'isValid:'} {JSON.stringify(form.isValid ?? 'undefined')} +
      +
      + {'isSubmitting:'} {JSON.stringify(form.isSubmitting)} +
      +
      + {'isSubmitted:'} {JSON.stringify(form.isSubmitted)} +
      + + + + ); +} + +function submitForm(): Promise { + return act(async () => { + fireEvent.click(screen.getByText('Submit')); + }); +} + +function typeText(value: string): void { + act(() => { + fireEvent.input(screen.getByRole('textbox'), { + target: { value }, + }); + }); +} diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/use_form_with_warnings.ts b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/use_form_with_warnings.ts new file mode 100644 index 0000000000000..191ba82f0943c --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/use_form_with_warnings.ts @@ -0,0 +1,154 @@ +/* + * 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 { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { isEmpty } from 'lodash'; +import type { FormHook } from '../../../shared_imports'; +import { useForm, type FormConfig, type FormData } from '../../../shared_imports'; +import type { FormHookWithWarnings } from './form_hook_with_warnings'; +import { extractValidationResults } from './extract_validation_results'; +import type { ValidationResults } from './validation_results'; + +export type FormWithWarningsSubmitHandler = ( + formData: T, + isValid: boolean, + validationResults: ValidationResults +) => Promise; + +interface FormWithWarningsConfig + extends Omit, 'onSubmit'> { + onSubmit?: FormWithWarningsSubmitHandler; + options: FormConfig['options'] & { + warningValidationCodes: Readonly; + }; +} + +interface UseFormWithWarningsReturn { + form: FormHookWithWarnings; +} + +/** + * Form lib implements warning functionality via non blocking validators. `validations` allows to + * specify validation configuration with validator functions and extra parameters including + * `isBlocking`. Validators marked as `isBlocking` will produce non blocking validation errors + * a.k.a. warnings. + * + * The problem with the supported approach is lack of flexibility and necessary API like one for getting + * only blocking or non blocking errors. Flexibility requirement comes from complex async validators + * producing blocking and non blocking validation errors. There is no way to use `isBlocking` configuration + * option to separate errors. Separating such validating functions in two would lead to sending two + * HTTP requests and performing another async operations twice. + * + * On top of just having an ability to mark validation errors as non blocking via `isBlocking: false` + * configuration we require a way to return blocking and non blocking errors from a single validation + * function. It'd be possible by returning an error with `isBlocking` (or `isWarning`) flag along with + * `message` and `code` fields from a validator function. Attempts to reuse `__isBlocking__` internal + * field lead to inconsistent behavior. + * + * `useFormWithWarnings` implements warnings (non blocking errors) on top of `FormHook` using validation + * error codes as a flexible way to determine whether an error is a blocking error or it's a warning. + * It provides little interface extension to simplify errors and warnings consumption + * + * In some cases business logic requires implementing functionality to allow users perform an action + * despite non-critical validation errors a.k.a. warnings. Usually it's also required to inform users + * about warnings they got before proceeding for example via a modal. + * + * Since `FormHook` returned by `useForm` lacks of such functionality `useFormWithWarnings` is here to + * provide warnings functionality. It could be used and passed as `FormHook` when warnings functionality + * isn't required making absolutely transparent. + * + * **Important:** Validators use short circuiting by default. It means that any failed validation in + * `validations` configuration array will prevent the rest validators from running. When used with warnings + * it may lead to bugs when validator checks first for warnings. You have to make sure a value is validated + * for errors first and then for warnings. + * + * There is a ticket to move this functionality to Form lib https://github.com/elastic/kibana/issues/203097. + */ +export function useFormWithWarnings( + formConfig: FormWithWarningsConfig +): UseFormWithWarningsReturn { + const { + onSubmit, + options: { warningValidationCodes }, + } = formConfig; + const { form } = useForm(formConfig as FormConfig); + const { validate: originalValidate, getFormData, getFields } = form; + + const validationResultsRef = useRef({ + errors: [], + warnings: [], + }); + const [isSubmitted, setIsSubmitted] = useState(false); + const [isSubmitting, setSubmitting] = useState(false); + const [isValid, setIsValid] = useState(); + const isMounted = useRef(false); + + const validate: FormHook['validate'] = useCallback(async () => { + await originalValidate(); + + validationResultsRef.current = extractValidationResults( + Object.values(getFields()), + warningValidationCodes + ); + + const isFormValid = isEmpty(validationResultsRef.current.errors); + + setIsValid(isFormValid); + + return isFormValid; + }, [originalValidate, getFields, warningValidationCodes, validationResultsRef]); + + const submit: FormHook['submit'] = useCallback( + async (e) => { + if (e) { + e.preventDefault(); + } + + setIsSubmitted(true); + setSubmitting(true); + + const isFormValid = await validate(); + const formData = isFormValid ? getFormData() : ({} as T); + + if (onSubmit) { + await onSubmit(formData, isFormValid, validationResultsRef.current); + } + + if (isMounted.current) { + setSubmitting(false); + } + + return { data: formData, isValid: isFormValid }; + }, + [validate, getFormData, onSubmit, validationResultsRef] + ); + + // Track form's mounted state + useEffect(() => { + isMounted.current = true; + + return () => { + isMounted.current = false; + }; + }, []); + + return useMemo( + () => ({ + form: { + ...form, + isValid, + isSubmitted, + isSubmitting, + validate, + submit, + getErrors: () => validationResultsRef.current.errors.map((x) => x.message), + getValidationWarnings: () => validationResultsRef.current.warnings, + }, + }), + [form, validate, submit, isSubmitted, isSubmitting, isValid, validationResultsRef] + ); +} diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/validation_results.ts b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/validation_results.ts new file mode 100644 index 0000000000000..238abab2cf53c --- /dev/null +++ b/x-pack/plugins/security_solution/public/common/hooks/use_form_with_warnings/validation_results.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ValidationError } from '../../../shared_imports'; + +export interface ValidationResults { + errors: ValidationError[]; + warnings: ValidationError[]; +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/eql_query_bar.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/eql_query_bar.tsx index c7ef28f5ed909..6111d2e1a2d3d 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/eql_query_bar.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/eql_query_bar.tsx @@ -6,7 +6,7 @@ */ import type { FC, ChangeEvent } from 'react'; -import React, { useCallback, useEffect, useState, useRef } from 'react'; +import React, { useCallback, useEffect, useRef, useMemo } from 'react'; import { Subscription } from 'rxjs'; import styled from 'styled-components'; import deepEqual from 'fast-deep-equal'; @@ -20,9 +20,9 @@ import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import type { EqlOptions } from '../../../../../common/search_strategy'; import type { FieldValueQueryBar } from '../../../rule_creation_ui/components/query_bar_field'; import { useKibana } from '../../../../common/lib/kibana'; +import { EQL_ERROR_CODES } from '../../../../common/hooks/eql/api'; import type { EqlQueryBarFooterProps } from './footer'; import { EqlQueryBarFooter } from './footer'; -import { getValidationResults } from './validators'; import * as i18n from './translations'; const TextArea = styled(EuiTextArea)` @@ -81,12 +81,10 @@ export const EqlQueryBar: FC = ({ onValidatingChange, }) => { const { addError } = useAppToasts(); - const [errorMessages, setErrorMessages] = useState([]); - const { isValidating, value: fieldValue, setValue: setFieldValue } = field; - const { isValid, message, messages, error } = getValidationResults(field); - const { uiSettings } = useKibana().services; const filterManager = useRef(new FilterManager(uiSettings)); + const { isValidating, value: fieldValue, setValue: setFieldValue, isValid, errors } = field; + const errorMessages = useMemo(() => errors.map((x) => x.message), [errors]); // Bubbles up field validity to parent. // Using something like form `getErrors` does @@ -98,14 +96,12 @@ export const EqlQueryBar: FC = ({ }, [isValid, onValidityChange]); useEffect(() => { - setErrorMessages(messages ?? []); - }, [messages]); + const requestError = errors.find((x) => x.code === EQL_ERROR_CODES.FAILED_REQUEST); - useEffect(() => { - if (error) { - addError(error, { title: i18n.EQL_VALIDATION_REQUEST_ERROR }); + if (requestError) { + addError(requestError.message, { title: i18n.EQL_VALIDATION_REQUEST_ERROR }); } - }, [error, addError]); + }, [errors, addError]); useEffect(() => { if (onValidatingChange) { @@ -152,7 +148,6 @@ export const EqlQueryBar: FC = ({ if (onValidatingChange) { onValidatingChange(true); } - setErrorMessages([]); setFieldValue({ filters: fieldValue.filters, query: { @@ -182,7 +177,7 @@ export const EqlQueryBar: FC = ({ label={field.label} labelAppend={field.labelAppend} helpText={field.helpText} - error={message} + error={errorMessages[0]} isInvalid={!isValid && !isValidating} fullWidth data-test-subj={dataTestSubj} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/eql_query_edit.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/eql_query_edit.tsx index 75d3412705fde..36eef70b2be0f 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/eql_query_edit.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/eql_query_edit.tsx @@ -13,7 +13,7 @@ import { UseMultiFields } from '../../../../shared_imports'; import type { EqlFieldsComboBoxOptions, EqlOptions } from '../../../../../common/search_strategy'; import type { FieldValueQueryBar } from '../../../rule_creation_ui/components/query_bar_field'; import { queryRequiredValidatorFactory } from '../../../rule_creation_ui/validators/query_required_validator_factory'; -import { eqlQueryValidatorFactory } from './eql_query_validator_factory'; +import { eqlQueryValidatorFactory } from './validators/eql_query_validator_factory'; import { EqlQueryBar } from './eql_query_bar'; import * as i18n from './translations'; @@ -28,8 +28,6 @@ interface EqlQueryEditProps { required?: boolean; loading?: boolean; disabled?: boolean; - // This is a temporal solution for Prebuilt Customization workflow - skipEqlValidation?: boolean; onValidityChange?: (arg: boolean) => void; } @@ -43,7 +41,6 @@ export function EqlQueryEdit({ required, loading, disabled, - skipEqlValidation, onValidityChange, }: EqlQueryEditProps): JSX.Element { const componentProps = useMemo( @@ -73,43 +70,29 @@ export function EqlQueryEdit({ }, ] : []), - ...(!skipEqlValidation - ? [ - { - validator: debounceAsync( - (data: ValidationFuncArg) => { - const { formData } = data; - const eqlOptions = - eqlOptionsPath && formData[eqlOptionsPath] ? formData[eqlOptionsPath] : {}; + { + validator: debounceAsync((data: ValidationFuncArg) => { + const { formData } = data; + const eqlOptions = + eqlOptionsPath && formData[eqlOptionsPath] ? formData[eqlOptionsPath] : {}; - return eqlQueryValidatorFactory( - dataView.id - ? { - dataViewId: dataView.id, - eqlOptions, - } - : { - indexPatterns: dataView.title.split(','), - eqlOptions, - } - )(data); - }, - 300 - ), - }, - ] - : []), + return eqlQueryValidatorFactory( + dataView.id + ? { + dataViewId: dataView.id, + eqlOptions, + } + : { + indexPatterns: dataView.title.split(','), + eqlOptions, + } + )(data); + }, 300), + isAsync: true, + }, ], }), - [ - skipEqlValidation, - eqlOptionsPath, - required, - dataView.id, - dataView.title, - path, - fieldsToValidateOnChange, - ] + [eqlOptionsPath, required, dataView.id, dataView.title, path, fieldsToValidateOnChange] ); return ( diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/validators.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/validators.ts deleted file mode 100644 index 676a780d9daf5..0000000000000 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/validators.ts +++ /dev/null @@ -1,29 +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 { FieldHook } from '../../../../shared_imports'; -import { EQL_ERROR_CODES } from '../../../../common/hooks/eql/api'; - -export const getValidationResults = ( - field: FieldHook -): { isValid: boolean; message: string; messages?: string[]; error?: Error } => { - const hasErrors = field.errors.length > 0; - const isValid = !field.isChangingValue && !hasErrors; - - if (hasErrors) { - const [error] = field.errors; - const message = error.message; - - if (error.code === EQL_ERROR_CODES.FAILED_REQUEST) { - return { isValid, message, error: error.error }; - } else { - return { isValid, message, messages: error.messages }; - } - } else { - return { isValid, message: '' }; - } -}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/eql_query_validator_factory.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/validators/eql_query_validator_factory.ts similarity index 78% rename from x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/eql_query_validator_factory.ts rename to x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/validators/eql_query_validator_factory.ts index 284d0670dfbc3..4de9e713f7f02 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/eql_query_validator_factory.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/eql_query_edit/validators/eql_query_validator_factory.ts @@ -6,13 +6,13 @@ */ import { isEmpty } from 'lodash'; -import type { FormData, ValidationError, ValidationFunc } from '../../../../shared_imports'; -import { KibanaServices } from '../../../../common/lib/kibana'; -import type { FieldValueQueryBar } from '../../../rule_creation_ui/components/query_bar_field'; -import type { EqlOptions } from '../../../../../common/search_strategy'; -import type { EqlResponseError } from '../../../../common/hooks/eql/api'; -import { EQL_ERROR_CODES, validateEql } from '../../../../common/hooks/eql/api'; -import { EQL_VALIDATION_REQUEST_ERROR } from './translations'; +import type { FormData, ValidationError, ValidationFunc } from '../../../../../shared_imports'; +import { KibanaServices } from '../../../../../common/lib/kibana'; +import type { FieldValueQueryBar } from '../../../../rule_creation_ui/components/query_bar_field'; +import type { EqlOptions } from '../../../../../../common/search_strategy'; +import type { EqlResponseError } from '../../../../../common/hooks/eql/api'; +import { EQL_ERROR_CODES, validateEql } from '../../../../../common/hooks/eql/api'; +import { EQL_VALIDATION_REQUEST_ERROR } from '../translations'; type EqlQueryValidatorFactoryParams = | { @@ -71,7 +71,7 @@ export function eqlQueryValidatorFactory({ function transformEqlResponseErrorToValidationError( responseError: EqlResponseError ): ValidationError { - if (responseError.error) { + if (responseError.code === EQL_ERROR_CODES.FAILED_REQUEST) { return { code: EQL_ERROR_CODES.FAILED_REQUEST, message: EQL_VALIDATION_REQUEST_ERROR, @@ -81,8 +81,7 @@ function transformEqlResponseErrorToValidationError( return { code: responseError.code, - message: '', - messages: responseError.messages, + message: responseError.messages.join(', '), }; } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/esql_query_edit.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/esql_query_edit.tsx index 695a3d121c9a6..b8ee292081d36 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/esql_query_edit.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/esql_query_edit.tsx @@ -25,7 +25,6 @@ interface EsqlQueryEditProps { required?: boolean; loading?: boolean; disabled?: boolean; - skipIdColumnCheck?: boolean; onValidityChange?: (arg: boolean) => void; } @@ -36,7 +35,6 @@ export const EsqlQueryEdit = memo(function EsqlQueryEdit({ required = false, loading = false, disabled = false, - skipIdColumnCheck, onValidityChange, }: EsqlQueryEditProps): JSX.Element { const queryClient = useQueryClient(); @@ -67,14 +65,12 @@ export const EsqlQueryEdit = memo(function EsqlQueryEdit({ ] : []), { - validator: debounceAsync( - esqlQueryValidatorFactory({ queryClient, skipIdColumnCheck }), - 300 - ), + validator: debounceAsync(esqlQueryValidatorFactory({ queryClient }), 300), + isAsync: true, }, ], }), - [required, path, fieldsToValidateOnChange, queryClient, skipIdColumnCheck] + [required, path, fieldsToValidateOnChange, queryClient] ); return ( diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts index c5b54db172a18..a0420f51586aa 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/components/esql_query_edit/validators/esql_query_validator_factory.ts @@ -16,15 +16,10 @@ import * as i18n from './translations'; interface EsqlQueryValidatorFactoryParams { queryClient: QueryClient; - /** - * This is a temporal fix to unlock prebuilt rule customization workflow - */ - skipIdColumnCheck?: boolean; } export function esqlQueryValidatorFactory({ queryClient, - skipIdColumnCheck, }: EsqlQueryValidatorFactoryParams): ValidationFunc { return async (...args) => { const [{ value }] = args; @@ -50,10 +45,6 @@ export function esqlQueryValidatorFactory({ }; } - if (skipIdColumnCheck) { - return; - } - const columns = await fetchEsqlQueryColumns({ esqlQuery, queryClient, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/constants/validation_warning_codes.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/constants/validation_warning_codes.ts new file mode 100644 index 0000000000000..9593324a9c224 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/constants/validation_warning_codes.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 { i18n } from '@kbn/i18n'; +import { EQL_ERROR_CODES } from '../../../common/hooks/eql/api'; +import { ESQL_ERROR_CODES } from '../components/esql_query_edit'; + +const ESQL_FIELD_NAME = i18n.translate( + 'xpack.securitySolution.detectionEngine.createRule.nonBlockingErrorCodes.esqlFieldName', + { + defaultMessage: 'ES|QL Query', + } +); + +const EQL_FIELD_NAME = i18n.translate( + 'xpack.securitySolution.detectionEngine.createRule.nonBlockingErrorCodes.eqlFieldName', + { + defaultMessage: 'EQL Query', + } +); + +export const VALIDATION_WARNING_CODES = [ + ESQL_ERROR_CODES.INVALID_ESQL, + EQL_ERROR_CODES.FAILED_REQUEST, + EQL_ERROR_CODES.INVALID_EQL, + EQL_ERROR_CODES.MISSING_DATA_SOURCE, +] as const; + +export const VALIDATION_WARNING_CODE_FIELD_NAME_MAP: Readonly> = { + [ESQL_ERROR_CODES.INVALID_ESQL]: ESQL_FIELD_NAME, + [EQL_ERROR_CODES.FAILED_REQUEST]: EQL_FIELD_NAME, + [EQL_ERROR_CODES.INVALID_EQL]: EQL_FIELD_NAME, + [EQL_ERROR_CODES.MISSING_DATA_SOURCE]: EQL_FIELD_NAME, +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/extract_validation_messages.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/extract_validation_messages.ts new file mode 100644 index 0000000000000..77847a0b12231 --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation/logic/extract_validation_messages.ts @@ -0,0 +1,18 @@ +/* + * 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 { capitalize } from 'lodash'; +import type { ValidationError } from '../../../shared_imports'; + +export function extractValidationMessages( + validationErrors: ValidationError[], + errorCodeFieldNameMap: Readonly> +): string[] { + return validationErrors.map( + (x) => `${errorCodeFieldNameMap[x.code ?? ''] ?? capitalize(x.path)}: ${x.message}` + ); +} diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/save_with_errors_confirmation/translations.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/save_with_errors_confirmation/translations.ts deleted file mode 100644 index e470b06c7e829..0000000000000 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/components/save_with_errors_confirmation/translations.ts +++ /dev/null @@ -1,36 +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 { i18n } from '@kbn/i18n'; - -export const SAVE_WITH_ERRORS_MODAL_TITLE = i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.saveWithErrorsModalTitle', - { - defaultMessage: 'This rule has validation errors', - } -); - -export const SAVE_WITH_ERRORS_CANCEL_BUTTON = i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.saveWithErrorsCancelButton', - { - defaultMessage: 'Cancel', - } -); - -export const SAVE_WITH_ERRORS_CONFIRM_BUTTON = i18n.translate( - 'xpack.securitySolution.detectionEngine.createRule.saveWithErrorsConfirmButton', - { - defaultMessage: 'Confirm', - } -); - -export const SAVE_WITH_ERRORS_MODAL_MESSAGE = (errorsCount: number) => - i18n.translate('xpack.securitySolution.detectionEngine.createRule.saveWithErrorsModalMessage', { - defaultMessage: - 'This rule has {errorsCount} validation {errorsCount, plural, one {error} other {errors}} which can lead to failed rule executions, save anyway?', - values: { errorsCount }, - }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.test.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.test.ts deleted file mode 100644 index 3210ac84b159a..0000000000000 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.test.ts +++ /dev/null @@ -1,302 +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 { renderHook } from '@testing-library/react-hooks'; - -import type { FormData, FormHook, ValidationError } from '../../../shared_imports'; -import { EQL_ERROR_CODES } from '../../../common/hooks/eql/api'; -import type { - AboutStepRule, - ActionsStepRule, - DefineStepRule, - ScheduleStepRule, -} from '../../../detections/pages/detection_engine/rules/types'; -import { ALERT_SUPPRESSION_FIELDS_FIELD_NAME } from '../../rule_creation/components/alert_suppression_edit'; -import { ESQL_ERROR_CODES } from '../../rule_creation/components/esql_query_edit'; -import { useRuleFormsErrors } from './form'; - -const getFormWithErrorsMock = (fields: { - [key: string]: { errors: Array> }; -}) => { - return { - getFields: () => fields, - } as unknown as FormHook; -}; - -describe('useRuleFormsErrors', () => { - describe('EQL query validation errors', () => { - it('should return blocking error in case of syntax validation error', async () => { - const { result } = renderHook(() => useRuleFormsErrors()); - - const defineStepForm = getFormWithErrorsMock({ - queryBar: { - errors: [ - { - code: EQL_ERROR_CODES.INVALID_SYNTAX, - message: '', - messages: ["line 1:5: missing 'where' at 'demo'"], - }, - ], - }, - }); - - const { getRuleFormsErrors } = result.current; - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ defineStepForm }); - - expect(blockingErrors).toEqual(["line 1:5: missing 'where' at 'demo'"]); - expect(nonBlockingErrors).toEqual([]); - }); - - it('should return non-blocking error in case of missing data source validation error', async () => { - const { result } = renderHook(() => useRuleFormsErrors()); - - const defineStepForm = getFormWithErrorsMock({ - queryBar: { - errors: [ - { - code: EQL_ERROR_CODES.MISSING_DATA_SOURCE, - message: '', - messages: [ - 'index_not_found_exception Found 1 problem line -1:-1: Unknown index [*,-*]', - ], - }, - ], - }, - }); - - const { getRuleFormsErrors } = result.current; - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ defineStepForm }); - - expect(blockingErrors).toEqual([]); - expect(nonBlockingErrors).toEqual([ - 'Query bar: index_not_found_exception Found 1 problem line -1:-1: Unknown index [*,-*]', - ]); - }); - - it('should return non-blocking error in case of missing data field validation error', async () => { - const { result } = renderHook(() => useRuleFormsErrors()); - - const defineStepForm = getFormWithErrorsMock({ - queryBar: { - errors: [ - { - code: EQL_ERROR_CODES.INVALID_EQL, - message: '', - messages: [ - 'Found 2 problems\nline 1:1: Unknown column [event.category]\nline 1:13: Unknown column [event.name]', - ], - }, - ], - }, - }); - - const { getRuleFormsErrors } = result.current; - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ defineStepForm }); - - expect(blockingErrors).toEqual([]); - expect(nonBlockingErrors).toEqual([ - 'Query bar: Found 2 problems\nline 1:1: Unknown column [event.category]\nline 1:13: Unknown column [event.name]', - ]); - }); - - it('should return non-blocking error in case of failed request error', async () => { - const { result } = renderHook(() => useRuleFormsErrors()); - - const defineStepForm = getFormWithErrorsMock({ - queryBar: { - errors: [ - { - code: EQL_ERROR_CODES.FAILED_REQUEST, - message: 'An error occurred while validating your EQL query', - error: new Error('Some internal error'), - }, - ], - }, - }); - - const { getRuleFormsErrors } = result.current; - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ defineStepForm }); - - expect(blockingErrors).toEqual([]); - expect(nonBlockingErrors).toEqual([ - 'Query bar: An error occurred while validating your EQL query', - ]); - }); - - it('should return blocking and non-blocking errors', async () => { - const { result } = renderHook(() => useRuleFormsErrors()); - - const defineStepForm = getFormWithErrorsMock({ - queryBar: { - errors: [ - { - code: EQL_ERROR_CODES.MISSING_DATA_SOURCE, - message: '', - messages: ['Missing data source'], - }, - ], - }, - }); - const aboutStepForm = getFormWithErrorsMock({ - name: { - errors: [ - { - message: 'Required field', - }, - ], - }, - }); - - const { getRuleFormsErrors } = result.current; - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ - defineStepForm, - aboutStepForm, - }); - - expect(blockingErrors).toEqual(['Required field']); - expect(nonBlockingErrors).toEqual(['Query bar: Missing data source']); - }); - }); - - describe('ES|QL query validation errors', () => { - it('should return blocking error in case of syntax validation error', async () => { - const { result } = renderHook(() => useRuleFormsErrors()); - - const validationError = { - code: ESQL_ERROR_CODES.INVALID_SYNTAX, - message: 'Broken ES|QL syntax', - }; - const defineStepForm = getFormWithErrorsMock({ - queryBar: { - errors: [validationError], - }, - }); - - const { getRuleFormsErrors } = result.current; - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ defineStepForm }); - - expect(blockingErrors).toEqual(['Broken ES|QL syntax']); - expect(nonBlockingErrors).toEqual([]); - }); - - it('should return blocking error in case of missed ES|QL metadata validation error', async () => { - const { result } = renderHook(() => useRuleFormsErrors()); - - const validationError = { - code: ESQL_ERROR_CODES.ERR_MISSING_ID_FIELD_FROM_RESULT, - message: 'Metadata is missing', - }; - const defineStepForm = getFormWithErrorsMock({ - queryBar: { - errors: [validationError], - }, - }); - - const { getRuleFormsErrors } = result.current; - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ defineStepForm }); - - expect(blockingErrors).toEqual(['Metadata is missing']); - expect(nonBlockingErrors).toEqual([]); - }); - - it('should return non-blocking error in case of missing data field validation error', async () => { - const { result } = renderHook(() => useRuleFormsErrors()); - - const validationError = { - code: ESQL_ERROR_CODES.INVALID_ESQL, - message: 'Unknown column [hello.world]', - }; - const defineStepForm = getFormWithErrorsMock({ - queryBar: { - errors: [validationError], - }, - }); - - const { getRuleFormsErrors } = result.current; - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ defineStepForm }); - - expect(blockingErrors).toEqual([]); - expect(nonBlockingErrors).toEqual(['Query bar: Unknown column [hello.world]']); - }); - }); - - describe('general cases', () => { - it('should not return blocking and non-blocking errors in case there are none exist', async () => { - const { result } = renderHook(() => useRuleFormsErrors()); - - const defineStepForm = getFormWithErrorsMock({ queryBar: { errors: [] } }); - const aboutStepForm = getFormWithErrorsMock({ name: { errors: [] } }); - const scheduleStepForm = getFormWithErrorsMock({ - interval: { errors: [] }, - }); - const actionsStepForm = getFormWithErrorsMock({ actions: { errors: [] } }); - - const { getRuleFormsErrors } = result.current; - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ - defineStepForm, - aboutStepForm, - scheduleStepForm, - actionsStepForm, - }); - - expect(blockingErrors).toEqual([]); - expect(nonBlockingErrors).toEqual([]); - }); - - it('should not return all errors', async () => { - const { result } = renderHook(() => useRuleFormsErrors()); - - const esqlValidationError = { - code: ESQL_ERROR_CODES.INVALID_ESQL, - message: 'Missing index [logs*]', - }; - const groupByValidationError = { - message: 'Number of grouping fields must be at most 3', - }; - - const defineStepForm = getFormWithErrorsMock({ - queryBar: { errors: [esqlValidationError] }, - [ALERT_SUPPRESSION_FIELDS_FIELD_NAME]: { errors: [groupByValidationError] }, - }); - const aboutStepForm = getFormWithErrorsMock({ - name: { - errors: [ - { - message: 'Required field', - }, - ], - }, - }); - const scheduleStepForm = getFormWithErrorsMock({ - interval: { errors: [] }, - }); - const actionsStepForm = getFormWithErrorsMock({ - actions: { - errors: [ - { - message: 'Missing webhook connector', - }, - ], - }, - }); - - const { getRuleFormsErrors } = result.current; - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ - defineStepForm, - aboutStepForm, - scheduleStepForm, - actionsStepForm, - }); - - expect(blockingErrors).toEqual([ - 'Number of grouping fields must be at most 3', - 'Required field', - 'Missing webhook connector', - ]); - expect(nonBlockingErrors).toEqual(['Query bar: Missing index [logs*]']); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.tsx index f88d0c1449442..65ff07924c70f 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/form.tsx @@ -5,8 +5,9 @@ * 2.0. */ -import { useState, useMemo, useEffect, useCallback } from 'react'; +import { useState, useMemo, useEffect } from 'react'; import type { DataViewBase } from '@kbn/es-query'; +import { useFormWithWarnings } from '../../../common/hooks/use_form_with_warnings'; import { isThreatMatchRule } from '../../../../common/detection_engine/utils'; import type { AboutStepRule, @@ -16,19 +17,17 @@ import type { } from '../../../detections/pages/detection_engine/rules/types'; import { DataSourceType } from '../../../detections/pages/detection_engine/rules/types'; import { useKibana } from '../../../common/lib/kibana'; -import type { FormHook, ValidationError } from '../../../shared_imports'; -import { useForm, useFormData } from '../../../shared_imports'; +import type { FormHook } from '../../../shared_imports'; +import { useFormData } from '../../../shared_imports'; import { schema as defineRuleSchema } from '../components/step_define_rule/schema'; import { schema as aboutRuleSchema, threatMatchAboutSchema, } from '../components/step_about_rule/schema'; -import { ESQL_ERROR_CODES } from '../../rule_creation/components/esql_query_edit'; import { schema as scheduleRuleSchema } from '../components/step_schedule_rule/schema'; import { getSchema as getActionsRuleSchema } from '../../rule_creation/components/step_rule_actions/get_schema'; import { useFetchIndex } from '../../../common/containers/source'; -import { EQL_ERROR_CODES } from '../../../common/hooks/eql/api'; -import * as i18n from './translations'; +import { VALIDATION_WARNING_CODES } from '../../rule_creation/constants/validation_warning_codes'; export interface UseRuleFormsProps { defineStepDefault: DefineStepRule; @@ -47,9 +46,9 @@ export const useRuleForms = ({ triggersActionsUi: { actionTypeRegistry }, } = useKibana().services; // DEFINE STEP FORM - const { form: defineStepForm } = useForm({ + const { form: defineStepForm } = useFormWithWarnings({ defaultValue: defineStepDefault, - options: { stripEmptyFields: false }, + options: { stripEmptyFields: false, warningValidationCodes: VALIDATION_WARNING_CODES }, schema: defineRuleSchema, }); const [defineStepFormData] = useFormData({ @@ -67,9 +66,9 @@ export const useRuleForms = ({ () => (isThreatMatchRule(defineStepData.ruleType) ? threatMatchAboutSchema : aboutRuleSchema), [defineStepData.ruleType] ); - const { form: aboutStepForm } = useForm({ + const { form: aboutStepForm } = useFormWithWarnings({ defaultValue: aboutStepDefault, - options: { stripEmptyFields: false }, + options: { stripEmptyFields: false, warningValidationCodes: VALIDATION_WARNING_CODES }, schema: typeDependentAboutRuleSchema, }); const [aboutStepFormData] = useFormData({ @@ -78,9 +77,9 @@ export const useRuleForms = ({ const aboutStepData = 'name' in aboutStepFormData ? aboutStepFormData : aboutStepDefault; // SCHEDULE STEP FORM - const { form: scheduleStepForm } = useForm({ + const { form: scheduleStepForm } = useFormWithWarnings({ defaultValue: scheduleStepDefault, - options: { stripEmptyFields: false }, + options: { stripEmptyFields: false, warningValidationCodes: VALIDATION_WARNING_CODES }, schema: scheduleRuleSchema, }); const [scheduleStepFormData] = useFormData({ @@ -91,9 +90,9 @@ export const useRuleForms = ({ // ACTIONS STEP FORM const schema = useMemo(() => getActionsRuleSchema({ actionTypeRegistry }), [actionTypeRegistry]); - const { form: actionsStepForm } = useForm({ + const { form: actionsStepForm } = useFormWithWarnings({ defaultValue: actionsStepDefault, - options: { stripEmptyFields: false }, + options: { stripEmptyFields: false, warningValidationCodes: VALIDATION_WARNING_CODES }, schema, }); const [actionsStepFormData] = useFormData({ @@ -158,81 +157,3 @@ export interface UseRuleFormsErrors { scheduleStepForm?: FormHook; actionsStepForm?: FormHook; } - -const getFieldErrorMessages = (fieldError: ValidationError) => { - if (fieldError.message.length > 0) { - return [fieldError.message]; - } else if (Array.isArray(fieldError.messages)) { - // EQL validation can return multiple errors and thus we store them in a custom `messages` field on `ValidationError` object. - // Here we double check that `messages` is in fact an array and the content is of type `string`, otherwise we stringify it. - return fieldError.messages.map((message) => - typeof message === 'string' ? message : JSON.stringify(message) - ); - } - return []; -}; - -const NON_BLOCKING_QUERY_BAR_ERROR_CODES = [ - ESQL_ERROR_CODES.INVALID_ESQL, - EQL_ERROR_CODES.FAILED_REQUEST, - EQL_ERROR_CODES.INVALID_EQL, - EQL_ERROR_CODES.MISSING_DATA_SOURCE, -]; - -const isNonBlockingQueryBarErrorCode = (errorCode?: string) => { - return !!NON_BLOCKING_QUERY_BAR_ERROR_CODES.find((code) => code === errorCode); -}; - -const NON_BLOCKING_ERROR_CODES = [...NON_BLOCKING_QUERY_BAR_ERROR_CODES]; - -const isNonBlockingErrorCode = (errorCode?: string) => { - return !!NON_BLOCKING_ERROR_CODES.find((code) => code === errorCode); -}; - -const transformValidationError = ({ - errorCode, - errorMessage, -}: { - errorCode?: string; - errorMessage: string; -}) => { - if (isNonBlockingQueryBarErrorCode(errorCode)) { - return i18n.QUERY_BAR_VALIDATION_ERROR(errorMessage); - } - return errorMessage; -}; - -export const useRuleFormsErrors = () => { - const getRuleFormsErrors = useCallback( - ({ defineStepForm, aboutStepForm, scheduleStepForm, actionsStepForm }: UseRuleFormsErrors) => { - const blockingErrors: string[] = []; - const nonBlockingErrors: string[] = []; - - for (const [_, fieldHook] of Object.entries(defineStepForm?.getFields() ?? {})) { - fieldHook.errors.forEach((fieldError) => { - const messages = getFieldErrorMessages(fieldError); - if (isNonBlockingErrorCode(fieldError.code)) { - nonBlockingErrors.push( - ...messages.map((message) => - transformValidationError({ errorCode: fieldError.code, errorMessage: message }) - ) - ); - } else { - blockingErrors.push(...messages); - } - }); - } - - const blockingForms = [aboutStepForm, scheduleStepForm, actionsStepForm]; - blockingForms.forEach((form) => { - for (const [_, fieldHook] of Object.entries(form?.getFields() ?? {})) { - blockingErrors.push(...fieldHook.errors.map((fieldError) => fieldError.message)); - } - }); - return { blockingErrors, nonBlockingErrors }; - }, - [] - ); - - return { getRuleFormsErrors }; -}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx index 6019b696a089c..4bf634595a9db 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_creation/index.tsx @@ -56,6 +56,8 @@ import { } from '../../../../detections/pages/detection_engine/rules/helpers'; import type { DefineStepRule } from '../../../../detections/pages/detection_engine/rules/types'; import { RuleStep } from '../../../../detections/pages/detection_engine/rules/types'; +import { ALERT_SUPPRESSION_FIELDS_FIELD_NAME } from '../../../rule_creation/components/alert_suppression_edit'; +import { useConfirmValidationErrorsModal } from '../../../../common/hooks/use_confirm_validation_errors_modal'; import { formatRule } from './helpers'; import { useEsqlIndex, useEsqlQueryForAboutStep } from '../../hooks'; import * as i18n from './translations'; @@ -77,11 +79,11 @@ import { useKibana, useUiSetting$ } from '../../../../common/lib/kibana'; import { RulePreview } from '../../components/rule_preview'; import { getIsRulePreviewDisabled } from '../../components/rule_preview/helpers'; import { useStartMlJobs } from '../../../rule_management/logic/use_start_ml_jobs'; +import { VALIDATION_WARNING_CODE_FIELD_NAME_MAP } from '../../../rule_creation/constants/validation_warning_codes'; +import { extractValidationMessages } from '../../../rule_creation/logic/extract_validation_messages'; import { NextStep } from '../../components/next_step'; -import { useRuleForms, useRuleFormsErrors, useRuleIndexPattern } from '../form'; +import { useRuleForms, useRuleIndexPattern } from '../form'; import { CustomHeaderPageMemo } from '..'; -import { SaveWithErrorsModal } from '../../components/save_with_errors_confirmation'; -import { ALERT_SUPPRESSION_FIELDS_FIELD_NAME } from '../../../rule_creation/components/alert_suppression_edit'; const MyEuiPanel = styled(EuiPanel)<{ zindex?: number; @@ -178,6 +180,9 @@ const CreateRulePageComponent: React.FC = () => { actionsStepDefault, }); + const { modal: confirmSavingWithWarningModal, confirmValidationErrors } = + useConfirmValidationErrorsModal(); + const isThreatMatchRuleValue = useMemo( () => isThreatMatchRule(defineStepData.ruleType), [defineStepData.ruleType] @@ -203,12 +208,6 @@ const CreateRulePageComponent: React.FC = () => { const [isQueryBarValid, setIsQueryBarValid] = useState(false); const [isThreatQueryBarValid, setIsThreatQueryBarValid] = useState(false); - const [isSaveWithErrorsModalVisible, setIsSaveWithErrorsModalVisible] = useState(false); - const [enableRuleAfterConfirmation, setEnableRuleAfterConfirmation] = useState(false); - const [nonBlockingRuleErrors, setNonBlockingRuleErrors] = useState([]); - - const { getRuleFormsErrors } = useRuleFormsErrors(); - const esqlQueryForAboutStep = useEsqlQueryForAboutStep({ defineStepData, activeStep }); const esqlIndex = useEsqlIndex(defineStepData.queryBar.query.query, ruleType); @@ -315,73 +314,73 @@ const CreateRulePageComponent: React.FC = () => { switch (step) { case RuleStep.defineRule: { const valid = await defineStepForm.validate(); - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ defineStepForm }); - return { valid, blockingErrors, nonBlockingErrors }; + + return { + valid, + warnings: defineStepForm.getValidationWarnings(), + }; } + case RuleStep.aboutRule: { const valid = await aboutStepForm.validate(); - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ aboutStepForm }); - return { valid, blockingErrors, nonBlockingErrors }; + + return { + valid, + warnings: aboutStepForm.getValidationWarnings(), + }; } case RuleStep.scheduleRule: { const valid = await scheduleStepForm.validate(); - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ scheduleStepForm }); - return { valid, blockingErrors, nonBlockingErrors }; + + return { + valid, + warnings: scheduleStepForm.getValidationWarnings(), + }; } case RuleStep.ruleActions: { const valid = await actionsStepForm.validate(); - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ actionsStepForm }); - return { valid, blockingErrors, nonBlockingErrors }; + + return { + valid, + warnings: actionsStepForm.getValidationWarnings(), + }; } } }, - [aboutStepForm, actionsStepForm, defineStepForm, getRuleFormsErrors, scheduleStepForm] - ); - - const validateEachStep = useCallback(async () => { - const { - valid: defineStepFormValid, - blockingErrors: defineStepBlockingErrors, - nonBlockingErrors: defineStepNonBlockingErrors, - } = await validateStep(RuleStep.defineRule); - const { - valid: aboutStepFormValid, - blockingErrors: aboutStepBlockingErrors, - nonBlockingErrors: aboutStepNonBlockingErrors, - } = await validateStep(RuleStep.aboutRule); - const { - valid: scheduleStepFormValid, - blockingErrors: scheduleStepBlockingErrors, - nonBlockingErrors: scheduleStepNonBlockingErrors, - } = await validateStep(RuleStep.scheduleRule); - const { - valid: actionsStepFormValid, - blockingErrors: actionsStepBlockingErrors, - nonBlockingErrors: actionsStepNonBlockingErrors, - } = await validateStep(RuleStep.ruleActions); + [aboutStepForm, actionsStepForm, defineStepForm, scheduleStepForm] + ); + + const validateAllSteps = useCallback(async () => { + const { valid: defineStepFormValid, warnings: defineStepWarnings } = await validateStep( + RuleStep.defineRule + ); + const { valid: aboutStepFormValid, warnings: aboutStepWarnings } = await validateStep( + RuleStep.aboutRule + ); + const { valid: scheduleStepFormValid, warnings: scheduleStepWarnings } = await validateStep( + RuleStep.scheduleRule + ); + const { valid: actionsStepFormValid, warnings: actionsStepWarnings } = await validateStep( + RuleStep.ruleActions + ); const valid = defineStepFormValid && aboutStepFormValid && scheduleStepFormValid && actionsStepFormValid; - const blockingErrors = [ - ...defineStepBlockingErrors, - ...aboutStepBlockingErrors, - ...scheduleStepBlockingErrors, - ...actionsStepBlockingErrors, - ]; - const nonBlockingErrors = [ - ...defineStepNonBlockingErrors, - ...aboutStepNonBlockingErrors, - ...scheduleStepNonBlockingErrors, - ...actionsStepNonBlockingErrors, + const warnings = [ + ...defineStepWarnings, + ...aboutStepWarnings, + ...scheduleStepWarnings, + ...actionsStepWarnings, ]; - return { valid, blockingErrors, nonBlockingErrors }; + return { valid, warnings }; }, [validateStep]); const editStep = useCallback( async (step: RuleStep) => { - const { valid, blockingErrors } = await validateStep(activeStep); - if (valid || !blockingErrors.length) { + const { valid } = await validateStep(activeStep); + + if (valid) { goToStep(step); } }, @@ -440,34 +439,21 @@ const CreateRulePageComponent: React.FC = () => { ] ); - const showSaveWithErrorsModal = useCallback(() => setIsSaveWithErrorsModalVisible(true), []); - const closeSaveWithErrorsModal = useCallback(() => setIsSaveWithErrorsModalVisible(false), []); - const onConfirmSaveWithErrors = useCallback(async () => { - closeSaveWithErrorsModal(); - await createRuleFromFormData(enableRuleAfterConfirmation); - }, [closeSaveWithErrorsModal, createRuleFromFormData, enableRuleAfterConfirmation]); - const submitRule = useCallback( async (enabled: boolean) => { - const { valid, blockingErrors, nonBlockingErrors } = await validateEachStep(); - if (valid) { - // There are no validation errors, thus proceed to rule creation - await createRuleFromFormData(enabled); - return; - } + const { valid, warnings } = await validateAllSteps(); + const warningMessages = extractValidationMessages( + warnings, + VALIDATION_WARNING_CODE_FIELD_NAME_MAP + ); - if (blockingErrors.length > 0) { - // There are blocking validation errors, thus do not allow user to create a rule + if (!valid || !(await confirmValidationErrors(warningMessages))) { return; } - if (nonBlockingErrors.length > 0) { - // There are non-blocking validation errors, thus confirm that user understand that this can cause rule failures - setEnableRuleAfterConfirmation(enabled); - setNonBlockingRuleErrors(nonBlockingErrors); - showSaveWithErrorsModal(); - } + + await createRuleFromFormData(enabled); }, - [createRuleFromFormData, showSaveWithErrorsModal, validateEachStep] + [createRuleFromFormData, validateAllSteps, confirmValidationErrors] ); const defineRuleButtonType = @@ -846,13 +832,7 @@ const CreateRulePageComponent: React.FC = () => { return ( <> - {isSaveWithErrorsModalVisible && ( - - )} + {confirmSavingWithWarningModal} {(EuiResizablePanel, EuiResizableButton, { togglePanel }) => { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx index 594b9d2a35598..3327e45bd2bb7 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/rule_editing/index.tsx @@ -21,6 +21,7 @@ import type { FC } from 'react'; import React, { memo, useCallback, useMemo, useRef, useState } from 'react'; import { useParams } from 'react-router-dom'; +import { useConfirmValidationErrorsModal } from '../../../../common/hooks/use_confirm_validation_errors_modal'; import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import { isEsqlRule } from '../../../../../common/detection_engine/utils'; import { RulePreview } from '../../components/rule_preview'; @@ -67,10 +68,11 @@ import { import { useStartTransaction } from '../../../../common/lib/apm/use_start_transaction'; import { SINGLE_RULE_ACTIONS } from '../../../../common/lib/apm/user_actions'; import { useGetSavedQuery } from '../../../../detections/pages/detection_engine/rules/use_get_saved_query'; -import { useRuleForms, useRuleFormsErrors, useRuleIndexPattern } from '../form'; +import { extractValidationMessages } from '../../../rule_creation/logic/extract_validation_messages'; +import { VALIDATION_WARNING_CODE_FIELD_NAME_MAP } from '../../../rule_creation/constants/validation_warning_codes'; +import { useRuleForms, useRuleIndexPattern } from '../form'; import { useEsqlIndex, useEsqlQueryForAboutStep } from '../../hooks'; import { CustomHeaderPageMemo } from '..'; -import { SaveWithErrorsModal } from '../../components/save_with_errors_confirmation'; import { useIsPrebuiltRulesCustomizationEnabled } from '../../../rule_management/hooks/use_is_prebuilt_rules_customization_enabled'; import { ALERT_SUPPRESSION_FIELDS_FIELD_NAME } from '../../../rule_creation/components/alert_suppression_edit'; @@ -104,9 +106,6 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { const [isQueryBarValid, setIsQueryBarValid] = useState(false); const [isThreatQueryBarValid, setIsThreatQueryBarValid] = useState(false); - const [isSaveWithErrorsModalVisible, setIsSaveWithErrorsModalVisible] = useState(false); - const [nonBlockingRuleErrors, setNonBlockingRuleErrors] = useState([]); - const backOptions = useMemo( () => ({ path: getRuleDetailsUrl(ruleId ?? ''), @@ -140,7 +139,8 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { actionsStepDefault: ruleActionsData, }); - const { getRuleFormsErrors } = useRuleFormsErrors(); + const { modal: confirmSavingWithWarningModal, confirmValidationErrors } = + useConfirmValidationErrorsModal(); const esqlQueryForAboutStep = useEsqlQueryForAboutStep({ defineStepData, activeStep }); @@ -411,16 +411,7 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { updateRule, ]); - const showSaveWithErrorsModal = useCallback(() => setIsSaveWithErrorsModalVisible(true), []); - const closeSaveWithErrorsModal = useCallback(() => setIsSaveWithErrorsModalVisible(false), []); - const onConfirmSaveWithErrors = useCallback(async () => { - closeSaveWithErrorsModal(); - await saveChanges(); - }, [closeSaveWithErrorsModal, saveChanges]); - const onSubmit = useCallback(async () => { - setNonBlockingRuleErrors([]); - const actionsStepFormValid = await actionsStepForm.validate(); if (!isPrebuiltRulesCustomizationEnabled && rule.immutable) { // Since users cannot edit Define, About and Schedule tabs of the rule, we skip validation of those to avoid @@ -435,29 +426,36 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { const defineStepFormValid = await defineStepForm.validate(); const aboutStepFormValid = await aboutStepForm.validate(); const scheduleStepFormValid = await scheduleStepForm.validate(); + if ( - defineStepFormValid && - aboutStepFormValid && - scheduleStepFormValid && - actionsStepFormValid + !defineStepFormValid || + !aboutStepFormValid || + !scheduleStepFormValid || + !actionsStepFormValid ) { - await saveChanges(); return; } - const { blockingErrors, nonBlockingErrors } = getRuleFormsErrors({ - defineStepForm, - aboutStepForm, - scheduleStepForm, - actionsStepForm, - }); - if (blockingErrors.length > 0) { + const defineRuleWarnings = defineStepForm.getValidationWarnings(); + const aboutRuleWarnings = aboutStepForm.getValidationWarnings(); + const scheduleRuleWarnings = scheduleStepForm.getValidationWarnings(); + const ruleActionsWarnings = actionsStepForm.getValidationWarnings(); + + const warnings = extractValidationMessages( + [ + ...defineRuleWarnings, + ...aboutRuleWarnings, + ...scheduleRuleWarnings, + ...ruleActionsWarnings, + ], + VALIDATION_WARNING_CODE_FIELD_NAME_MAP + ); + + if (!(await confirmValidationErrors(warnings))) { return; } - if (nonBlockingErrors.length > 0) { - setNonBlockingRuleErrors(nonBlockingErrors); - showSaveWithErrorsModal(); - } + + await saveChanges(); }, [ actionsStepForm, isPrebuiltRulesCustomizationEnabled, @@ -465,9 +463,8 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { defineStepForm, aboutStepForm, scheduleStepForm, - getRuleFormsErrors, + confirmValidationErrors, saveChanges, - showSaveWithErrorsModal, ]); const onTabClick = useCallback(async (tab: EuiTabbedContentTab) => { @@ -523,13 +520,7 @@ const EditRulePageComponent: FC<{ rule: RuleResponse }> = ({ rule }) => { return ( <> - {isSaveWithErrorsModalVisible && ( - - )} + {confirmSavingWithWarningModal} {(EuiResizablePanel, EuiResizableButton, { togglePanel }) => { diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/translations.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/translations.ts index 77ea9438f66dc..e602b8be712c2 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/translations.ts +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_creation_ui/pages/translations.ts @@ -13,9 +13,3 @@ export const RULE_PREVIEW_TITLE = i18n.translate( defaultMessage: 'Rule preview', } ); - -export const QUERY_BAR_VALIDATION_ERROR = (validationError: string) => - i18n.translate('xpack.securitySolution.detectionEngine.createRule.validationError', { - values: { validationError }, - defaultMessage: 'Query bar: {validationError}', - }); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/eql_query/eql_query_edit_adapter.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/eql_query/eql_query_edit_adapter.tsx index 787891452f1d7..cea9b9308c0df 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/eql_query/eql_query_edit_adapter.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/eql_query/eql_query_edit_adapter.tsx @@ -29,7 +29,6 @@ export function EqlQueryEditAdapter({ dataView={dataView ?? DEFAULT_DATA_VIEW_BASE} loading={isLoading} disabled={isLoading} - skipEqlValidation /> ); } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/esql_query/esql_query_edit_adapter.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/esql_query/esql_query_edit_adapter.tsx index a9375b7316bb3..faf43d5b88b22 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/esql_query/esql_query_edit_adapter.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/esql_query/esql_query_edit_adapter.tsx @@ -23,7 +23,6 @@ export function EsqlQueryEditAdapter({ dataView={dataView ?? DEFAULT_DATA_VIEW_BASE} loading={isLoading} disabled={isLoading} - skipIdColumnCheck /> ); } diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/rule_field_edit_form_wrapper.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/rule_field_edit_form_wrapper.tsx index 1b45bea28880f..a5f7eedc6114c 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/rule_field_edit_form_wrapper.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/three_way_diff/final_edit/fields/rule_field_edit_form_wrapper.tsx @@ -7,7 +7,10 @@ import React, { useCallback, useEffect } from 'react'; import { EuiButtonEmpty, EuiFlexGroup } from '@elastic/eui'; -import { useForm, Form } from '../../../../../../../shared_imports'; +import { extractValidationMessages } from '../../../../../../rule_creation/logic/extract_validation_messages'; +import type { FormWithWarningsSubmitHandler } from '../../../../../../../common/hooks/use_form_with_warnings'; +import { useFormWithWarnings } from '../../../../../../../common/hooks/use_form_with_warnings'; +import { Form } from '../../../../../../../shared_imports'; import type { FormSchema, FormData } from '../../../../../../../shared_imports'; import type { DiffableAllFields, @@ -17,6 +20,11 @@ import { useFinalSideContext } from '../../final_side/final_side_context'; import { useDiffableRuleContext } from '../../diffable_rule_context'; import * as i18n from '../../translations'; import type { RuleFieldEditComponentProps } from './rule_field_edit_component_props'; +import { useConfirmValidationErrorsModal } from '../../../../../../../common/hooks/use_confirm_validation_errors_modal'; +import { + VALIDATION_WARNING_CODE_FIELD_NAME_MAP, + VALIDATION_WARNING_CODES, +} from '../../../../../../rule_creation/constants/validation_warning_codes'; type RuleFieldEditComponent = React.ComponentType; @@ -56,9 +64,16 @@ export function RuleFieldEditFormWrapper({ [deserializer, finalDiffableRule] ); - const handleSubmit = useCallback( - async (formData: FormData, isValid: boolean) => { - if (!isValid) { + const { modal, confirmValidationErrors } = useConfirmValidationErrorsModal(); + + const handleSubmit = useCallback( + async (formData: FormData, isValid: boolean, { warnings }) => { + const warningMessages = extractValidationMessages( + warnings, + VALIDATION_WARNING_CODE_FIELD_NAME_MAP + ); + + if (!isValid || !(await confirmValidationErrors(warningMessages))) { return; } @@ -69,15 +84,24 @@ export function RuleFieldEditFormWrapper({ }); setReadOnlyMode(); }, - [fieldName, finalDiffableRule.rule_id, setReadOnlyMode, setRuleFieldResolvedValue] + [ + confirmValidationErrors, + fieldName, + finalDiffableRule.rule_id, + setReadOnlyMode, + setRuleFieldResolvedValue, + ] ); - const { form } = useForm({ + const { form } = useFormWithWarnings({ schema: ruleFieldFormSchema, defaultValue: getDefaultValue(fieldName, finalDiffableRule), deserializer: deserialize, serializer, onSubmit: handleSubmit, + options: { + warningValidationCodes: VALIDATION_WARNING_CODES, + }, }); // form.isValid has `undefined` value until all fields are dirty. @@ -96,6 +120,7 @@ export function RuleFieldEditFormWrapper({ {i18n.SAVE_BUTTON_LABEL} + {modal}
      Date: Fri, 6 Dec 2024 14:40:47 +0100 Subject: [PATCH 121/141] [ES|QL] Generate docs and functions (#203210) ## Summary Updates the docs and functions from ES --- .../definitions/generated/scalar_functions.ts | 393 +++++++++++++++++- .../sections/generated/scalar_functions.tsx | 222 ++++++++++ 2 files changed, 610 insertions(+), 5 deletions(-) diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/generated/scalar_functions.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/generated/scalar_functions.ts index d76b4d9b03ad9..20e3fe964722b 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/generated/scalar_functions.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/generated/scalar_functions.ts @@ -605,11 +605,9 @@ const categorizeDefinition: FunctionDefinition = { type: 'eval', name: 'categorize', description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.categorize', { - defaultMessage: 'Categorizes text messages.', + defaultMessage: 'Groups text messages into categories of similarly formatted text values.', }), - ignoreAsSuggestion: true, - - preview: false, + preview: true, alias: undefined, signatures: [ { @@ -636,7 +634,7 @@ const categorizeDefinition: FunctionDefinition = { supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], supportedOptions: ['by'], validate: undefined, - examples: [], + examples: ['FROM sample_data\n| STATS count=COUNT() BY category=CATEGORIZE(message)'], }; // Do not edit this manually... generated by scripts/generate_function_definitions.ts @@ -7361,6 +7359,65 @@ const stDistanceDefinition: FunctionDefinition = { ], }; +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const stEnvelopeDefinition: FunctionDefinition = { + type: 'eval', + name: 'st_envelope', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_envelope', { + defaultMessage: 'Determines the minimum bounding box of the supplied geometry.', + }), + preview: false, + alias: undefined, + signatures: [ + { + params: [ + { + name: 'geometry', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'geometry', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'geometry', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + { + params: [ + { + name: 'geometry', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM airport_city_boundaries\n| WHERE abbrev == "CPH"\n| EVAL envelope = ST_ENVELOPE(city_boundary)\n| KEEP abbrev, airport, envelope', + ], +}; + // Do not edit this manually... generated by scripts/generate_function_definitions.ts const stIntersectsDefinition: FunctionDefinition = { type: 'eval', @@ -7681,6 +7738,126 @@ const stXDefinition: FunctionDefinition = { ], }; +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const stXmaxDefinition: FunctionDefinition = { + type: 'eval', + name: 'st_xmax', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_xmax', { + defaultMessage: + 'Extracts the maximum value of the `x` coordinates from the supplied geometry.\nIf the geometry is of type `geo_point` or `geo_shape` this is equivalent to extracting the maximum `longitude` value.', + }), + preview: false, + alias: undefined, + signatures: [ + { + params: [ + { + name: 'point', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM airport_city_boundaries\n| WHERE abbrev == "CPH"\n| EVAL envelope = ST_ENVELOPE(city_boundary)\n| EVAL xmin = ST_XMIN(envelope), xmax = ST_XMAX(envelope), ymin = ST_YMIN(envelope), ymax = ST_YMAX(envelope)\n| KEEP abbrev, airport, xmin, xmax, ymin, ymax', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const stXminDefinition: FunctionDefinition = { + type: 'eval', + name: 'st_xmin', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_xmin', { + defaultMessage: + 'Extracts the minimum value of the `x` coordinates from the supplied geometry.\nIf the geometry is of type `geo_point` or `geo_shape` this is equivalent to extracting the minimum `longitude` value.', + }), + preview: false, + alias: undefined, + signatures: [ + { + params: [ + { + name: 'point', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM airport_city_boundaries\n| WHERE abbrev == "CPH"\n| EVAL envelope = ST_ENVELOPE(city_boundary)\n| EVAL xmin = ST_XMIN(envelope), xmax = ST_XMAX(envelope), ymin = ST_YMIN(envelope), ymax = ST_YMAX(envelope)\n| KEEP abbrev, airport, xmin, xmax, ymin, ymax', + ], +}; + // Do not edit this manually... generated by scripts/generate_function_definitions.ts const stYDefinition: FunctionDefinition = { type: 'eval', @@ -7721,6 +7898,126 @@ const stYDefinition: FunctionDefinition = { ], }; +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const stYmaxDefinition: FunctionDefinition = { + type: 'eval', + name: 'st_ymax', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_ymax', { + defaultMessage: + 'Extracts the maximum value of the `y` coordinates from the supplied geometry.\nIf the geometry is of type `geo_point` or `geo_shape` this is equivalent to extracting the maximum `latitude` value.', + }), + preview: false, + alias: undefined, + signatures: [ + { + params: [ + { + name: 'point', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM airport_city_boundaries\n| WHERE abbrev == "CPH"\n| EVAL envelope = ST_ENVELOPE(city_boundary)\n| EVAL xmin = ST_XMIN(envelope), xmax = ST_XMAX(envelope), ymin = ST_YMIN(envelope), ymax = ST_YMAX(envelope)\n| KEEP abbrev, airport, xmin, xmax, ymin, ymax', + ], +}; + +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const stYminDefinition: FunctionDefinition = { + type: 'eval', + name: 'st_ymin', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_ymin', { + defaultMessage: + 'Extracts the minimum value of the `y` coordinates from the supplied geometry.\nIf the geometry is of type `geo_point` or `geo_shape` this is equivalent to extracting the minimum `latitude` value.', + }), + preview: false, + alias: undefined, + signatures: [ + { + params: [ + { + name: 'point', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'double', + }, + { + params: [ + { + name: 'point', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'double', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM airport_city_boundaries\n| WHERE abbrev == "CPH"\n| EVAL envelope = ST_ENVELOPE(city_boundary)\n| EVAL xmin = ST_XMIN(envelope), xmax = ST_XMAX(envelope), ymin = ST_YMIN(envelope), ymax = ST_YMAX(envelope)\n| KEEP abbrev, airport, xmin, xmax, ymin, ymax', + ], +}; + // Do not edit this manually... generated by scripts/generate_function_definitions.ts const startsWithDefinition: FunctionDefinition = { type: 'eval', @@ -7996,6 +8293,86 @@ const tauDefinition: FunctionDefinition = { examples: ['ROW TAU()'], }; +// Do not edit this manually... generated by scripts/generate_function_definitions.ts +const termDefinition: FunctionDefinition = { + type: 'eval', + name: 'term', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.term', { + defaultMessage: + 'Performs a Term query on the specified field. Returns true if the provided term matches the row.', + }), + ignoreAsSuggestion: true, + + preview: true, + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + { + name: 'query', + type: 'keyword', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'keyword', + optional: false, + }, + { + name: 'query', + type: 'text', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + { + name: 'query', + type: 'keyword', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'text', + optional: false, + }, + { + name: 'query', + type: 'text', + optional: false, + }, + ], + returnType: 'boolean', + }, + ], + supportedCommands: ['stats', 'inlinestats', 'metrics', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['from books \n| where term(author, "gabriel") \n| keep book_no, title\n| limit 3;'], +}; + // Do not edit this manually... generated by scripts/generate_function_definitions.ts const toBase64Definition: FunctionDefinition = { type: 'eval', @@ -9699,15 +10076,21 @@ export const scalarFunctionDefinitions = [ stContainsDefinition, stDisjointDefinition, stDistanceDefinition, + stEnvelopeDefinition, stIntersectsDefinition, stWithinDefinition, stXDefinition, + stXmaxDefinition, + stXminDefinition, stYDefinition, + stYmaxDefinition, + stYminDefinition, startsWithDefinition, substringDefinition, tanDefinition, tanhDefinition, tauDefinition, + termDefinition, toBase64Definition, toBooleanDefinition, toCartesianpointDefinition, diff --git a/packages/kbn-language-documentation/src/sections/generated/scalar_functions.tsx b/packages/kbn-language-documentation/src/sections/generated/scalar_functions.tsx index 55eadf85a09f6..9dfc4a2a526a6 100644 --- a/packages/kbn-language-documentation/src/sections/generated/scalar_functions.tsx +++ b/packages/kbn-language-documentation/src/sections/generated/scalar_functions.tsx @@ -337,6 +337,40 @@ export const functions = { ), }, // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate('languageDocumentation.documentationESQL.categorize', { + defaultMessage: 'CATEGORIZE', + }), + preview: true, + description: ( + + + ### CATEGORIZE + Groups text messages into categories of similarly formatted text values. + + \`\`\` + FROM sample_data + | STATS count=COUNT() BY category=CATEGORIZE(message) + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate('languageDocumentation.documentationESQL.cbrt', { defaultMessage: 'CBRT', @@ -2523,6 +2557,42 @@ export const functions = { | EVAL distance = ST_DISTANCE(location, city_location) | KEEP abbrev, name, location, city_location, distance \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate('languageDocumentation.documentationESQL.st_envelope', { + defaultMessage: 'ST_ENVELOPE', + }), + preview: false, + description: ( + + + ### ST_ENVELOPE + Determines the minimum bounding box of the supplied geometry. + + \`\`\` + FROM airport_city_boundaries + | WHERE abbrev == "CPH" + | EVAL envelope = ST_ENVELOPE(city_boundary) + | KEEP abbrev, airport, envelope + \`\`\` `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', @@ -2639,6 +2709,82 @@ export const functions = { ), }, // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate('languageDocumentation.documentationESQL.st_xmax', { + defaultMessage: 'ST_XMAX', + }), + preview: false, + description: ( + + + ### ST_XMAX + Extracts the maximum value of the \`x\` coordinates from the supplied geometry. + If the geometry is of type \`geo_point\` or \`geo_shape\` this is equivalent to extracting the maximum \`longitude\` value. + + \`\`\` + FROM airport_city_boundaries + | WHERE abbrev == "CPH" + | EVAL envelope = ST_ENVELOPE(city_boundary) + | EVAL xmin = ST_XMIN(envelope), xmax = ST_XMAX(envelope), ymin = ST_YMIN(envelope), ymax = ST_YMAX(envelope) + | KEEP abbrev, airport, xmin, xmax, ymin, ymax + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate('languageDocumentation.documentationESQL.st_xmin', { + defaultMessage: 'ST_XMIN', + }), + preview: false, + description: ( + + + ### ST_XMIN + Extracts the minimum value of the \`x\` coordinates from the supplied geometry. + If the geometry is of type \`geo_point\` or \`geo_shape\` this is equivalent to extracting the minimum \`longitude\` value. + + \`\`\` + FROM airport_city_boundaries + | WHERE abbrev == "CPH" + | EVAL envelope = ST_ENVELOPE(city_boundary) + | EVAL xmin = ST_XMIN(envelope), xmax = ST_XMAX(envelope), ymin = ST_YMIN(envelope), ymax = ST_YMAX(envelope) + | KEEP abbrev, airport, xmin, xmax, ymin, ymax + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate('languageDocumentation.documentationESQL.st_y', { defaultMessage: 'ST_Y', @@ -2671,6 +2817,82 @@ export const functions = { ), }, // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate('languageDocumentation.documentationESQL.st_ymax', { + defaultMessage: 'ST_YMAX', + }), + preview: false, + description: ( + + + ### ST_YMAX + Extracts the maximum value of the \`y\` coordinates from the supplied geometry. + If the geometry is of type \`geo_point\` or \`geo_shape\` this is equivalent to extracting the maximum \`latitude\` value. + + \`\`\` + FROM airport_city_boundaries + | WHERE abbrev == "CPH" + | EVAL envelope = ST_ENVELOPE(city_boundary) + | EVAL xmin = ST_XMIN(envelope), xmax = ST_XMAX(envelope), ymin = ST_YMIN(envelope), ymax = ST_YMAX(envelope) + | KEEP abbrev, airport, xmin, xmax, ymin, ymax + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts + { + label: i18n.translate('languageDocumentation.documentationESQL.st_ymin', { + defaultMessage: 'ST_YMIN', + }), + preview: false, + description: ( + + + ### ST_YMIN + Extracts the minimum value of the \`y\` coordinates from the supplied geometry. + If the geometry is of type \`geo_point\` or \`geo_shape\` this is equivalent to extracting the minimum \`latitude\` value. + + \`\`\` + FROM airport_city_boundaries + | WHERE abbrev == "CPH" + | EVAL envelope = ST_ENVELOPE(city_boundary) + | EVAL xmin = ST_XMIN(envelope), xmax = ST_XMAX(envelope), ymin = ST_YMIN(envelope), ymax = ST_YMAX(envelope) + | KEEP abbrev, airport, xmin, xmax, ymin, ymax + \`\`\` + `, + description: + 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', + ignoreTag: true, + } + )} + /> + ), + }, + // Do not edit manually... automatically generated by scripts/generate_esql_docs.ts { label: i18n.translate('languageDocumentation.documentationESQL.starts_with', { defaultMessage: 'STARTS_WITH', From 2a80b1b992056bb54dec2fe4f0a9fa17c91c274c Mon Sep 17 00:00:00 2001 From: Tomasz Ciecierski Date: Fri, 6 Dec 2024 15:03:23 +0100 Subject: [PATCH 122/141] [EDR Workflows] Skip Packs test on MKI (#203211) --- .../cypress/e2e/all/packs_create_edit.cy.ts | 1083 +++++++++-------- 1 file changed, 552 insertions(+), 531 deletions(-) diff --git a/x-pack/plugins/osquery/cypress/e2e/all/packs_create_edit.cy.ts b/x-pack/plugins/osquery/cypress/e2e/all/packs_create_edit.cy.ts index dbed4e56f88a0..1b8dd92c2b06a 100644 --- a/x-pack/plugins/osquery/cypress/e2e/all/packs_create_edit.cy.ts +++ b/x-pack/plugins/osquery/cypress/e2e/all/packs_create_edit.cy.ts @@ -38,309 +38,256 @@ import { loadSavedQuery, cleanupSavedQuery, cleanupPack, loadPack } from '../../ import { request } from '../../tasks/common'; import { ServerlessRoleName } from '../../support/roles'; -describe('Packs - Create and Edit', { tags: ['@ess', '@serverless'] }, () => { - let savedQueryId: string; - let savedQueryName: string; - let nomappingSavedQueryId: string; - let nomappingSavedQueryName: string; - let oneMappingSavedQueryId: string; - let oneMappingSavedQueryName: string; - let multipleMappingsSavedQueryId: string; - let multipleMappingsSavedQueryName: string; - - const PACK_NAME = 'Pack-name' + generateRandomStringName(1)[0]; - - before(() => { - loadSavedQuery().then((data) => { - savedQueryId = data.saved_object_id; - savedQueryName = data.id; - }); - loadSavedQuery({ - ecs_mapping: {}, - interval: '3600', - query: 'select * from uptime;', - }).then((data) => { - nomappingSavedQueryId = data.saved_object_id; - nomappingSavedQueryName = data.id; - }); - loadSavedQuery({ - ecs_mapping: { - 'client.geo.continent_name': { - field: 'seconds', - }, - }, - interval: '3600', - query: 'select * from uptime;', - timeout: 607, - }).then((data) => { - oneMappingSavedQueryId = data.saved_object_id; - oneMappingSavedQueryName = data.id; - }); - loadSavedQuery({ - ecs_mapping: { - labels: { - field: 'days', - }, - tags: { - field: 'seconds', +describe( + 'Packs - Create and Edit', + // TODO: failing on MKI https://github.com/elastic/kibana/issues/200302 + { tags: ['@ess', '@serverless', '@skipInServerlessMKI'] }, + () => { + let savedQueryId: string; + let savedQueryName: string; + let nomappingSavedQueryId: string; + let nomappingSavedQueryName: string; + let oneMappingSavedQueryId: string; + let oneMappingSavedQueryName: string; + let multipleMappingsSavedQueryId: string; + let multipleMappingsSavedQueryName: string; + + const PACK_NAME = 'Pack-name' + generateRandomStringName(1)[0]; + + before(() => { + loadSavedQuery().then((data) => { + savedQueryId = data.saved_object_id; + savedQueryName = data.id; + }); + loadSavedQuery({ + ecs_mapping: {}, + interval: '3600', + query: 'select * from uptime;', + }).then((data) => { + nomappingSavedQueryId = data.saved_object_id; + nomappingSavedQueryName = data.id; + }); + loadSavedQuery({ + ecs_mapping: { + 'client.geo.continent_name': { + field: 'seconds', + }, }, - 'client.address': { - field: 'total_seconds', + interval: '3600', + query: 'select * from uptime;', + timeout: 607, + }).then((data) => { + oneMappingSavedQueryId = data.saved_object_id; + oneMappingSavedQueryName = data.id; + }); + loadSavedQuery({ + ecs_mapping: { + labels: { + field: 'days', + }, + tags: { + field: 'seconds', + }, + 'client.address': { + field: 'total_seconds', + }, }, - }, - interval: '3600', - query: 'select * from uptime;', - }).then((data) => { - multipleMappingsSavedQueryId = data.saved_object_id; - multipleMappingsSavedQueryName = data.id; + interval: '3600', + query: 'select * from uptime;', + }).then((data) => { + multipleMappingsSavedQueryId = data.saved_object_id; + multipleMappingsSavedQueryName = data.id; + }); }); - }); - - beforeEach(() => { - cy.login(ServerlessRoleName.SOC_MANAGER); - navigateTo('/app/osquery'); - }); - - after(() => { - cleanupSavedQuery(savedQueryId); - cleanupSavedQuery(nomappingSavedQueryId); - cleanupSavedQuery(oneMappingSavedQueryId); - cleanupSavedQuery(multipleMappingsSavedQueryId); - }); - - describe('Check if result type is correct', { tags: ['@ess', '@serverless'] }, () => { - let resultTypePackId: string; beforeEach(() => { - interceptPackId((pack) => { - resultTypePackId = pack; - }); + cy.login(ServerlessRoleName.SOC_MANAGER); + navigateTo('/app/osquery'); }); - afterEach(() => { - cleanupPack(resultTypePackId); + after(() => { + cleanupSavedQuery(savedQueryId); + cleanupSavedQuery(nomappingSavedQueryId); + cleanupSavedQuery(oneMappingSavedQueryId); + cleanupSavedQuery(multipleMappingsSavedQueryId); }); - it('Check if result type is correct', () => { - const packName = 'ResultType' + generateRandomStringName(1)[0]; + describe('Check if result type is correct', { tags: ['@ess', '@serverless'] }, () => { + let resultTypePackId: string; - cy.contains('Packs').click(); - cy.getBySel(ADD_PACK_HEADER_BUTTON).click(); - cy.get(formFieldInputSelector('name')).type(`${packName}{downArrow}{enter}`); + beforeEach(() => { + interceptPackId((pack) => { + resultTypePackId = pack; + }); + }); - cy.getBySel(ADD_QUERY_BUTTON).click(); + afterEach(() => { + cleanupPack(resultTypePackId); + }); - cy.contains('Attach next query'); - getIdFormField().type('Query1'); - inputQuery('select * from uptime;'); - cy.getBySel('timeout-input').clear().type('601'); - cy.wait(500); // wait for the validation to trigger - cypress is way faster than users ;) - cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + it('Check if result type is correct', () => { + const packName = 'ResultType' + generateRandomStringName(1)[0]; - cy.getBySel(ADD_QUERY_BUTTON).click(); + cy.contains('Packs').click(); + cy.getBySel(ADD_PACK_HEADER_BUTTON).click(); + cy.get(formFieldInputSelector('name')).type(`${packName}{downArrow}{enter}`); - cy.contains('Attach next query'); - getIdFormField().type('Query2'); - inputQuery('select * from uptime;'); - cy.getBySel('timeout-input').clear().type('602'); + cy.getBySel(ADD_QUERY_BUTTON).click(); - cy.getBySel('resultsTypeField').click(); - cy.contains('Differential').click(); - cy.wait(500); // wait for the validation to trigger - cypress is way faster than users ;) - cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + cy.contains('Attach next query'); + getIdFormField().type('Query1'); + inputQuery('select * from uptime;'); + cy.getBySel('timeout-input').clear().type('601'); + cy.wait(500); // wait for the validation to trigger - cypress is way faster than users ;) + cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + + cy.getBySel(ADD_QUERY_BUTTON).click(); - cy.getBySel(ADD_QUERY_BUTTON).click(); + cy.contains('Attach next query'); + getIdFormField().type('Query2'); + inputQuery('select * from uptime;'); + cy.getBySel('timeout-input').clear().type('602'); - cy.contains('Attach next query'); - getIdFormField().type('Query3'); - inputQuery('select * from uptime;'); - cy.getBySel('timeout-input').clear().type('603'); - cy.getBySel('resultsTypeField').click(); - cy.contains('Differential (Ignore removals)').click(); - cy.wait(500); // wait for the validation to trigger - cypress is way faster than users ;) - cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + cy.getBySel('resultsTypeField').click(); + cy.contains('Differential').click(); + cy.wait(500); // wait for the validation to trigger - cypress is way faster than users ;) + cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + + cy.getBySel(ADD_QUERY_BUTTON).click(); - cy.getBySel(SAVE_PACK_BUTTON).click(); + cy.contains('Attach next query'); + getIdFormField().type('Query3'); + inputQuery('select * from uptime;'); + cy.getBySel('timeout-input').clear().type('603'); + cy.getBySel('resultsTypeField').click(); + cy.contains('Differential (Ignore removals)').click(); + cy.wait(500); // wait for the validation to trigger - cypress is way faster than users ;) + cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); - cy.getBySel('tablePaginationPopoverButton').click(); - cy.getBySel('tablePagination-50-rows').click(); - cy.contains(packName).click(); + cy.getBySel(SAVE_PACK_BUTTON).click(); - cy.getBySel('edit-pack-button').click(); + cy.getBySel('tablePaginationPopoverButton').click(); + cy.getBySel('tablePagination-50-rows').click(); + cy.contains(packName).click(); - cy.contains('Query1'); - cy.contains('Query2'); - cy.contains('Query3'); - cy.get(customActionEditSavedQuerySelector('Query1')).click(); + cy.getBySel('edit-pack-button').click(); - cy.getBySel('resultsTypeField').contains('Snapshot').click(); - cy.contains('Differential').click(); + cy.contains('Query1'); + cy.contains('Query2'); + cy.contains('Query3'); + cy.get(customActionEditSavedQuerySelector('Query1')).click(); - cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + cy.getBySel('resultsTypeField').contains('Snapshot').click(); + cy.contains('Differential').click(); - cy.get(customActionEditSavedQuerySelector('Query2')).click(); + cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); - cy.getBySel('resultsTypeField').contains('Differential').click(); - cy.contains('Differential (Ignore removals)').click(); - cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + cy.get(customActionEditSavedQuerySelector('Query2')).click(); - cy.get(customActionEditSavedQuerySelector('Query3')).click(); + cy.getBySel('resultsTypeField').contains('Differential').click(); + cy.contains('Differential (Ignore removals)').click(); + cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); - cy.getBySel('resultsTypeField').contains('(Ignore removals)').click(); - cy.contains('Snapshot').click(); - cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + cy.get(customActionEditSavedQuerySelector('Query3')).click(); - cy.getBySel(POLICY_SELECT_COMBOBOX).type(`${DEFAULT_POLICY} {downArrow}{enter}`); + cy.getBySel('resultsTypeField').contains('(Ignore removals)').click(); + cy.contains('Snapshot').click(); + cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); - cy.getBySel(UPDATE_PACK_BUTTON).click(); - closeModalIfVisible(); + cy.getBySel(POLICY_SELECT_COMBOBOX).type(`${DEFAULT_POLICY} {downArrow}{enter}`); - cy.contains( - 'Create packs to organize sets of queries and to schedule queries for agent policies.' - ); - const queries = { - Query1: { - interval: 3600, - timeout: 601, - query: 'select * from uptime;', - removed: true, - snapshot: false, - }, - Query2: { - interval: 3600, - timeout: 602, - query: 'select * from uptime;', - removed: false, - snapshot: false, - }, - Query3: { - interval: 3600, - timeout: 603, - query: 'select * from uptime;', - }, - }; - request<{ items: PackagePolicy[] }>({ - url: '/internal/osquery/fleet_wrapper/package_policies', - headers: { - 'Elastic-Api-Version': API_VERSIONS.internal.v1, - }, - }).then((response) => { - const item = response.body.items.find( - (policy: PackagePolicy) => policy.name === `Policy for ${DEFAULT_POLICY}` - ); + cy.getBySel(UPDATE_PACK_BUTTON).click(); + closeModalIfVisible(); - expect(item?.inputs[0].config?.osquery.value.packs[packName].queries).to.deep.equal( - queries + cy.contains( + 'Create packs to organize sets of queries and to schedule queries for agent policies.' ); + const queries = { + Query1: { + interval: 3600, + timeout: 601, + query: 'select * from uptime;', + removed: true, + snapshot: false, + }, + Query2: { + interval: 3600, + timeout: 602, + query: 'select * from uptime;', + removed: false, + snapshot: false, + }, + Query3: { + interval: 3600, + timeout: 603, + query: 'select * from uptime;', + }, + }; + request<{ items: PackagePolicy[] }>({ + url: '/internal/osquery/fleet_wrapper/package_policies', + headers: { + 'Elastic-Api-Version': API_VERSIONS.internal.v1, + }, + }).then((response) => { + const item = response.body.items.find( + (policy: PackagePolicy) => policy.name === `Policy for ${DEFAULT_POLICY}` + ); + + expect(item?.inputs[0].config?.osquery.value.packs[packName].queries).to.deep.equal( + queries + ); + }); }); }); - }); - describe('Check if pack is created', { tags: ['@ess', '@serverless'] }, () => { - let packId: string; - let packName: string; + describe('Check if pack is created', { tags: ['@ess', '@serverless'] }, () => { + let packId: string; + let packName: string; - beforeEach(() => { - interceptPackId((pack) => { - packId = pack; + beforeEach(() => { + interceptPackId((pack) => { + packId = pack; + }); + packName = 'Pack-name' + generateRandomStringName(1)[0]; }); - packName = 'Pack-name' + generateRandomStringName(1)[0]; - }); - - afterEach(() => { - cleanupPack(packId); - }); - it('should add a pack from a saved query', () => { - cy.contains('Packs').click(); - - cy.getBySel(ADD_PACK_HEADER_BUTTON).click(); - cy.get(formFieldInputSelector('name')).type(`${packName}{downArrow}{enter}`); - cy.get(formFieldInputSelector('description')).type(`Pack description{downArrow}{enter}`); - cy.getBySel(POLICY_SELECT_COMBOBOX).type(`${DEFAULT_POLICY} {downArrow}{enter}`); - cy.getBySel(ADD_QUERY_BUTTON).click(); - - cy.contains('Attach next query'); - cy.getBySel('globalLoadingIndicator').should('not.exist'); - cy.getBySel(LIVE_QUERY_EDITOR).should('exist'); - cy.getBySel(SAVED_QUERY_DROPDOWN_SELECT).type(`${savedQueryName}{downArrow}{enter}`); - cy.getBySel('osquery-interval-field').click().clear().type('5'); - cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); - - cy.get(TABLE_ROWS).contains(savedQueryName); - cy.getBySel(SAVE_PACK_BUTTON).click(); - closeModalIfVisible(); - cy.getBySel('tablePaginationPopoverButton').click(); - cy.getBySel('tablePagination-50-rows').click(); - cy.contains(packName); - cy.contains(`Successfully created "${packName}" pack`); - closeToastIfVisible(); - }); - }); + afterEach(() => { + cleanupPack(packId); + }); - describe('to click the edit button and edit pack', { tags: ['@ess', '@serverless'] }, () => { - let packId: string; - let packName: string; - let newQueryName: string; + it('should add a pack from a saved query', () => { + cy.contains('Packs').click(); - beforeEach(() => { - request<{ items: PackagePolicy[] }>({ - url: '/internal/osquery/fleet_wrapper/package_policies', - headers: { - 'Elastic-Api-Version': API_VERSIONS.internal.v1, - }, - }) - .then((response) => - loadPack({ - policy_ids: response.body.items[0].policy_ids, - queries: { - [savedQueryName]: { ecs_mapping: {}, interval: 3600, query: 'select * from uptime;' }, - }, - }) - ) - .then((pack) => { - packId = pack.saved_object_id; - packName = pack.name; - }); - newQueryName = 'new-query-name' + generateRandomStringName(1)[0]; - }); + cy.getBySel(ADD_PACK_HEADER_BUTTON).click(); + cy.get(formFieldInputSelector('name')).type(`${packName}{downArrow}{enter}`); + cy.get(formFieldInputSelector('description')).type(`Pack description{downArrow}{enter}`); + cy.getBySel(POLICY_SELECT_COMBOBOX).type(`${DEFAULT_POLICY} {downArrow}{enter}`); + cy.getBySel(ADD_QUERY_BUTTON).click(); - afterEach(() => { - cleanupPack(packId); - }); + cy.contains('Attach next query'); + cy.getBySel('globalLoadingIndicator').should('not.exist'); + cy.getBySel(LIVE_QUERY_EDITOR).should('exist'); + cy.getBySel(SAVED_QUERY_DROPDOWN_SELECT).type(`${savedQueryName}{downArrow}{enter}`); + cy.getBySel('osquery-interval-field').click().clear().type('5'); + cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); - it('', () => { - preparePack(packName); - cy.getBySel('edit-pack-button').click(); - - cy.contains(`Edit ${packName}`); - cy.getBySel(ADD_QUERY_BUTTON).click(); - - cy.contains('Attach next query'); - inputQuery('select * from uptime'); - cy.get(formFieldInputSelector('id')).type(`${savedQueryName}{downArrow}{enter}`); - - cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); - cy.contains('ID must be unique').should('exist'); - cy.get(formFieldInputSelector('id')).type(`${newQueryName}{downArrow}{enter}`); - cy.contains('ID must be unique').should('not.exist'); - cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); - cy.get(TABLE_ROWS).contains(newQueryName); - cy.getBySel(UPDATE_PACK_BUTTON).click(); - closeModalIfVisible(); - cy.contains(`Successfully updated "${packName}" pack`); - closeToastIfVisible(); + cy.get(TABLE_ROWS).contains(savedQueryName); + cy.getBySel(SAVE_PACK_BUTTON).click(); + closeModalIfVisible(); + cy.getBySel('tablePaginationPopoverButton').click(); + cy.getBySel('tablePagination-50-rows').click(); + cy.contains(packName); + cy.contains(`Successfully created "${packName}" pack`); + closeToastIfVisible(); + }); }); - }); - describe( - 'should trigger validation when saved query is being chosen', - { tags: ['@ess', '@serverless'] }, - () => { + describe('to click the edit button and edit pack', { tags: ['@ess', '@serverless'] }, () => { let packId: string; let packName: string; + let newQueryName: string; - before(() => { + beforeEach(() => { request<{ items: PackagePolicy[] }>({ url: '/internal/osquery/fleet_wrapper/package_policies', headers: { @@ -363,95 +310,97 @@ describe('Packs - Create and Edit', { tags: ['@ess', '@serverless'] }, () => { packId = pack.saved_object_id; packName = pack.name; }); + newQueryName = 'new-query-name' + generateRandomStringName(1)[0]; }); - after(() => { + afterEach(() => { cleanupPack(packId); }); it('', () => { preparePack(packName); - cy.getBySel(EDIT_PACK_HEADER_BUTTON).click(); + cy.getBySel('edit-pack-button').click(); + cy.contains(`Edit ${packName}`); cy.getBySel(ADD_QUERY_BUTTON).click(); cy.contains('Attach next query'); - cy.getBySel('globalLoadingIndicator').should('not.exist'); - cy.getBySel(LIVE_QUERY_EDITOR).should('exist'); - cy.contains('ID must be unique').should('not.exist'); - cy.getBySel(SAVED_QUERY_DROPDOWN_SELECT).type(`${savedQueryName}{downArrow}{enter}`); - cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + inputQuery('select * from uptime'); + cy.get(formFieldInputSelector('id')).type(`${savedQueryName}{downArrow}{enter}`); + cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); cy.contains('ID must be unique').should('exist'); - cy.getBySel(FLYOUT_SAVED_QUERY_CANCEL_BUTTON).click(); + cy.get(formFieldInputSelector('id')).type(`${newQueryName}{downArrow}{enter}`); + cy.contains('ID must be unique').should('not.exist'); + cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + cy.get(TABLE_ROWS).contains(newQueryName); + cy.getBySel(UPDATE_PACK_BUTTON).click(); + closeModalIfVisible(); + cy.contains(`Successfully updated "${packName}" pack`); + closeToastIfVisible(); }); - } - ); - - describe('should open lens in new tab', { tags: ['@ess', '@brokenInServerless'] }, () => { - let packId: string; - let packName: string; + }); - beforeEach(() => { - request<{ items: PackagePolicy[] }>({ - url: '/internal/osquery/fleet_wrapper/package_policies', - headers: { - 'Elastic-Api-Version': API_VERSIONS.internal.v1, - }, - }) - .then((response) => - loadPack({ - policy_ids: response.body.items[0].policy_ids, - queries: { - [savedQueryName]: { - ecs_mapping: {}, - interval: 3600, - query: 'select * from uptime;', - }, + describe( + 'should trigger validation when saved query is being chosen', + { tags: ['@ess', '@serverless'] }, + () => { + let packId: string; + let packName: string; + + before(() => { + request<{ items: PackagePolicy[] }>({ + url: '/internal/osquery/fleet_wrapper/package_policies', + headers: { + 'Elastic-Api-Version': API_VERSIONS.internal.v1, }, }) - ) - .then((pack) => { - packId = pack.saved_object_id; - packName = pack.name; + .then((response) => + loadPack({ + policy_ids: response.body.items[0].policy_ids, + queries: { + [savedQueryName]: { + ecs_mapping: {}, + interval: 3600, + query: 'select * from uptime;', + }, + }, + }) + ) + .then((pack) => { + packId = pack.saved_object_id; + packName = pack.name; + }); }); - }); - afterEach(() => { - cleanupPack(packId); - }); + after(() => { + cleanupPack(packId); + }); - it('', { tags: ['@ess', '@brokenInServerless'] }, () => { - let lensUrl = ''; - cy.window().then((win) => { - cy.stub(win, 'open') - .as('windowOpen') - .callsFake((url) => { - lensUrl = url; - }); - }); - preparePack(packName); - cy.getBySel('docsLoading').should('exist'); - cy.getBySel('docsLoading').should('not.exist'); - cy.get(`[aria-label="View in Lens"]`).eq(0).click(); - cy.window() - .its('open') - .then(() => { - cy.visit(lensUrl); + it('', () => { + preparePack(packName); + cy.getBySel(EDIT_PACK_HEADER_BUTTON).click(); + + cy.getBySel(ADD_QUERY_BUTTON).click(); + + cy.contains('Attach next query'); + cy.getBySel('globalLoadingIndicator').should('not.exist'); + cy.getBySel(LIVE_QUERY_EDITOR).should('exist'); + cy.contains('ID must be unique').should('not.exist'); + cy.getBySel(SAVED_QUERY_DROPDOWN_SELECT).type(`${savedQueryName}{downArrow}{enter}`); + cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + + cy.contains('ID must be unique').should('exist'); + cy.getBySel(FLYOUT_SAVED_QUERY_CANCEL_BUTTON).click(); }); - cy.getBySel('lnsWorkspace').should('exist'); - cy.getBySel('breadcrumbs').contains(`Action pack_${packName}_${savedQueryName}`); - }); - }); + } + ); - describe.skip( - 'should open discover in new tab', - { tags: ['@ess', '@brokenInServerless'] }, - () => { + describe('should open lens in new tab', { tags: ['@ess', '@brokenInServerless'] }, () => { let packId: string; let packName: string; - before(() => { + beforeEach(() => { request<{ items: PackagePolicy[] }>({ url: '/internal/osquery/fleet_wrapper/package_policies', headers: { @@ -476,176 +425,190 @@ describe('Packs - Create and Edit', { tags: ['@ess', '@serverless'] }, () => { }); }); - after(() => { + afterEach(() => { cleanupPack(packId); }); - it('', () => { + it('', { tags: ['@ess', '@brokenInServerless'] }, () => { + let lensUrl = ''; + cy.window().then((win) => { + cy.stub(win, 'open') + .as('windowOpen') + .callsFake((url) => { + lensUrl = url; + }); + }); preparePack(packName); - cy.get(customActionRunSavedQuerySelector(savedQueryName)) - .should('exist') - .within(() => { - cy.get('a') - .should('have.attr', 'href') - .then(($href) => { - // @ts-expect-error-next-line href string - check types - cy.visit($href); - cy.getBySel('breadcrumbs').contains('Discover').should('exist'); - cy.contains(`action_id: pack_${PACK_NAME}_${savedQueryName}`); - cy.getBySel('superDatePickerToggleQuickMenuButton').click(); - cy.getBySel('superDatePickerCommonlyUsed_Today').click(); - cy.getBySel('discoverDocTable', { timeout: 60000 }).contains( - `pack_${PACK_NAME}_${savedQueryName}` - ); - }); + cy.getBySel('docsLoading').should('exist'); + cy.getBySel('docsLoading').should('not.exist'); + cy.get(`[aria-label="View in Lens"]`).eq(0).click(); + cy.window() + .its('open') + .then(() => { + cy.visit(lensUrl); }); + cy.getBySel('lnsWorkspace').should('exist'); + cy.getBySel('breadcrumbs').contains(`Action pack_${packName}_${savedQueryName}`); }); - } - ); - - describe('deactivate and activate pack', { tags: ['@ess', '@serverless'] }, () => { - let packId: string; - let packName: string; - - beforeEach(() => { - request<{ items: PackagePolicy[] }>({ - url: '/internal/osquery/fleet_wrapper/package_policies', - headers: { - 'Elastic-Api-Version': API_VERSIONS.internal.v1, - }, - }) - .then((response) => - loadPack({ - policy_ids: response.body.items[0].policy_ids, - queries: { - [savedQueryName]: { ecs_mapping: {}, interval: 3600, query: 'select * from uptime;' }, - }, - }) - ) - .then((pack) => { - packId = pack.saved_object_id; - packName = pack.name; - }); - }); - - afterEach(() => { - cleanupPack(packId); }); - it('', () => { - cy.contains('Packs').click(); - changePackActiveStatus(packName); - changePackActiveStatus(packName); - }); - }); - - describe('should verify that packs are triggered', { tags: ['@ess', '@serverless'] }, () => { - let packId: string; - let packName: string; - - beforeEach(() => { - request<{ items: PackagePolicy[] }>({ - url: '/internal/osquery/fleet_wrapper/package_policies', - headers: { - 'Elastic-Api-Version': API_VERSIONS.internal.v1, - }, - }) - .then((response) => - loadPack({ - policy_ids: response.body.items[0].policy_ids, - queries: { - [savedQueryName]: { ecs_mapping: {}, interval: 60, query: 'select * from uptime;' }, + describe.skip( + 'should open discover in new tab', + { tags: ['@ess', '@brokenInServerless'] }, + () => { + let packId: string; + let packName: string; + + before(() => { + request<{ items: PackagePolicy[] }>({ + url: '/internal/osquery/fleet_wrapper/package_policies', + headers: { + 'Elastic-Api-Version': API_VERSIONS.internal.v1, }, }) - ) - .then((pack) => { - packId = pack.saved_object_id; - packName = pack.name; + .then((response) => + loadPack({ + policy_ids: response.body.items[0].policy_ids, + queries: { + [savedQueryName]: { + ecs_mapping: {}, + interval: 3600, + query: 'select * from uptime;', + }, + }, + }) + ) + .then((pack) => { + packId = pack.saved_object_id; + packName = pack.name; + }); }); - }); - afterEach(() => { - cleanupPack(packId); - }); + after(() => { + cleanupPack(packId); + }); - it('', () => { - preparePack(packName); - cy.contains(`${packName} details`).should('exist'); + it('', () => { + preparePack(packName); + cy.get(customActionRunSavedQuerySelector(savedQueryName)) + .should('exist') + .within(() => { + cy.get('a') + .should('have.attr', 'href') + .then(($href) => { + // @ts-expect-error-next-line href string - check types + cy.visit($href); + cy.getBySel('breadcrumbs').contains('Discover').should('exist'); + cy.contains(`action_id: pack_${PACK_NAME}_${savedQueryName}`); + cy.getBySel('superDatePickerToggleQuickMenuButton').click(); + cy.getBySel('superDatePickerCommonlyUsed_Today').click(); + cy.getBySel('discoverDocTable', { timeout: 60000 }).contains( + `pack_${PACK_NAME}_${savedQueryName}` + ); + }); + }); + }); + } + ); - recurse( - () => { - cy.getBySel('docsLoading').should('exist'); - cy.getBySel('docsLoading').should('not.exist'); + describe('deactivate and activate pack', { tags: ['@ess', '@serverless'] }, () => { + let packId: string; + let packName: string; - return cy - .get('tbody .euiTableRow > td:nth-child(5) > .euiTableCellContent') - .invoke('text'); - }, - (response) => response !== '-', - { - timeout: 300000, - post: () => { - cy.reload(); + beforeEach(() => { + request<{ items: PackagePolicy[] }>({ + url: '/internal/osquery/fleet_wrapper/package_policies', + headers: { + 'Elastic-Api-Version': API_VERSIONS.internal.v1, }, - } - ); - cy.getBySel('last-results-date').should('exist'); - cy.getBySel('docs-count-badge').contains('1'); - cy.getBySel('agent-count-badge').contains('1'); - cy.getBySel('packResultsErrorsEmpty').should('have.length', 1); - }); - }); + }) + .then((response) => + loadPack({ + policy_ids: response.body.items[0].policy_ids, + queries: { + [savedQueryName]: { + ecs_mapping: {}, + interval: 3600, + query: 'select * from uptime;', + }, + }, + }) + ) + .then((pack) => { + packId = pack.saved_object_id; + packName = pack.name; + }); + }); - describe('delete all queries in the pack', { tags: ['@ess', '@serverless'] }, () => { - let packId: string; - let packName: string; + afterEach(() => { + cleanupPack(packId); + }); - beforeEach(() => { - request<{ items: PackagePolicy[] }>({ - url: '/internal/osquery/fleet_wrapper/package_policies', - headers: { - 'Elastic-Api-Version': API_VERSIONS.internal.v1, - }, - }) - .then((response) => - loadPack({ - policy_ids: response.body.items[0].policy_ids, - queries: { - [savedQueryName]: { ecs_mapping: {}, interval: 3600, query: 'select * from uptime;' }, - }, - }) - ) - .then((pack) => { - packId = pack.saved_object_id; - packName = pack.name; - }); + it('', () => { + cy.contains('Packs').click(); + changePackActiveStatus(packName); + changePackActiveStatus(packName); + }); }); - afterEach(() => { - cleanupPack(packId); - }); + describe('should verify that packs are triggered', { tags: ['@ess', '@serverless'] }, () => { + let packId: string; + let packName: string; - it('', () => { - preparePack(packName); - cy.contains(/^Edit$/).click(); + beforeEach(() => { + request<{ items: PackagePolicy[] }>({ + url: '/internal/osquery/fleet_wrapper/package_policies', + headers: { + 'Elastic-Api-Version': API_VERSIONS.internal.v1, + }, + }) + .then((response) => + loadPack({ + policy_ids: response.body.items[0].policy_ids, + queries: { + [savedQueryName]: { ecs_mapping: {}, interval: 60, query: 'select * from uptime;' }, + }, + }) + ) + .then((pack) => { + packId = pack.saved_object_id; + packName = pack.name; + }); + }); - cy.getBySel('checkboxSelectAll').click(); + afterEach(() => { + cleanupPack(packId); + }); - cy.contains(/^Delete \d+ quer(y|ies)/).click(); - cy.contains(/^Update pack$/).click(); + it('', () => { + preparePack(packName); + cy.contains(`${packName} details`).should('exist'); - closeModalIfVisible(); + recurse( + () => { + cy.getBySel('docsLoading').should('exist'); + cy.getBySel('docsLoading').should('not.exist'); - cy.get('a').contains(packName).click(); - cy.contains(`${packName} details`).should('exist'); - cy.contains(/^No items found/).should('exist'); + return cy + .get('tbody .euiTableRow > td:nth-child(5) > .euiTableCellContent') + .invoke('text'); + }, + (response) => response !== '-', + { + timeout: 300000, + post: () => { + cy.reload(); + }, + } + ); + cy.getBySel('last-results-date').should('exist'); + cy.getBySel('docs-count-badge').contains('1'); + cy.getBySel('agent-count-badge').contains('1'); + cy.getBySel('packResultsErrorsEmpty').should('have.length', 1); + }); }); - }); - describe( - 'enable changing saved queries and ecs_mappings', - { tags: ['@ess', '@serverless'] }, - () => { + describe('delete all queries in the pack', { tags: ['@ess', '@serverless'] }, () => { let packId: string; let packName: string; @@ -682,82 +645,140 @@ describe('Packs - Create and Edit', { tags: ['@ess', '@serverless'] }, () => { preparePack(packName); cy.contains(/^Edit$/).click(); - cy.getBySel(ADD_QUERY_BUTTON).click(); + cy.getBySel('checkboxSelectAll').click(); - cy.getBySel('globalLoadingIndicator').should('not.exist'); - cy.getBySel(LIVE_QUERY_EDITOR).should('exist'); - cy.getBySel(SAVED_QUERY_DROPDOWN_SELECT).type( - `${multipleMappingsSavedQueryName} {downArrow} {enter}` - ); - cy.contains('Custom key/value pairs').should('exist'); - cy.contains('Days of uptime').should('exist'); - cy.contains('List of keywords used to tag each').should('exist'); - cy.contains('Seconds of uptime').should('exist'); - cy.contains('Client network address.').should('exist'); - cy.contains('Total uptime seconds').should('exist'); - cy.getBySel('ECSMappingEditorForm').should('have.length', 4); - - cy.getBySel(SAVED_QUERY_DROPDOWN_SELECT).type( - `${nomappingSavedQueryName} {downArrow} {enter}` - ); - cy.contains('Custom key/value pairs').should('not.exist'); - cy.contains('Days of uptime').should('not.exist'); - cy.contains('List of keywords used to tag each').should('not.exist'); - cy.contains('Seconds of uptime').should('not.exist'); - cy.contains('Client network address.').should('not.exist'); - cy.contains('Total uptime seconds').should('not.exist'); - cy.getBySel('ECSMappingEditorForm').should('have.length', 1); - - cy.getBySel(SAVED_QUERY_DROPDOWN_SELECT).type( - `${oneMappingSavedQueryName} {downArrow} {enter}` - ); - cy.contains('Name of the continent').should('exist'); - cy.contains('Seconds of uptime').should('exist'); - cy.getBySel('ECSMappingEditorForm').should('have.length', 2); + cy.contains(/^Delete \d+ quer(y|ies)/).click(); + cy.contains(/^Update pack$/).click(); - cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); - cy.get(customActionEditSavedQuerySelector(oneMappingSavedQueryName)).click(); + closeModalIfVisible(); - cy.contains('Name of the continent').should('exist'); - cy.contains('Seconds of uptime').should('exist'); - cy.getBySel('timeout-input').should('have.value', '607'); + cy.get('a').contains(packName).click(); + cy.contains(`${packName} details`).should('exist'); + cy.contains(/^No items found/).should('exist'); }); - } - ); - - describe('to click delete button', { tags: ['@ess', '@serverless'] }, () => { - let packName: string; - let packId: string; + }); - beforeEach(() => { - request<{ items: PackagePolicy[] }>({ - url: '/internal/osquery/fleet_wrapper/package_policies', - headers: { - 'Elastic-Api-Version': API_VERSIONS.internal.v1, - }, - }) - .then((response) => - loadPack({ - policy_ids: response.body.items[0].policy_ids, - queries: { - [savedQueryName]: { ecs_mapping: {}, interval: 3600, query: 'select * from uptime;' }, + describe( + 'enable changing saved queries and ecs_mappings', + { tags: ['@ess', '@serverless'] }, + () => { + let packId: string; + let packName: string; + + beforeEach(() => { + request<{ items: PackagePolicy[] }>({ + url: '/internal/osquery/fleet_wrapper/package_policies', + headers: { + 'Elastic-Api-Version': API_VERSIONS.internal.v1, }, }) - ) - .then((pack) => { - packName = pack.name; - packId = pack.saved_object_id; + .then((response) => + loadPack({ + policy_ids: response.body.items[0].policy_ids, + queries: { + [savedQueryName]: { + ecs_mapping: {}, + interval: 3600, + query: 'select * from uptime;', + }, + }, + }) + ) + .then((pack) => { + packId = pack.saved_object_id; + packName = pack.name; + }); }); - }); - afterEach(() => { - cleanupPack(packId); - }); - it('', { tags: ['@ess', '@serverless'] }, () => { - preparePack(packName); + afterEach(() => { + cleanupPack(packId); + }); - cy.getBySel(EDIT_PACK_HEADER_BUTTON).click(); - deleteAndConfirm('pack'); + it('', () => { + preparePack(packName); + cy.contains(/^Edit$/).click(); + + cy.getBySel(ADD_QUERY_BUTTON).click(); + + cy.getBySel('globalLoadingIndicator').should('not.exist'); + cy.getBySel(LIVE_QUERY_EDITOR).should('exist'); + cy.getBySel(SAVED_QUERY_DROPDOWN_SELECT).type( + `${multipleMappingsSavedQueryName} {downArrow} {enter}` + ); + cy.contains('Custom key/value pairs').should('exist'); + cy.contains('Days of uptime').should('exist'); + cy.contains('List of keywords used to tag each').should('exist'); + cy.contains('Seconds of uptime').should('exist'); + cy.contains('Client network address.').should('exist'); + cy.contains('Total uptime seconds').should('exist'); + cy.getBySel('ECSMappingEditorForm').should('have.length', 4); + + cy.getBySel(SAVED_QUERY_DROPDOWN_SELECT).type( + `${nomappingSavedQueryName} {downArrow} {enter}` + ); + cy.contains('Custom key/value pairs').should('not.exist'); + cy.contains('Days of uptime').should('not.exist'); + cy.contains('List of keywords used to tag each').should('not.exist'); + cy.contains('Seconds of uptime').should('not.exist'); + cy.contains('Client network address.').should('not.exist'); + cy.contains('Total uptime seconds').should('not.exist'); + cy.getBySel('ECSMappingEditorForm').should('have.length', 1); + + cy.getBySel(SAVED_QUERY_DROPDOWN_SELECT).type( + `${oneMappingSavedQueryName} {downArrow} {enter}` + ); + cy.contains('Name of the continent').should('exist'); + cy.contains('Seconds of uptime').should('exist'); + cy.getBySel('ECSMappingEditorForm').should('have.length', 2); + + cy.getBySel(FLYOUT_SAVED_QUERY_SAVE_BUTTON).click(); + cy.get(customActionEditSavedQuerySelector(oneMappingSavedQueryName)).click(); + + cy.contains('Name of the continent').should('exist'); + cy.contains('Seconds of uptime').should('exist'); + cy.getBySel('timeout-input').should('have.value', '607'); + }); + } + ); + + describe('to click delete button', { tags: ['@ess', '@serverless'] }, () => { + let packName: string; + let packId: string; + + beforeEach(() => { + request<{ items: PackagePolicy[] }>({ + url: '/internal/osquery/fleet_wrapper/package_policies', + headers: { + 'Elastic-Api-Version': API_VERSIONS.internal.v1, + }, + }) + .then((response) => + loadPack({ + policy_ids: response.body.items[0].policy_ids, + queries: { + [savedQueryName]: { + ecs_mapping: {}, + interval: 3600, + query: 'select * from uptime;', + }, + }, + }) + ) + .then((pack) => { + packName = pack.name; + packId = pack.saved_object_id; + }); + }); + afterEach(() => { + cleanupPack(packId); + }); + + it('', { tags: ['@ess', '@serverless'] }, () => { + preparePack(packName); + + cy.getBySel(EDIT_PACK_HEADER_BUTTON).click(); + deleteAndConfirm('pack'); + }); }); - }); -}); + } +); From bdd5cfc3491a8a145bfcfd682486fe64cd696e05 Mon Sep 17 00:00:00 2001 From: Lukas Olson Date: Fri, 6 Dec 2024 07:23:46 -0700 Subject: [PATCH 123/141] Remove bsearch endpoint (#197150) --- src/plugins/data/public/plugin.ts | 2 - .../search_interceptor.test.ts | 549 +++++++++++------ .../search_interceptor/search_interceptor.ts | 188 +++--- .../data/public/search/search_service.ts | 11 +- .../data/server/search/routes/bsearch.ts | 67 -- .../data/server/search/search_service.ts | 7 - src/plugins/data/tsconfig.json | 1 - test/api_integration/apis/search/bsearch.ts | 577 ------------------ test/api_integration/apis/search/index.ts | 1 - test/tsconfig.json | 1 - x-pack/test/common/services/search_secure.ts | 3 +- .../test_suites/common/search_oss/bsearch.ts | 247 -------- .../test_suites/common/search_oss/index.ts | 1 - x-pack/test_serverless/tsconfig.json | 1 - 14 files changed, 433 insertions(+), 1223 deletions(-) delete mode 100644 src/plugins/data/server/search/routes/bsearch.ts delete mode 100644 test/api_integration/apis/search/bsearch.ts delete mode 100644 x-pack/test_serverless/api_integration/test_suites/common/search_oss/bsearch.ts diff --git a/src/plugins/data/public/plugin.ts b/src/plugins/data/public/plugin.ts index 5dceb2cacac9d..c31031a5c657e 100644 --- a/src/plugins/data/public/plugin.ts +++ b/src/plugins/data/public/plugin.ts @@ -71,7 +71,6 @@ export class DataPublicPlugin public setup( core: CoreSetup, { - bfetch, expressions, uiActions, usageCollection, @@ -85,7 +84,6 @@ export class DataPublicPlugin setTheme(core.theme); const searchService = this.searchService.setup(core, { - bfetch, usageCollection, expressions, management, diff --git a/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts b/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts index 9352b1cc4a230..4a1f2be310361 100644 --- a/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts +++ b/src/plugins/data/public/search/search_interceptor/search_interceptor.test.ts @@ -8,15 +8,17 @@ */ import type { MockedKeys } from '@kbn/utility-types-jest'; -import { CoreSetup, CoreStart } from '@kbn/core/public'; +import { CoreSetup, CoreStart, HttpFetchOptions, HttpHandler } from '@kbn/core/public'; import { coreMock } from '@kbn/core/public/mocks'; -import { IEsSearchRequest } from '@kbn/search-types'; +import { + IEsSearchRequest, + IKibanaSearchRequest, + type IKibanaSearchResponse, +} from '@kbn/search-types'; import { SearchInterceptor } from './search_interceptor'; import { AbortError } from '@kbn/kibana-utils-plugin/public'; import { EsError, type IEsError } from '@kbn/search-errors'; import { ISessionService, SearchSessionState } from '..'; -import { bfetchPluginMock } from '@kbn/bfetch-plugin/public/mocks'; -import { BfetchPublicSetup } from '@kbn/bfetch-plugin/public'; import * as searchPhaseException from '../../../common/search/test_data/search_phase_execution_exception.json'; import * as resourceNotFoundException from '../../../common/search/test_data/resource_not_found_exception.json'; @@ -45,8 +47,6 @@ import { SearchSessionIncompleteWarning } from './search_session_incomplete_warn import { getMockSearchConfig } from '../../../config.mock'; let searchInterceptor: SearchInterceptor; -let bfetchSetup: jest.Mocked; -let fetchMock: jest.Mock; const flushPromises = () => new Promise((resolve) => jest.requireActual('timers').setImmediate(resolve)); @@ -63,10 +63,11 @@ const next = jest.fn(); const error = jest.fn(); const complete = jest.fn(); -function mockFetchImplementation(responses: any[]) { +function getHttpMock(responses: any[]) { let i = 0; - fetchMock.mockImplementation((r, abortSignal) => { - if (!r.request.id) i = 0; + return ((path: string, options?: HttpFetchOptions) => { + const request = JSON.parse(options?.body as string) as IKibanaSearchRequest; + if (!request.id) i = 0; const { time = 0, value = {}, isError = false } = responses[i++]; value.meta = { size: 10, @@ -76,14 +77,46 @@ function mockFetchImplementation(responses: any[]) { return (isError ? reject : resolve)(value); }, time); - if (abortSignal) { - if (abortSignal.aborted) reject(new AbortError()); - abortSignal.addEventListener('abort', () => { + if (options?.signal) { + if (options?.signal.aborted) reject(new AbortError()); + options?.signal.addEventListener('abort', () => { reject(new AbortError()); }); } }); - }); + }) as HttpHandler; +} + +function getMockSearchResponse( + { id, isPartial, isRunning, rawResponse }: IKibanaSearchResponse = { + rawResponse: {}, + } +) { + const body = { + ...(id ? { id } : {}), + is_partial: isPartial ?? false, + is_running: isRunning ?? false, + response: { + took: 2, + timed_out: false, + _shards: { + total: 12, + successful: 12, + skipped: 11, + failed: 0, + }, + hits: { + total: { + value: 61, + relation: 'eq', + }, + max_score: null, + hits: [], + }, + ...rawResponse, + }, + }; + return { body }; } describe('SearchInterceptor', () => { @@ -102,7 +135,7 @@ describe('SearchInterceptor', () => { state$: sessionState$, }; - fetchMock = jest.fn(); + mockCoreSetup.http.post = jest.fn(); mockCoreSetup.uiSettings.get.mockImplementation((name: string) => { switch (name) { case UI_SETTINGS.SEARCH_TIMEOUT: @@ -117,17 +150,11 @@ describe('SearchInterceptor', () => { complete.mockClear(); jest.clearAllTimers(); - const bfetchMock = bfetchPluginMock.createSetupContract(); - bfetchMock.batchedFunction.mockReturnValue(fetchMock); - const inspectorServiceMock = { open: () => {}, } as unknown as InspectorStart; - bfetchSetup = bfetchPluginMock.createSetupContract(); - bfetchSetup.batchedFunction.mockReturnValue(fetchMock); searchInterceptor = new SearchInterceptor({ - bfetch: bfetchSetup, toasts: mockCoreSetup.notifications.toasts, startServices: new Promise((resolve) => { resolve([ @@ -184,30 +211,48 @@ describe('SearchInterceptor', () => { describe('search', () => { test('Observable should resolve if fetch is successful', async () => { - const mockResponse: any = { rawResponse: {} }; - fetchMock.mockResolvedValueOnce(mockResponse); + mockCoreSetup.http.post.mockResolvedValueOnce(getMockSearchResponse()); const mockRequest: IEsSearchRequest = { params: {}, }; const response = searchInterceptor.search(mockRequest); - await expect(response.toPromise()).resolves.toBe(mockResponse); + await expect(response.toPromise()).resolves.toMatchInlineSnapshot(` + Object { + "id": undefined, + "isPartial": false, + "isRestored": false, + "isRunning": false, + "loaded": 12, + "rawResponse": Object { + "_shards": Object { + "failed": 0, + "skipped": 11, + "successful": 12, + "total": 12, + }, + "hits": Object { + "hits": Array [], + "max_score": null, + "total": 61, + }, + "timed_out": false, + "took": 2, + }, + "requestParams": Object {}, + "total": 12, + "warning": undefined, + } + `); }); test('should resolve immediately if first call returns full result', async () => { const responses = [ { time: 10, - value: { - isPartial: false, - isRunning: false, - id: 1, - rawResponse: { - took: 1, - }, - }, + value: getMockSearchResponse(), }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); const response = searchInterceptor.search({}); response.subscribe({ next, error, complete }); @@ -215,7 +260,33 @@ describe('SearchInterceptor', () => { await timeTravel(10); expect(next).toHaveBeenCalled(); - expect(next.mock.calls[0][0]).toStrictEqual(responses[0].value); + expect(next.mock.calls[0][0]).toMatchInlineSnapshot(` + Object { + "id": undefined, + "isPartial": false, + "isRestored": false, + "isRunning": false, + "loaded": 12, + "rawResponse": Object { + "_shards": Object { + "failed": 0, + "skipped": 11, + "successful": 12, + "total": 12, + }, + "hits": Object { + "hits": Array [], + "max_score": null, + "total": 61, + }, + "timed_out": false, + "took": 2, + }, + "requestParams": Object {}, + "total": 12, + "warning": undefined, + } + `); expect(complete).toHaveBeenCalled(); expect(error).not.toHaveBeenCalled(); }); @@ -224,29 +295,29 @@ describe('SearchInterceptor', () => { const responses = [ { time: 10, - value: { + value: getMockSearchResponse({ isPartial: true, isRunning: true, - id: 1, + id: '1', rawResponse: { took: 1, }, - }, + }), }, { time: 20, - value: { + value: getMockSearchResponse({ isPartial: false, isRunning: false, - id: 1, + id: '1', rawResponse: { took: 1, }, - }, + }), }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); const response = searchInterceptor.search({}, { pollInterval: 0 }); response.subscribe({ next, error, complete }); @@ -254,14 +325,66 @@ describe('SearchInterceptor', () => { await timeTravel(10); expect(next).toHaveBeenCalled(); - expect(next.mock.calls[0][0]).toStrictEqual(responses[0].value); + expect(next.mock.calls[0][0]).toMatchInlineSnapshot(` + Object { + "id": "1", + "isPartial": true, + "isRestored": false, + "isRunning": true, + "loaded": 12, + "rawResponse": Object { + "_shards": Object { + "failed": 0, + "skipped": 11, + "successful": 12, + "total": 12, + }, + "hits": Object { + "hits": Array [], + "max_score": null, + "total": 61, + }, + "timed_out": false, + "took": 1, + }, + "requestParams": Object {}, + "total": 12, + "warning": undefined, + } + `); expect(complete).not.toHaveBeenCalled(); expect(error).not.toHaveBeenCalled(); await timeTravel(20); expect(next).toHaveBeenCalledTimes(2); - expect(next.mock.calls[1][0]).toStrictEqual(responses[1].value); + expect(next.mock.calls[1][0]).toMatchInlineSnapshot(` + Object { + "id": "1", + "isPartial": false, + "isRestored": false, + "isRunning": false, + "loaded": 12, + "rawResponse": Object { + "_shards": Object { + "failed": 0, + "skipped": 11, + "successful": 12, + "total": 12, + }, + "hits": Object { + "hits": Array [], + "max_score": null, + "total": 61, + }, + "timed_out": false, + "took": 1, + }, + "requestParams": Object {}, + "total": 12, + "warning": undefined, + } + `); expect(complete).toHaveBeenCalled(); expect(error).not.toHaveBeenCalled(); }); @@ -270,15 +393,15 @@ describe('SearchInterceptor', () => { const responses = [ { time: 500, - value: { + value: getMockSearchResponse({ isPartial: false, isRunning: false, rawResponse: {}, - id: 1, - }, + id: '1', + }), }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); const abortController = new AbortController(); abortController.abort(); @@ -297,24 +420,24 @@ describe('SearchInterceptor', () => { const responses = [ { time: 10, - value: { + value: getMockSearchResponse({ isPartial: true, isRunning: true, rawResponse: {}, - id: 1, - }, + id: '1', + }), }, { time: 300, - value: { + value: getMockSearchResponse({ isPartial: false, isRunning: false, rawResponse: {}, - id: 1, - }, + id: '1', + }), }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); const abortController = new AbortController(); setTimeout(() => abortController.abort(), 250); @@ -335,7 +458,7 @@ describe('SearchInterceptor', () => { expect(error).toHaveBeenCalled(); expect(error.mock.calls[0][0]).toBeInstanceOf(AbortError); - expect(fetchMock).toHaveBeenCalledTimes(2); + expect(mockCoreSetup.http.post).toHaveBeenCalledTimes(2); expect(mockCoreSetup.http.delete).toHaveBeenCalledTimes(1); }); @@ -343,32 +466,34 @@ describe('SearchInterceptor', () => { const responses = [ { time: 2000, - value: { + value: getMockSearchResponse({ isPartial: false, isRunning: false, rawResponse: {}, - id: 1, - }, + id: '1', + }), }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); const response = searchInterceptor.search({}, { pollInterval: 0 }); response.subscribe({ next, error }); await timeTravel(1000); - expect(fetchMock).toHaveBeenCalled(); + expect(mockCoreSetup.http.post).toHaveBeenCalled(); expect(mockCoreSetup.http.delete).not.toHaveBeenCalled(); }); test('should DELETE a running async search on async timeout after first response', async () => { - fetchMock.mockResolvedValue({ - isPartial: true, - isRunning: true, - rawResponse: {}, - id: 1, - }); + mockCoreSetup.http.post.mockResolvedValue( + getMockSearchResponse({ + isPartial: true, + isRunning: true, + rawResponse: {}, + id: '1', + }) + ); const response = searchInterceptor.search({}, { pollInterval: 0 }); response.subscribe({ next, error }); @@ -377,7 +502,7 @@ describe('SearchInterceptor', () => { expect(next).toHaveBeenCalled(); expect(error).not.toHaveBeenCalled(); - expect(fetchMock).toHaveBeenCalled(); + expect(mockCoreSetup.http.post).toHaveBeenCalled(); expect(mockCoreSetup.http.delete).not.toHaveBeenCalled(); // Long enough to reach the timeout @@ -387,14 +512,16 @@ describe('SearchInterceptor', () => { }); test('should return the last response on async timeout', async () => { - fetchMock.mockResolvedValue({ - isPartial: true, - isRunning: true, - rawResponse: { - foo: 'bar', - }, - id: 1, - }); + mockCoreSetup.http.post.mockResolvedValue( + getMockSearchResponse({ + isPartial: true, + isRunning: true, + rawResponse: { + foo: 'bar', + }, + id: '1', + }) + ); const response = searchInterceptor.search({}, { pollInterval: 0 }); response.subscribe({ next, error }); @@ -403,7 +530,7 @@ describe('SearchInterceptor', () => { expect(next).toHaveBeenCalled(); expect(error).not.toHaveBeenCalled(); - expect(fetchMock).toHaveBeenCalled(); + expect(mockCoreSetup.http.post).toHaveBeenCalled(); expect(mockCoreSetup.http.delete).not.toHaveBeenCalled(); // Long enough to reach the timeout but not long enough to reach the next response @@ -413,12 +540,30 @@ describe('SearchInterceptor', () => { expect(next.mock.calls[1]).toMatchInlineSnapshot(` Array [ Object { - "id": 1, + "id": "1", "isPartial": true, + "isRestored": false, "isRunning": true, + "loaded": 12, "rawResponse": Object { + "_shards": Object { + "failed": 0, + "skipped": 11, + "successful": 12, + "total": 12, + }, "foo": "bar", + "hits": Object { + "hits": Array [], + "max_score": null, + "total": 61, + }, + "timed_out": false, + "took": 2, }, + "requestParams": Object {}, + "total": 12, + "warning": undefined, }, ] `); @@ -428,24 +573,24 @@ describe('SearchInterceptor', () => { const responses = [ { time: 10, - value: { + value: getMockSearchResponse({ isPartial: true, isRunning: true, rawResponse: {}, - id: 1, - }, + id: '1', + }), }, { time: 10, value: { statusCode: 500, message: 'oh no', - id: 1, + id: '1', }, isError: true, }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); const response = searchInterceptor.search({}, { pollInterval: 0 }); response.subscribe({ next, error }); @@ -454,7 +599,7 @@ describe('SearchInterceptor', () => { expect(next).toHaveBeenCalled(); expect(error).not.toHaveBeenCalled(); - expect(fetchMock).toHaveBeenCalled(); + expect(mockCoreSetup.http.post).toHaveBeenCalled(); expect(mockCoreSetup.http.delete).not.toHaveBeenCalled(); // Long enough to reach the timeout but not long enough to reach the next response @@ -463,7 +608,7 @@ describe('SearchInterceptor', () => { expect(error).toHaveBeenCalled(); expect(error.mock.calls[0][0]).toBeInstanceOf(Error); expect((error.mock.calls[0][0] as Error).message).toBe('oh no'); - expect(fetchMock).toHaveBeenCalledTimes(2); + expect(mockCoreSetup.http.post).toHaveBeenCalledTimes(2); expect(mockCoreSetup.http.delete).toHaveBeenCalledTimes(1); }); @@ -472,24 +617,24 @@ describe('SearchInterceptor', () => { const responses = [ { time: 10, - value: { + value: getMockSearchResponse({ isPartial: true, isRunning: true, rawResponse: {}, - id: 1, - }, + id: '1', + }), }, { time: 10, value: { statusCode: 500, message: 'oh no', - id: 1, + id: '1', }, isError: true, }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); const response = searchInterceptor.search({}, { pollInterval: 0 }); response.subscribe({ next, error }); @@ -498,7 +643,7 @@ describe('SearchInterceptor', () => { expect(next).toHaveBeenCalled(); expect(error).not.toHaveBeenCalled(); - expect(fetchMock).toHaveBeenCalled(); + expect(mockCoreSetup.http.post).toHaveBeenCalled(); expect(mockCoreSetup.http.delete).not.toHaveBeenCalled(); // Long enough to reach the timeout but not long enough to reach the next response @@ -507,7 +652,7 @@ describe('SearchInterceptor', () => { expect(error).toHaveBeenCalled(); expect(error.mock.calls[0][0]).toBeInstanceOf(Error); expect((error.mock.calls[0][0] as Error).message).toBe('oh no'); - expect(fetchMock).toHaveBeenCalledTimes(2); + expect(mockCoreSetup.http.post).toHaveBeenCalledTimes(2); expect(mockCoreSetup.http.delete).toHaveBeenCalledTimes(1); }); @@ -517,24 +662,24 @@ describe('SearchInterceptor', () => { const responses = [ { time: 10, - value: { + value: getMockSearchResponse({ isPartial: true, isRunning: true, rawResponse: {}, - id: 1, - }, + id: '1', + }), }, { time: 300, - value: { + value: getMockSearchResponse({ isPartial: false, isRunning: false, rawResponse: {}, - id: 1, - }, + id: '1', + }), }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); const abortController = new AbortController(); setTimeout(() => abortController.abort(), 250); @@ -557,7 +702,7 @@ describe('SearchInterceptor', () => { expect(error).toHaveBeenCalled(); expect(error.mock.calls[0][0]).toBeInstanceOf(AbortError); - expect(fetchMock).toHaveBeenCalledTimes(2); + expect(mockCoreSetup.http.post).toHaveBeenCalledTimes(2); expect(mockCoreSetup.http.delete).not.toHaveBeenCalled(); }); @@ -581,7 +726,7 @@ describe('SearchInterceptor', () => { ); sessionServiceMock.isRestore.mockReturnValue(!!opts?.isRestore); sessionServiceMock.getSessionId.mockImplementation(() => opts?.sessionId); - fetchMock.mockResolvedValue({ result: 200 }); + mockCoreSetup.http.post.mockResolvedValue({ result: 200 }); }; const mockRequest: IEsSearchRequest = { @@ -591,7 +736,7 @@ describe('SearchInterceptor', () => { afterEach(() => { const sessionServiceMock = sessionService as jest.Mocked; sessionServiceMock.getSearchOptions.mockReset(); - fetchMock.mockReset(); + mockCoreSetup.http.post.mockReset(); }); test('gets session search options from session service', async () => { @@ -606,15 +751,18 @@ describe('SearchInterceptor', () => { .search(mockRequest, { sessionId }) .toPromise() .catch(() => {}); - expect(fetchMock.mock.calls[0][0]).toEqual( + const [path, options] = mockCoreSetup.http.post.mock.calls[0] as unknown as [ + path: string, + options: HttpFetchOptions + ]; + const body = JSON.parse(options?.body as string); + expect(path).toEqual('/internal/search/ese'); + expect(body).toEqual( expect.objectContaining({ - options: { - sessionId, - isStored: true, - isRestore: true, - isSearchStored: false, - strategy: 'ese', - }, + sessionId, + isStored: true, + isRestore: true, + isSearchStored: false, }) ); @@ -631,7 +779,7 @@ describe('SearchInterceptor', () => { .search(mockRequest, { sessionId }) .toPromise() .catch(() => {}); - expect(fetchMock.mock.calls[0][0]).toEqual( + expect(mockCoreSetup.http.post.mock.calls[0][0]).toEqual( expect.not.objectContaining({ options: { sessionId }, }) @@ -656,14 +804,14 @@ describe('SearchInterceptor', () => { isPartial: false, isRunning: false, isRestored: true, - id: 1, + id: '1', rawResponse: { took: 1, }, }, }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); const response = searchInterceptor.search( {}, @@ -691,14 +839,14 @@ describe('SearchInterceptor', () => { isPartial: false, isRunning: false, isRestored: false, - id: 1, + id: '1', rawResponse: { took: 1, }, }, }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); const response = searchInterceptor.search( {}, @@ -723,18 +871,18 @@ describe('SearchInterceptor', () => { const responses = [ { time: 10, - value: { + value: getMockSearchResponse({ isPartial: false, isRunning: false, isRestored: false, - id: 1, + id: '1', rawResponse: { took: 1, }, - }, + }), }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); searchInterceptor .search( @@ -769,25 +917,25 @@ describe('SearchInterceptor', () => { const responses = [ { time: 10, - value: { + value: getMockSearchResponse({ isPartial: true, isRunning: true, rawResponse: {}, - id: 1, - }, + id: '1', + }), }, { time: 300, - value: { + value: getMockSearchResponse({ isPartial: false, isRunning: false, rawResponse: {}, - id: 1, - }, + id: '1', + }), }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); }); test('should track searches', async () => { @@ -886,39 +1034,39 @@ describe('SearchInterceptor', () => { const basicCompleteResponse = [ { time: 10, - value: { + value: getMockSearchResponse({ isPartial: false, isRunning: false, - id: 1, + id: '1', rawResponse: { took: 1, }, - }, + }), }, ]; const partialCompleteResponse = [ { time: 10, - value: { + value: getMockSearchResponse({ isPartial: true, isRunning: true, - id: 1, + id: '1', rawResponse: { took: 1, }, - }, + }), }, { time: 20, - value: { + value: getMockSearchResponse({ isPartial: false, isRunning: false, - id: 1, + id: '1', rawResponse: { took: 1, }, - }, + }), }, ]; @@ -930,17 +1078,17 @@ describe('SearchInterceptor', () => { }); test('should be disabled if there is no session', async () => { - mockFetchImplementation(basicCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(basicCompleteResponse)); searchInterceptor.search(basicReq, {}).subscribe({ next, error, complete }); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); searchInterceptor.search(basicReq, {}).subscribe({ next, error, complete }); - expect(fetchMock).toBeCalledTimes(2); + expect(mockCoreSetup.http.post).toBeCalledTimes(2); }); test('should fetch different requests in a single session', async () => { - mockFetchImplementation(basicCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(basicCompleteResponse)); const req2 = { params: { @@ -950,29 +1098,29 @@ describe('SearchInterceptor', () => { searchInterceptor.search(basicReq, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); searchInterceptor.search(req2, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(2); + expect(mockCoreSetup.http.post).toBeCalledTimes(2); }); test('should fetch the same request for two different sessions', async () => { - mockFetchImplementation(basicCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(basicCompleteResponse)); searchInterceptor.search(basicReq, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); searchInterceptor .search(basicReq, { sessionId: 'anotherSession' }) .subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(2); + expect(mockCoreSetup.http.post).toBeCalledTimes(2); }); test('should not track searches that come from cache', async () => { - mockFetchImplementation(partialCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(partialCompleteResponse)); sessionService.isCurrentSession.mockImplementation( (_sessionId) => _sessionId === sessionId ); @@ -1000,12 +1148,12 @@ describe('SearchInterceptor', () => { response2.subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); expect(sessionService.trackSearch).toBeCalledTimes(1); expect(completeSearch).not.toBeCalled(); await timeTravel(300); // Should be called only 2 times (once per partial response) - expect(fetchMock).toBeCalledTimes(2); + expect(mockCoreSetup.http.post).toBeCalledTimes(2); expect(sessionService.trackSearch).toBeCalledTimes(1); expect(completeSearch).toBeCalledTimes(1); @@ -1018,51 +1166,53 @@ describe('SearchInterceptor', () => { const responses = [ { time: 10, - value: { + value: getMockSearchResponse({ isPartial: true, isRunning: true, rawResponse: {}, - id: 1, - }, + id: '1', + }), }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); searchInterceptor.search(basicReq, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); searchInterceptor.search(basicReq, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); }); test('should not cache error responses', async () => { const responses = [ { time: 10, - value: { + value: getMockSearchResponse({ isPartial: true, isRunning: false, - id: 1, - }, + id: '1', + rawResponse: {}, + }), + isError: true, }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); searchInterceptor.search(basicReq, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); searchInterceptor.search(basicReq, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(2); + expect(mockCoreSetup.http.post).toBeCalledTimes(2); }); test('should ignore anything outside params when hashing', async () => { - mockFetchImplementation(basicCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(basicCompleteResponse)); const req = { something: 123, @@ -1080,34 +1230,39 @@ describe('SearchInterceptor', () => { searchInterceptor.search(req, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); searchInterceptor.search(req2, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); }); test('should deliver error to all replays', async () => { const responses = [ { time: 10, - value: {}, + value: { + statusCode: 500, + message: 'Aborted', + id: '1', + }, + isError: true, }, ]; - mockFetchImplementation(responses); + mockCoreSetup.http.post.mockImplementation(getHttpMock(responses)); searchInterceptor.search(basicReq, { sessionId }).subscribe({ next, error, complete }); searchInterceptor.search(basicReq, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); expect(error).toBeCalledTimes(2); expect(error.mock.calls[0][0].message).toEqual('Aborted'); expect(error.mock.calls[1][0].message).toEqual('Aborted'); }); test('should ignore preference when hashing', async () => { - mockFetchImplementation(basicCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(basicCompleteResponse)); const req = { params: { @@ -1125,27 +1280,27 @@ describe('SearchInterceptor', () => { searchInterceptor.search(req, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); searchInterceptor.search(req2, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); }); test('should return from cache for identical requests in the same session', async () => { - mockFetchImplementation(basicCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(basicCompleteResponse)); searchInterceptor.search(basicReq, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); searchInterceptor.search(basicReq, { sessionId }).subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); }); test('aborting a search that didnt get any response should retrigger search', async () => { - mockFetchImplementation(basicCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(basicCompleteResponse)); const abortController = new AbortController(); @@ -1159,7 +1314,7 @@ describe('SearchInterceptor', () => { // Time travel to make sure nothing appens await timeTravel(10); - expect(fetchMock).toBeCalledTimes(0); + expect(mockCoreSetup.http.post).toBeCalledTimes(0); expect(next).toBeCalledTimes(0); expect(error).toBeCalledTimes(1); expect(complete).toBeCalledTimes(0); @@ -1175,14 +1330,14 @@ describe('SearchInterceptor', () => { // Should search again await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); expect(next2).toBeCalledTimes(1); expect(error2).toBeCalledTimes(0); expect(complete2).toBeCalledTimes(1); }); test('aborting a running first search shouldnt clear cache', async () => { - mockFetchImplementation(partialCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(partialCompleteResponse)); sessionService.isCurrentSession.mockImplementation( (_sessionId) => _sessionId === sessionId ); @@ -1214,7 +1369,7 @@ describe('SearchInterceptor', () => { response.subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); expect(next).toBeCalledTimes(1); expect(error).toBeCalledTimes(0); expect(complete).toBeCalledTimes(0); @@ -1245,11 +1400,11 @@ describe('SearchInterceptor', () => { expect(complete2).toBeCalledTimes(1); // Should be called only 2 times (once per partial response) - expect(fetchMock).toBeCalledTimes(2); + expect(mockCoreSetup.http.post).toBeCalledTimes(2); }); test('aborting a running second search shouldnt clear cache', async () => { - mockFetchImplementation(partialCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(partialCompleteResponse)); sessionService.isCurrentSession.mockImplementation( (_sessionId) => _sessionId === sessionId ); @@ -1277,7 +1432,7 @@ describe('SearchInterceptor', () => { response.subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); expect(next).toBeCalledTimes(1); expect(error).toBeCalledTimes(0); expect(complete).toBeCalledTimes(0); @@ -1310,11 +1465,11 @@ describe('SearchInterceptor', () => { expect(complete2).toBeCalledTimes(0); // Should be called only 2 times (once per partial response) - expect(fetchMock).toBeCalledTimes(2); + expect(mockCoreSetup.http.post).toBeCalledTimes(2); }); test('aborting both requests should cancel underlaying search only once', async () => { - mockFetchImplementation(partialCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(partialCompleteResponse)); sessionService.isCurrentSession.mockImplementation( (_sessionId) => _sessionId === sessionId ); @@ -1351,7 +1506,7 @@ describe('SearchInterceptor', () => { }); test('aborting both searches should stop searching and clear cache', async () => { - mockFetchImplementation(partialCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(partialCompleteResponse)); sessionService.isCurrentSession.mockImplementation( (_sessionId) => _sessionId === sessionId ); @@ -1382,7 +1537,7 @@ describe('SearchInterceptor', () => { }); response.subscribe({ next, error, complete }); await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); const response2 = searchInterceptor.search(req, { pollInterval: 1, @@ -1391,7 +1546,7 @@ describe('SearchInterceptor', () => { }); response2.subscribe({ next, error, complete }); await timeTravel(0); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); abortController.abort(); @@ -1404,11 +1559,11 @@ describe('SearchInterceptor', () => { expect(error.mock.calls[1][0]).toBeInstanceOf(AbortError); // Should be called only 1 times (one partial response) - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); // Clear mock and research - fetchMock.mockReset(); - mockFetchImplementation(partialCompleteResponse); + mockCoreSetup.http.post.mockReset(); + mockCoreSetup.http.post.mockImplementation(getHttpMock(partialCompleteResponse)); // Run the search again to see that we don't hit the cache const response3 = searchInterceptor.search(req, { pollInterval: 1, sessionId }); response3.subscribe({ next, error, complete }); @@ -1418,12 +1573,12 @@ describe('SearchInterceptor', () => { await timeTravel(300); // Should be called 2 times (two partial response) - expect(fetchMock).toBeCalledTimes(2); + expect(mockCoreSetup.http.post).toBeCalledTimes(2); expect(complete).toBeCalledTimes(1); }); test("aborting a completed search shouldn't effect cache", async () => { - mockFetchImplementation(basicCompleteResponse); + mockCoreSetup.http.post.mockImplementation(getHttpMock(basicCompleteResponse)); const abortController = new AbortController(); @@ -1434,7 +1589,7 @@ describe('SearchInterceptor', () => { // Get a final response await timeTravel(10); - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); // Abort the search request abortController.abort(); @@ -1443,14 +1598,14 @@ describe('SearchInterceptor', () => { searchInterceptor.search(basicReq, { sessionId }).subscribe({ next, error, complete }); // Get the response from cache - expect(fetchMock).toBeCalledTimes(1); + expect(mockCoreSetup.http.post).toBeCalledTimes(1); }); }); describe('Should throw typed errors', () => { test('Observable should fail if fetch has an internal error', async () => { const mockResponse: any = new Error('Internal Error'); - fetchMock.mockRejectedValue(mockResponse); + mockCoreSetup.http.post.mockRejectedValue(mockResponse); const mockRequest: IEsSearchRequest = { params: {}, }; @@ -1464,7 +1619,7 @@ describe('SearchInterceptor', () => { statusCode: 500, message: 'Request timed out', }; - fetchMock.mockRejectedValueOnce(mockResponse); + mockCoreSetup.http.post.mockRejectedValueOnce(mockResponse); const mockRequest: IEsSearchRequest = { params: {}, }; @@ -1478,7 +1633,7 @@ describe('SearchInterceptor', () => { statusCode: 500, message: 'Request timed out', }; - fetchMock.mockRejectedValue(mockResponse); + mockCoreSetup.http.post.mockRejectedValue(mockResponse); const mockRequest: IEsSearchRequest = { params: {}, }; @@ -1497,7 +1652,7 @@ describe('SearchInterceptor', () => { statusCode: 500, message: 'Request timed out', }; - fetchMock.mockRejectedValue(mockResponse); + mockCoreSetup.http.post.mockRejectedValue(mockResponse); const mockRequest: IEsSearchRequest = { params: {}, }; @@ -1516,7 +1671,7 @@ describe('SearchInterceptor', () => { statusCode: 500, message: 'Request timed out', }; - fetchMock.mockRejectedValue(mockResponse); + mockCoreSetup.http.post.mockRejectedValue(mockResponse); const mockRequest: IEsSearchRequest = { params: {}, }; @@ -1538,7 +1693,7 @@ describe('SearchInterceptor', () => { error: resourceNotFoundException.error, }, }; - fetchMock.mockRejectedValueOnce(mockResponse); + mockCoreSetup.http.post.mockRejectedValueOnce(mockResponse); const mockRequest: IEsSearchRequest = { params: {}, }; @@ -1548,7 +1703,7 @@ describe('SearchInterceptor', () => { test('Observable should fail if user aborts (test merged signal)', async () => { const abortController = new AbortController(); - fetchMock.mockImplementationOnce((options: any) => { + mockCoreSetup.http.post.mockImplementationOnce((options: any) => { return new Promise((resolve, reject) => { options.signal.addEventListener('abort', () => { reject(new AbortError()); @@ -1586,7 +1741,7 @@ describe('SearchInterceptor', () => { error.mockImplementation((e) => { expect(e).toBeInstanceOf(AbortError); - expect(fetchMock).not.toBeCalled(); + expect(mockCoreSetup.http.post).not.toBeCalled(); }); response.subscribe({ error }); diff --git a/src/plugins/data/public/search/search_interceptor/search_interceptor.ts b/src/plugins/data/public/search/search_interceptor/search_interceptor.ts index 458171e64a1d3..8b312cd2fab87 100644 --- a/src/plugins/data/public/search/search_interceptor/search_interceptor.ts +++ b/src/plugins/data/public/search/search_interceptor/search_interceptor.ts @@ -49,10 +49,8 @@ import type { ToastsSetup, } from '@kbn/core/public'; -import { BatchedFunc, BfetchPublicSetup, DISABLE_BFETCH } from '@kbn/bfetch-plugin/public'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { AbortError, KibanaServerError } from '@kbn/kibana-utils-plugin/public'; -import { BfetchRequestError } from '@kbn/bfetch-error'; import type { SanitizedConnectionRequestParams, IKibanaSearchRequest, @@ -87,7 +85,6 @@ import type { SearchServiceStartDependencies } from '../search_service'; import { createRequestHash } from './create_request_hash'; export interface SearchInterceptorDeps { - bfetch: BfetchPublicSetup; http: HttpSetup; executionContext: ExecutionContextSetup; uiSettings: IUiSettingsClient; @@ -104,7 +101,6 @@ const MAX_CACHE_SIZE_MB = 10; export class SearchInterceptor { private uiSettingsSubs: Subscription[] = []; private searchTimeout: number; - private bFetchDisabled: boolean; private readonly responseCache: SearchResponseCache = new SearchResponseCache( MAX_CACHE_ITEMS, MAX_CACHE_SIZE_MB @@ -121,10 +117,6 @@ export class SearchInterceptor { */ private application!: ApplicationStart; private docLinks!: DocLinksStart; - private batchedFetch!: BatchedFunc< - { request: IKibanaSearchRequest; options: ISearchOptionsSerializable }, - IKibanaSearchResponse - >; private inspector!: InspectorStart; /* @@ -151,19 +143,11 @@ export class SearchInterceptor { this.inspector = (depsStart as SearchServiceStartDependencies).inspector; }); - this.batchedFetch = deps.bfetch.batchedFunction({ - url: '/internal/bsearch', - }); - this.searchTimeout = deps.uiSettings.get(UI_SETTINGS.SEARCH_TIMEOUT); - this.bFetchDisabled = deps.uiSettings.get(DISABLE_BFETCH); this.uiSettingsSubs.push( deps.uiSettings.get$(UI_SETTINGS.SEARCH_TIMEOUT).subscribe((timeout: number) => { this.searchTimeout = timeout; - }), - deps.uiSettings.get$(DISABLE_BFETCH).subscribe((bFetchDisabled: boolean) => { - this.bFetchDisabled = bFetchDisabled; }) ); } @@ -223,8 +207,8 @@ export class SearchInterceptor { return err; } - if (e instanceof AbortError || e instanceof BfetchRequestError) { - // In the case an application initiated abort, throw the existing AbortError, same with BfetchRequestErrors + if (e instanceof AbortError) { + // In the case an application initiated abort, throw the existing AbortError return e; } @@ -450,99 +434,85 @@ export class SearchInterceptor { ): Promise { const { abortSignal } = options || {}; - if (this.bFetchDisabled) { - const { executionContext, strategy, ...searchOptions } = this.getSerializableOptions(options); - return this.deps.http - .post( - `/internal/search/${strategy}${request.id ? `/${request.id}` : ''}`, - { - version: '1', - signal: abortSignal, - context: executionContext, - body: JSON.stringify({ - ...request, - ...searchOptions, - stream: - strategy === ESQL_ASYNC_SEARCH_STRATEGY || - strategy === ENHANCED_ES_SEARCH_STRATEGY || - strategy === undefined, // undefined strategy is treated as enhanced ES - }), - asResponse: true, - } - ) - .then((rawResponse) => { - const warning = rawResponse.response?.headers.get('warning'); - const requestParams = - rawResponse.body && 'requestParams' in rawResponse.body - ? rawResponse.body.requestParams - : JSON.parse(rawResponse.response?.headers.get('kbn-search-request-params') || '{}'); - const isRestored = - rawResponse.body && 'isRestored' in rawResponse.body - ? rawResponse.body.isRestored - : rawResponse.response?.headers.get('kbn-search-is-restored') === '?1'; - - if (rawResponse.body && 'error' in rawResponse.body) { - // eslint-disable-next-line no-throw-literal - throw { - attributes: { - error: rawResponse.body.error, - rawResponse: rawResponse.body, - requestParams, - isRestored, - }, - }; - } - - switch (strategy) { - case ENHANCED_ES_SEARCH_STRATEGY: - if (rawResponse.body?.rawResponse) return rawResponse.body; - const typedResponse = rawResponse.body as unknown as AsyncSearchGetResponse; - const shimmedResponse = shimHitsTotal(typedResponse.response, { - legacyHitsTotal: searchOptions.legacyHitsTotal, - }); - return { - id: typedResponse.id, - isPartial: typedResponse.is_partial, - isRunning: typedResponse.is_running, - rawResponse: shimmedResponse, - warning, - requestParams, - isRestored, - ...getTotalLoaded(shimmedResponse), - }; - case ESQL_ASYNC_SEARCH_STRATEGY: - const esqlResponse = rawResponse.body as unknown as SqlGetAsyncResponse; - return { - id: esqlResponse.id, - rawResponse: esqlResponse, - isPartial: esqlResponse.is_partial, - isRunning: esqlResponse.is_running, - warning, - }; - default: - return rawResponse.body; - } - }) - .catch((e: IHttpFetchError) => { - if (e?.body) { - throw e.body; - } else { - throw e; - } - }) as Promise; - } else { - const { executionContext, ...rest } = options || {}; - return this.batchedFetch( + const { executionContext, strategy, ...searchOptions } = this.getSerializableOptions(options); + return this.deps.http + .post( + `/internal/search/${strategy}${request.id ? `/${request.id}` : ''}`, { - request, - options: this.getSerializableOptions({ - ...rest, - executionContext: this.deps.executionContext.withGlobalContext(executionContext), + version: '1', + signal: abortSignal, + context: executionContext, + body: JSON.stringify({ + ...request, + ...searchOptions, + stream: + strategy === ESQL_ASYNC_SEARCH_STRATEGY || + strategy === ENHANCED_ES_SEARCH_STRATEGY || + strategy === undefined, // undefined strategy is treated as enhanced ES }), - }, - abortSignal - ); - } + asResponse: true, + } + ) + .then((rawResponse) => { + const warning = rawResponse.response?.headers.get('warning'); + const requestParams = + rawResponse.body && 'requestParams' in rawResponse.body + ? rawResponse.body.requestParams + : JSON.parse(rawResponse.response?.headers.get('kbn-search-request-params') || '{}'); + const isRestored = + rawResponse.body && 'isRestored' in rawResponse.body + ? rawResponse.body.isRestored + : rawResponse.response?.headers.get('kbn-search-is-restored') === '?1'; + + if (rawResponse.body && 'error' in rawResponse.body) { + // eslint-disable-next-line no-throw-literal + throw { + attributes: { + error: rawResponse.body.error, + rawResponse: rawResponse.body, + requestParams, + isRestored, + }, + }; + } + + switch (strategy) { + case ENHANCED_ES_SEARCH_STRATEGY: + if (rawResponse.body?.rawResponse) return rawResponse.body; + const typedResponse = rawResponse.body as unknown as AsyncSearchGetResponse; + const shimmedResponse = shimHitsTotal(typedResponse.response, { + legacyHitsTotal: searchOptions.legacyHitsTotal, + }); + return { + id: typedResponse.id, + isPartial: typedResponse.is_partial, + isRunning: typedResponse.is_running, + rawResponse: shimmedResponse, + warning, + requestParams, + isRestored, + ...getTotalLoaded(shimmedResponse), + }; + case ESQL_ASYNC_SEARCH_STRATEGY: + const esqlResponse = rawResponse.body as unknown as SqlGetAsyncResponse; + return { + id: esqlResponse.id, + rawResponse: esqlResponse, + isPartial: esqlResponse.is_partial, + isRunning: esqlResponse.is_running, + warning, + }; + default: + return rawResponse.body; + } + }) + .catch((e: IHttpFetchError) => { + if (e?.body) { + throw e.body; + } else { + throw e; + } + }) as Promise; } /** diff --git a/src/plugins/data/public/search/search_service.ts b/src/plugins/data/public/search/search_service.ts index 279e9cddc8986..d1e5d02e5d840 100644 --- a/src/plugins/data/public/search/search_service.ts +++ b/src/plugins/data/public/search/search_service.ts @@ -9,7 +9,6 @@ import { i18n } from '@kbn/i18n'; import { estypes } from '@elastic/elasticsearch'; -import { BfetchPublicSetup } from '@kbn/bfetch-plugin/public'; import { handleWarnings } from '@kbn/search-response-warnings'; import { CoreSetup, @@ -78,7 +77,6 @@ import { ISearchSetup, ISearchStart } from './types'; /** @internal */ export interface SearchServiceSetupDependencies { - bfetch: BfetchPublicSetup; expressions: ExpressionsSetup; usageCollection?: UsageCollectionSetup; management: ManagementSetup; @@ -106,13 +104,7 @@ export class SearchService implements Plugin { public setup( core: CoreSetup, - { - bfetch, - expressions, - usageCollection, - nowProvider, - management, - }: SearchServiceSetupDependencies + { expressions, usageCollection, nowProvider, management }: SearchServiceSetupDependencies ): ISearchSetup { const { http, getStartServices, notifications, uiSettings, executionContext } = core; this.usageCollector = createUsageCollector(getStartServices, usageCollection); @@ -130,7 +122,6 @@ export class SearchService implements Plugin { * all pending search requests, as well as getting the number of pending search requests. */ this.searchInterceptor = new SearchInterceptor({ - bfetch, toasts: notifications.toasts, executionContext, http, diff --git a/src/plugins/data/server/search/routes/bsearch.ts b/src/plugins/data/server/search/routes/bsearch.ts deleted file mode 100644 index 8e471bf0c4c6f..0000000000000 --- a/src/plugins/data/server/search/routes/bsearch.ts +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { firstValueFrom } from 'rxjs'; -import { catchError } from 'rxjs'; -import { BfetchServerSetup } from '@kbn/bfetch-plugin/server'; -import type { ExecutionContextSetup } from '@kbn/core/server'; -import apm from 'elastic-apm-node'; -import type { - IKibanaSearchResponse, - IKibanaSearchRequest, - ISearchOptionsSerializable, -} from '@kbn/search-types'; -import { getRequestAbortedSignal } from '../..'; -import type { ISearchStart } from '../types'; - -export function registerBsearchRoute( - bfetch: BfetchServerSetup, - getScoped: ISearchStart['asScoped'], - executionContextService: ExecutionContextSetup -): void { - bfetch.addBatchProcessingRoute< - { request: IKibanaSearchRequest; options?: ISearchOptionsSerializable }, - IKibanaSearchResponse - >('/internal/bsearch', (request) => { - const search = getScoped(request); - const abortSignal = getRequestAbortedSignal(request.events.aborted$); - return { - /** - * @param requestOptions - * @throws `KibanaServerError` - */ - onBatchItem: async ({ request: requestData, options }) => { - const { executionContext, ...restOptions } = options || {}; - return executionContextService.withContext(executionContext, () => { - apm.addLabels(executionContextService.getAsLabels()); - - return firstValueFrom( - search.search(requestData, { ...restOptions, abortSignal }).pipe( - catchError((err) => { - // Re-throw as object, to get attributes passed to the client - // eslint-disable-next-line no-throw-literal - throw { - message: err.message, - statusCode: err.statusCode, - attributes: err.errBody - ? { - error: err.errBody.error, - rawResponse: err.errBody.response, - ...(err.requestParams ? { requestParams: err.requestParams } : {}), - } - : undefined, - }; - }) - ) - ); - }); - }, - }; - }); -} diff --git a/src/plugins/data/server/search/search_service.ts b/src/plugins/data/server/search/search_service.ts index 2ed3a7b170611..156336e47492d 100644 --- a/src/plugins/data/server/search/search_service.ts +++ b/src/plugins/data/server/search/search_service.ts @@ -93,7 +93,6 @@ import { import { aggShardDelay } from '../../common/search/aggs/buckets/shard_delay_fn'; import { ConfigSchema } from '../config'; import { SearchSessionService } from './session'; -import { registerBsearchRoute } from './routes/bsearch'; import { enhancedEsSearchStrategyProvider } from './strategies/ese_search'; import { eqlSearchStrategyProvider } from './strategies/eql_search'; import { NoSearchIdInSessionError } from './errors/no_search_id_in_session'; @@ -209,12 +208,6 @@ export class SearchService implements Plugin { sqlSearchStrategyProvider(this.initializerContext.config.get().search, this.logger) ); - registerBsearchRoute( - bfetch, - (request: KibanaRequest) => this.asScoped(request), - core.executionContext - ); - core.savedObjects.registerType(searchTelemetry); if (usageCollection) { const getIndexForType = (type: string) => diff --git a/src/plugins/data/tsconfig.json b/src/plugins/data/tsconfig.json index 6a7ffce45e96b..b1f06b761c0fb 100644 --- a/src/plugins/data/tsconfig.json +++ b/src/plugins/data/tsconfig.json @@ -47,7 +47,6 @@ "@kbn/search-errors", "@kbn/search-response-warnings", "@kbn/shared-ux-link-redirect-app", - "@kbn/bfetch-error", "@kbn/es-types", "@kbn/code-editor", "@kbn/core-test-helpers-model-versions", diff --git a/test/api_integration/apis/search/bsearch.ts b/test/api_integration/apis/search/bsearch.ts deleted file mode 100644 index 2c4bcead1d475..0000000000000 --- a/test/api_integration/apis/search/bsearch.ts +++ /dev/null @@ -1,577 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import expect from '@kbn/expect'; -import request from 'superagent'; -import { inflateResponse } from '@kbn/bfetch-plugin/public/streaming'; -import { - ELASTIC_HTTP_VERSION_HEADER, - X_ELASTIC_INTERNAL_ORIGIN_REQUEST, -} from '@kbn/core-http-common'; -import { BFETCH_ROUTE_VERSION_LATEST } from '@kbn/bfetch-plugin/common'; -import { FtrProviderContext } from '../../ftr_provider_context'; -import { painlessErrReq } from './painless_err_req'; -import { verifyErrorResponse } from './verify_error'; - -function parseBfetchResponse(resp: request.Response, compressed: boolean = false) { - return resp.text - .trim() - .split('\n') - .map((item) => { - return JSON.parse(compressed ? inflateResponse(item) : item); - }); -} - -export default function ({ getService }: FtrProviderContext) { - const supertest = getService('supertest'); - const esArchiver = getService('esArchiver'); - - describe('bsearch', () => { - describe('post', () => { - it('should return 200 a single response', async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - options: { - strategy: 'es', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp); - - expect(resp.status).to.be(200); - expect(jsonBody[0].id).to.be(0); - expect(jsonBody[0].result.isPartial).to.be(false); - expect(jsonBody[0].result.isRunning).to.be(false); - expect(jsonBody[0].result).to.have.property('rawResponse'); - }); - - it('should return 200 a single response from compressed', async () => { - const resp = await supertest - .post(`/internal/bsearch?compress=true`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - options: { - strategy: 'es', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp, true); - - expect(resp.status).to.be(200); - expect(jsonBody[0].id).to.be(0); - expect(jsonBody[0].result.isPartial).to.be(false); - expect(jsonBody[0].result.isRunning).to.be(false); - expect(jsonBody[0].result).to.have.property('rawResponse'); - }); - - it('should return a batch of successful responses', async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - }, - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - }, - ], - }); - - expect(resp.status).to.be(200); - const parsedResponse = parseBfetchResponse(resp); - expect(parsedResponse).to.have.length(2); - parsedResponse.forEach((responseJson) => { - expect(responseJson.result).to.have.property('isPartial'); - expect(responseJson.result).to.have.property('isRunning'); - expect(responseJson.result).to.have.property('rawResponse'); - }); - }); - - it('should return error for not found strategy', async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - options: { - strategy: 'wtf', - }, - }, - ], - }); - - expect(resp.status).to.be(200); - parseBfetchResponse(resp).forEach((responseJson, i) => { - expect(responseJson.id).to.be(i); - verifyErrorResponse(responseJson.error, 404, 'Search strategy wtf not found'); - }); - }); - - it('should return 400 when index type is provided in "es" strategy', async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - index: '.kibana', - indexType: 'baad', - params: { - body: { - query: { - match_all: {}, - }, - }, - }, - }, - options: { - strategy: 'es', - }, - }, - ], - }); - - expect(resp.status).to.be(200); - parseBfetchResponse(resp).forEach((responseJson, i) => { - expect(responseJson.id).to.be(i); - verifyErrorResponse(responseJson.error, 400, 'Unsupported index pattern type baad'); - }); - }); - - describe('painless', () => { - before(async () => { - await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - }); - - after(async () => { - await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); - }); - it('should return 400 "search_phase_execution_exception" for Painless error in "es" strategy', async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: painlessErrReq, - options: { - strategy: 'es', - }, - }, - ], - }); - - expect(resp.status).to.be(200); - parseBfetchResponse(resp).forEach((responseJson, i) => { - expect(responseJson.id).to.be(i); - verifyErrorResponse(responseJson.error, 400, 'search_phase_execution_exception', true); - }); - }); - }); - - describe('request meta', () => { - describe('es', () => { - it(`should return request meta`, async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - options: { - strategy: 'es', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp); - - expect(resp.status).to.be(200); - expect(jsonBody[0].result.requestParams).to.eql({ - method: 'POST', - path: '/.kibana/_search', - querystring: 'ignore_unavailable=true', - }); - }); - - it(`should return request meta when request fails`, async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - query: { - bool: { - filter: [ - { - error_query: { - indices: [ - { - error_type: 'exception', - message: 'simulated failure', - name: '.kibana', - }, - ], - }, - }, - ], - }, - }, - }, - }, - }, - options: { - strategy: 'es', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp); - - expect(resp.status).to.be(200); - expect(jsonBody[0].error.attributes.requestParams).to.eql({ - method: 'POST', - path: '/.kibana/_search', - querystring: 'ignore_unavailable=true', - }); - }); - }); - - describe('ese', () => { - it(`should return request meta`, async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - options: { - strategy: 'ese', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp); - - expect(resp.status).to.be(200); - expect(jsonBody[0].result.requestParams).to.eql({ - method: 'POST', - path: '/.kibana/_async_search', - querystring: - 'batched_reduce_size=64&ccs_minimize_roundtrips=true&wait_for_completion_timeout=200ms&keep_on_completion=false&keep_alive=60000ms&ignore_unavailable=true', - }); - }); - - it(`should return request meta when request fails`, async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - bool: { - filter: [ - { - error_query: { - indices: [ - { - error_type: 'exception', - message: 'simulated failure', - name: '.kibana', - }, - ], - }, - }, - ], - }, - }, - }, - }, - options: { - strategy: 'ese', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp); - - expect(resp.status).to.be(200); - expect(jsonBody[0].error.attributes.requestParams).to.eql({ - method: 'POST', - path: '/.kibana/_async_search', - querystring: - 'batched_reduce_size=64&ccs_minimize_roundtrips=true&wait_for_completion_timeout=200ms&keep_on_completion=false&keep_alive=60000ms&ignore_unavailable=true', - }); - }); - }); - - describe('esql', () => { - it(`should return request meta`, async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - query: 'from .kibana | limit 1', - }, - }, - options: { - strategy: 'esql', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp); - - expect(resp.status).to.be(200); - expect(jsonBody[0].result.requestParams).to.eql({ - method: 'POST', - path: '/_query', - }); - }); - - it(`should return request meta when request fails`, async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - query: 'fro .kibana | limit 1', - }, - }, - options: { - strategy: 'esql', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp); - - expect(resp.status).to.be(200); - expect(jsonBody[0].error.attributes.requestParams).to.eql({ - method: 'POST', - path: '/_query', - }); - }); - }); - - describe('sql', () => { - it(`should return request meta`, async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - query: 'SELECT * FROM ".kibana" LIMIT 1', - }, - }, - options: { - strategy: 'sql', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp); - - expect(resp.status).to.be(200); - expect(jsonBody[0].result.requestParams).to.eql({ - method: 'POST', - path: '/_sql', - querystring: 'format=json', - }); - }); - - it(`should return request meta when request fails`, async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - query: 'SELEC * FROM ".kibana" LIMIT 1', - }, - }, - options: { - strategy: 'sql', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp); - - expect(resp.status).to.be(200); - expect(jsonBody[0].error.attributes.requestParams).to.eql({ - method: 'POST', - path: '/_sql', - querystring: 'format=json', - }); - }); - }); - - describe('eql', () => { - it(`should return request meta`, async () => { - const resp = await supertest - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - query: 'any where true', - timestamp_field: 'created_at', - }, - }, - options: { - strategy: 'eql', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp); - - expect(resp.status).to.be(200); - expect(jsonBody[0].result.requestParams).to.eql({ - method: 'POST', - path: '/.kibana/_eql/search', - querystring: 'ignore_unavailable=true', - }); - }); - }); - }); - }); - }); -} diff --git a/test/api_integration/apis/search/index.ts b/test/api_integration/apis/search/index.ts index 1ef0efee92d42..3d4b77634adf0 100644 --- a/test/api_integration/apis/search/index.ts +++ b/test/api_integration/apis/search/index.ts @@ -13,6 +13,5 @@ export default function ({ loadTestFile }: FtrProviderContext) { describe('search', () => { loadTestFile(require.resolve('./search')); loadTestFile(require.resolve('./sql_search')); - loadTestFile(require.resolve('./bsearch')); }); } diff --git a/test/tsconfig.json b/test/tsconfig.json index d7e0de39d5e5e..1ba594b8ecbdb 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -23,7 +23,6 @@ "kbn_references": [ "@kbn/core", { "path": "../src/setup_node_env/tsconfig.json" }, - "@kbn/bfetch-plugin", "@kbn/dashboard-plugin", "@kbn/expressions-plugin", "@kbn/saved-objects-management-plugin", diff --git a/x-pack/test/common/services/search_secure.ts b/x-pack/test/common/services/search_secure.ts index 9f25140df5d23..46eb8c765cd94 100644 --- a/x-pack/test/common/services/search_secure.ts +++ b/x-pack/test/common/services/search_secure.ts @@ -11,7 +11,6 @@ import expect from '@kbn/expect'; import type { IEsSearchResponse } from '@kbn/search-types'; import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; -import { BFETCH_ROUTE_VERSION_LATEST } from '@kbn/bfetch-plugin/common'; import { SupertestWithoutAuthProviderType } from '@kbn/ftr-common-functional-services'; import { FtrService } from '../ftr_provider_context'; @@ -109,7 +108,7 @@ export class SearchSecureService extends FtrService { .auth(auth.username, auth.password) .set('kbn-xsrf', 'true') .set('x-elastic-internal-origin', 'Kibana') - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) + .set(ELASTIC_HTTP_VERSION_HEADER, '1') .send(options) .expect(200); expect(resp.body.isRunning).equal(false); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/search_oss/bsearch.ts b/x-pack/test_serverless/api_integration/test_suites/common/search_oss/bsearch.ts deleted file mode 100644 index 93da25aed6000..0000000000000 --- a/x-pack/test_serverless/api_integration/test_suites/common/search_oss/bsearch.ts +++ /dev/null @@ -1,247 +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 expect from '@kbn/expect'; -import request from 'superagent'; -import { inflateResponse } from '@kbn/bfetch-plugin/public/streaming'; -import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; -import { BFETCH_ROUTE_VERSION_LATEST } from '@kbn/bfetch-plugin/common'; -import { SupertestWithRoleScopeType } from '@kbn/test-suites-xpack/api_integration/deployment_agnostic/services'; -import type { FtrProviderContext } from '../../../ftr_provider_context'; -import { painlessErrReq } from './painless_err_req'; -import { verifyErrorResponse } from './verify_error'; - -function parseBfetchResponse(resp: request.Response, compressed: boolean = false) { - return resp.text - .trim() - .split('\n') - .map((item) => { - return JSON.parse(compressed ? inflateResponse(item) : item); - }); -} - -export default function ({ getService }: FtrProviderContext) { - const esArchiver = getService('esArchiver'); - const roleScopedSupertest = getService('roleScopedSupertest'); - let supertestAdminWithCookieCredentials: SupertestWithRoleScopeType; - - describe('bsearch', () => { - before(async () => { - supertestAdminWithCookieCredentials = await roleScopedSupertest.getSupertestWithRoleScope( - 'admin', - { - useCookieHeader: true, - withInternalHeaders: true, - withCustomHeaders: { - [ELASTIC_HTTP_VERSION_HEADER]: BFETCH_ROUTE_VERSION_LATEST, - }, - } - ); - }); - - describe('post', () => { - it('should return 200 a single response', async () => { - const resp = await supertestAdminWithCookieCredentials.post(`/internal/bsearch`).send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - options: { - strategy: 'es', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp); - - expect(resp.status).to.be(200); - expect(jsonBody[0].id).to.be(0); - expect(jsonBody[0].result.isPartial).to.be(false); - expect(jsonBody[0].result.isRunning).to.be(false); - expect(jsonBody[0].result).to.have.property('rawResponse'); - }); - - it('should return 200 a single response from compressed', async () => { - const resp = await supertestAdminWithCookieCredentials - .post(`/internal/bsearch?compress=true`) - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - options: { - strategy: 'es', - }, - }, - ], - }); - - const jsonBody = parseBfetchResponse(resp, true); - - expect(resp.status).to.be(200); - expect(jsonBody[0].id).to.be(0); - expect(jsonBody[0].result.isPartial).to.be(false); - expect(jsonBody[0].result.isRunning).to.be(false); - expect(jsonBody[0].result).to.have.property('rawResponse'); - }); - - it('should return a batch of successful responses', async () => { - const resp = await supertestAdminWithCookieCredentials - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - }, - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - }, - ], - }); - - expect(resp.status).to.be(200); - const parsedResponse = parseBfetchResponse(resp); - expect(parsedResponse).to.have.length(2); - parsedResponse.forEach((responseJson) => { - expect(responseJson.result).to.have.property('isPartial'); - expect(responseJson.result).to.have.property('isRunning'); - expect(responseJson.result).to.have.property('rawResponse'); - }); - }); - - it('should return error for not found strategy', async () => { - const resp = await supertestAdminWithCookieCredentials - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .send({ - batch: [ - { - request: { - params: { - index: '.kibana', - body: { - query: { - match_all: {}, - }, - }, - }, - }, - options: { - strategy: 'wtf', - }, - }, - ], - }); - - expect(resp.status).to.be(200); - parseBfetchResponse(resp).forEach((responseJson, i) => { - expect(responseJson.id).to.be(i); - verifyErrorResponse(responseJson.error, 404, 'Search strategy wtf not found'); - }); - }); - - it('should return 400 when index type is provided in "es" strategy', async () => { - const resp = await supertestAdminWithCookieCredentials - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .send({ - batch: [ - { - request: { - index: '.kibana', - indexType: 'baad', - params: { - body: { - query: { - match_all: {}, - }, - }, - }, - }, - options: { - strategy: 'es', - }, - }, - ], - }); - - expect(resp.status).to.be(200); - parseBfetchResponse(resp).forEach((responseJson, i) => { - expect(responseJson.id).to.be(i); - verifyErrorResponse(responseJson.error, 400, 'Unsupported index pattern type baad'); - }); - }); - - describe('painless', () => { - before(async () => { - await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - }); - - after(async () => { - await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); - }); - it('should return 400 "search_phase_execution_exception" for Painless error in "es" strategy', async () => { - const resp = await supertestAdminWithCookieCredentials - .post(`/internal/bsearch`) - .set(ELASTIC_HTTP_VERSION_HEADER, BFETCH_ROUTE_VERSION_LATEST) - .send({ - batch: [ - { - request: painlessErrReq, - options: { - strategy: 'es', - }, - }, - ], - }); - - expect(resp.status).to.be(200); - parseBfetchResponse(resp).forEach((responseJson, i) => { - expect(responseJson.id).to.be(i); - verifyErrorResponse(responseJson.error, 400, 'search_phase_execution_exception', true); - }); - }); - }); - }); - }); -} diff --git a/x-pack/test_serverless/api_integration/test_suites/common/search_oss/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/search_oss/index.ts index 79ff29fdf9f22..50299ed81a444 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/search_oss/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/search_oss/index.ts @@ -16,6 +16,5 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./search')); // TODO: Removed `sql_search` since // SQL is not supported in Serverless - loadTestFile(require.resolve('./bsearch')); }); } diff --git a/x-pack/test_serverless/tsconfig.json b/x-pack/test_serverless/tsconfig.json index f54ffc1bb4c28..452b6b0260fbf 100644 --- a/x-pack/test_serverless/tsconfig.json +++ b/x-pack/test_serverless/tsconfig.json @@ -50,7 +50,6 @@ "@kbn/data-view-field-editor-plugin", "@kbn/data-plugin", "@kbn/dev-utils", - "@kbn/bfetch-plugin", "@kbn/es-archiver", "@kbn/rule-data-utils", "@kbn/rison", From 045ff9c6460a96089aa6fcf64beb93e04514fe6d Mon Sep 17 00:00:00 2001 From: Anton Dosov Date: Fri, 6 Dec 2024 16:48:20 +0100 Subject: [PATCH 124/141] [TableListView] Improve help text of creator and view count (#202488) ## Summary This PR brings back version mentions in help text for non-serverless that we removed in https://github.com/elastic/kibana/pull/193024. In that PR we decided that it is not worth adding complexity for checking `isServerless` deep inside table list view components, but I want to bring version mentions back now because I believe that it can be very confusing without the version mentions for existing deployments Two recent features: 1. created_by; 2. view counts are only working since 8.14 and 8.16 respectively, so for older kibana with old dashboards it might be confusing that the data for new features is missing after the upgrade. In help text we can at least mention that the reason that data is missing is because we only gather the data starting from a specific version. ### Serverless (version mentions are missing as before) ![Screenshot 2024-12-06 at 12 39 50](https://github.com/user-attachments/assets/4ad2cd23-3aa7-4400-a5bd-419407f2fad2) ![Screenshot 2024-12-03 at 11 59 09](https://github.com/user-attachments/assets/c56de5d3-1afb-411f-bdbd-419025ef9084) ### Statefull (version are shown again, just like before https://github.com/elastic/kibana/pull/193024) ![Screenshot 2024-12-06 at 13 03 58](https://github.com/user-attachments/assets/24ea67a5-8a32-45b0-9a4f-2890aaf7ded5) ![Screenshot 2024-12-06 at 13 04 04](https://github.com/user-attachments/assets/8f91d32b-457f-4fd7-882a-d2dd9a3476f4) ![Screenshot 2024-12-03 at 14 11 09](https://github.com/user-attachments/assets/47ea1f8a-1a7b-4aa6-af81-206c6f2d087e) # Release Notes Improve help text of creator and view count features on dashboard listing page --- .../src/components/activity_view.tsx | 15 ++++- .../components/views_stats/views_stats.tsx | 51 ++++++++++------ .../content_insights_public/src/services.tsx | 10 +++- .../src/__jest__/tests.helpers.tsx | 1 + .../content_editor_activity_row.tsx | 7 ++- .../src/components/table.tsx | 4 +- .../src/components/user_filter_panel.tsx | 24 +++++++- .../table_list_view_table/src/mocks.tsx | 1 + .../table_list_view_table/src/services.tsx | 15 ++++- .../src/table_list_view_table.tsx | 7 ++- .../src/components/user_missing_tip.tsx | 58 +++++++++++++++---- .../dashboard_listing/dashboard_listing.tsx | 2 + .../dashboard_listing_table.tsx | 7 ++- .../translations/translations/fr-FR.json | 2 - .../translations/translations/ja-JP.json | 2 - .../translations/translations/zh-CN.json | 2 - 16 files changed, 160 insertions(+), 48 deletions(-) diff --git a/packages/content-management/content_insights/content_insights_public/src/components/activity_view.tsx b/packages/content-management/content_insights/content_insights_public/src/components/activity_view.tsx index 360ccc1757581..f4bceeee3c765 100644 --- a/packages/content-management/content_insights/content_insights_public/src/components/activity_view.tsx +++ b/packages/content-management/content_insights/content_insights_public/src/components/activity_view.tsx @@ -22,12 +22,15 @@ import { import { getUserDisplayName } from '@kbn/user-profile-components'; import { Item } from '../types'; +import { useServices } from '../services'; export interface ActivityViewProps { item: Pick, 'createdBy' | 'createdAt' | 'updatedBy' | 'updatedAt' | 'managed'>; + entityNamePlural?: string; } -export const ActivityView = ({ item }: ActivityViewProps) => { +export const ActivityView = ({ item, entityNamePlural }: ActivityViewProps) => { + const isKibanaVersioningEnabled = useServices()?.isKibanaVersioningEnabled ?? false; const showLastUpdated = Boolean(item.updatedAt && item.updatedAt !== item.createdAt); const UnknownUserLabel = ( @@ -62,7 +65,10 @@ export const ActivityView = ({ item }: ActivityViewProps) => { ) : ( <> {UnknownUserLabel} - + ) } @@ -85,7 +91,10 @@ export const ActivityView = ({ item }: ActivityViewProps) => { ) : ( <> {UnknownUserLabel} - + ) } diff --git a/packages/content-management/content_insights/content_insights_public/src/components/views_stats/views_stats.tsx b/packages/content-management/content_insights/content_insights_public/src/components/views_stats/views_stats.tsx index 59e548e401490..f19ddc548b12f 100644 --- a/packages/content-management/content_insights/content_insights_public/src/components/views_stats/views_stats.tsx +++ b/packages/content-management/content_insights/content_insights_public/src/components/views_stats/views_stats.tsx @@ -73,24 +73,39 @@ export const ViewsStats = ({ item }: { item: Item }) => { ); }; -const NoViewsTip = () => ( - - } - /> -); +const NoViewsTip = () => { + const isKibanaVersioningEnabled = useServices()?.isKibanaVersioningEnabled ?? false; + return ( + + + {isKibanaVersioningEnabled && ( + <> + {' '} + + + )} + + } + /> + ); +}; export function getTotalDays(stats: ContentInsightsStats) { return moment.utc().diff(moment.utc(stats.from), 'days'); diff --git a/packages/content-management/content_insights/content_insights_public/src/services.tsx b/packages/content-management/content_insights/content_insights_public/src/services.tsx index ea7e67bf5cd9f..7a9e86e01dbad 100644 --- a/packages/content-management/content_insights/content_insights_public/src/services.tsx +++ b/packages/content-management/content_insights/content_insights_public/src/services.tsx @@ -17,6 +17,11 @@ import { ContentInsightsClientPublic } from './client'; */ export interface ContentInsightsServices { contentInsightsClient: ContentInsightsClientPublic; + /** + * Whether versioning is enabled for the current kibana instance. (aka is Serverless) + * This is used to determine if we should show the version mentions in the help text. + */ + isKibanaVersioningEnabled: boolean; } const ContentInsightsContext = React.createContext(null); @@ -34,7 +39,10 @@ export const ContentInsightsProvider: FC {children} diff --git a/packages/content-management/table_list_view_table/src/__jest__/tests.helpers.tsx b/packages/content-management/table_list_view_table/src/__jest__/tests.helpers.tsx index 8120e18731b83..cf28019f820d0 100644 --- a/packages/content-management/table_list_view_table/src/__jest__/tests.helpers.tsx +++ b/packages/content-management/table_list_view_table/src/__jest__/tests.helpers.tsx @@ -32,6 +32,7 @@ export const getMockServices = (overrides?: Partial false, bulkGetUserProfiles: async () => [], getUserProfile: async () => ({ uid: '', enabled: true, data: {}, user: { username: '' } }), + isKibanaVersioningEnabled: false, ...overrides, }; diff --git a/packages/content-management/table_list_view_table/src/components/content_editor_activity_row.tsx b/packages/content-management/table_list_view_table/src/components/content_editor_activity_row.tsx index 83c1b993296ce..f7a74d88fa8fa 100644 --- a/packages/content-management/table_list_view_table/src/components/content_editor_activity_row.tsx +++ b/packages/content-management/table_list_view_table/src/components/content_editor_activity_row.tsx @@ -16,7 +16,10 @@ import { ActivityView, ViewsStats } from '@kbn/content-management-content-insigh /** * This component is used as an extension for the ContentEditor to render the ActivityView and ViewsStats inside the flyout without depending on them directly */ -export const ContentEditorActivityRow: FC<{ item: UserContentCommonSchema }> = ({ item }) => { +export const ContentEditorActivityRow: FC<{ + item: UserContentCommonSchema; + entityNamePlural?: string; +}> = ({ item, entityNamePlural }) => { return ( = ( } > <> - + diff --git a/packages/content-management/table_list_view_table/src/components/table.tsx b/packages/content-management/table_list_view_table/src/components/table.tsx index 66c0eaec4d1f8..c4a51ff979618 100644 --- a/packages/content-management/table_list_view_table/src/components/table.tsx +++ b/packages/content-management/table_list_view_table/src/components/table.tsx @@ -113,7 +113,7 @@ export function Table({ favoritesEnabled, }: Props) { const euiTheme = useEuiTheme(); - const { getTagList, isTaggingEnabled } = useServices(); + const { getTagList, isTaggingEnabled, isKibanaVersioningEnabled } = useServices(); const renderToolsLeft = useCallback(() => { if (!deleteItems || selectedIds.length === 0) { @@ -340,6 +340,8 @@ export function Table({ }} selectedUsers={tableFilter.createdBy} showNoUserOption={showNoUserOption} + isKibanaVersioningEnabled={isKibanaVersioningEnabled} + entityNamePlural={entityNamePlural} > (null); @@ -44,7 +46,13 @@ export const UserFilterPanel: FC<{}> = () => { if (!componentContext) throw new Error('UserFilterPanel must be used within a UserFilterContextProvider'); - const { onSelectedUsersChange, selectedUsers, showNoUserOption } = componentContext; + const { + onSelectedUsersChange, + selectedUsers, + showNoUserOption, + isKibanaVersioningEnabled, + entityNamePlural, + } = componentContext; const [isPopoverOpen, setPopoverOpen] = React.useState(false); const [searchTerm, setSearchTerm] = React.useState(''); @@ -126,7 +134,12 @@ export const UserFilterPanel: FC<{}> = () => { id="contentManagement.tableList.listing.userFilter.emptyMessage" defaultMessage="None of the dashboards have creators" /> - {} + { + + }

      ), nullOptionLabel: i18n.translate( @@ -136,7 +149,12 @@ export const UserFilterPanel: FC<{}> = () => { } ), nullOptionProps: { - append: , + append: ( + + ), }, clearButtonLabel: ( {}) => getTagIdsFromReferences: () => [], isTaggingEnabled: () => true, isFavoritesEnabled: () => false, + isKibanaVersioningEnabled: false, ...params, }; diff --git a/packages/content-management/table_list_view_table/src/services.tsx b/packages/content-management/table_list_view_table/src/services.tsx index a8c3d3cc9f60b..9db14069107e8 100644 --- a/packages/content-management/table_list_view_table/src/services.tsx +++ b/packages/content-management/table_list_view_table/src/services.tsx @@ -79,6 +79,9 @@ export interface Services { /** Handler to return the url to navigate to the kibana tags management */ getTagManagementUrl: () => string; getTagIdsFromReferences: (references: SavedObjectsReference[]) => string[]; + /** Whether versioning is enabled for the current kibana instance. (aka is Serverless) + This is used to determine if we should show the version mentions in the help text.*/ + isKibanaVersioningEnabled: boolean; } const TableListViewContext = React.createContext(null); @@ -185,6 +188,12 @@ export interface TableListViewKibanaDependencies { * Content insights client to enable content insights features. */ contentInsightsClient?: ContentInsightsClientPublic; + + /** + * Flag to indicate if Kibana versioning is enabled. (aka not Serverless) + * Used to determine if we should show the version mentions in the help text. + */ + isKibanaVersioningEnabled?: boolean; } /** @@ -251,7 +260,10 @@ export const TableListViewKibanaProvider: FC< - + { @@ -282,6 +294,7 @@ export const TableListViewKibanaProvider: FC< itemHasTags={itemHasTags} getTagIdsFromReferences={getTagIdsFromReferences} getTagManagementUrl={() => core.http.basePath.prepend(TAG_MANAGEMENT_APP_URL)} + isKibanaVersioningEnabled={services.isKibanaVersioningEnabled ?? false} > {children} diff --git a/packages/content-management/table_list_view_table/src/table_list_view_table.tsx b/packages/content-management/table_list_view_table/src/table_list_view_table.tsx index c7653c668f0df..011f00256d979 100644 --- a/packages/content-management/table_list_view_table/src/table_list_view_table.tsx +++ b/packages/content-management/table_list_view_table/src/table_list_view_table.tsx @@ -376,6 +376,7 @@ function TableListViewTableComp({ DateFormatterComp, getTagList, isFavoritesEnabled, + isKibanaVersioningEnabled, } = useServices(); const openContentEditor = useOpenContentEditor(); @@ -578,7 +579,7 @@ function TableListViewTableComp({ appendRows: contentInsightsServices && ( // have to "REWRAP" in the provider here because it will be rendered in a different context - + ), }); @@ -591,6 +592,7 @@ function TableListViewTableComp({ tableItemsRowActions, fetchItems, contentInsightsServices, + entityNamePlural, ] ); @@ -646,7 +648,7 @@ function TableListViewTableComp({ ) : record.managed ? ( ) : ( - + ), sortable: false /* createdBy column is not sortable because it doesn't make sense to sort by id*/, @@ -753,6 +755,7 @@ function TableListViewTableComp({ inspectItem, entityName, isFavoritesEnabled, + isKibanaVersioningEnabled, ]); const itemsById = useMemo(() => { diff --git a/packages/content-management/user_profiles/src/components/user_missing_tip.tsx b/packages/content-management/user_profiles/src/components/user_missing_tip.tsx index 602e9cc228975..08612e731f816 100644 --- a/packages/content-management/user_profiles/src/components/user_missing_tip.tsx +++ b/packages/content-management/user_profiles/src/components/user_missing_tip.tsx @@ -7,29 +7,67 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiIconTip, IconType } from '@elastic/eui'; import React from 'react'; -export const NoCreatorTip = (props: { iconType?: IconType }) => ( +const fallbackEntityNamePlural = i18n.translate( + 'contentManagement.userProfiles.fallbackEntityNamePlural', + { defaultMessage: 'objects' } +); + +export const NoCreatorTip = (props: { + iconType?: IconType; + includeVersionTip?: boolean; + entityNamePlural?: string; +}) => ( + props.includeVersionTip ? ( + + ) : ( + + ) } {...props} /> ); -export const NoUpdaterTip = (props: { iconType?: string }) => ( +export const NoUpdaterTip = (props: { + iconType?: string; + includeVersionTip?: boolean; + entityNamePlural?: string; +}) => ( + props.includeVersionTip ? ( + + ) : ( + + ) } {...props} /> diff --git a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx index f6072169e5bda..7a8e5a40bb274 100644 --- a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing.tsx @@ -19,6 +19,7 @@ import { DASHBOARD_APP_ID, DASHBOARD_CONTENT_ID } from '../dashboard_constants'; import { coreServices, savedObjectsTaggingService, + serverlessService, usageCollectionService, } from '../services/kibana_services'; import { DashboardUnsavedListing } from './dashboard_unsaved_listing'; @@ -65,6 +66,7 @@ export const DashboardListing = ({ FormattedRelative, favorites: dashboardFavoritesClient, contentInsightsClient, + isKibanaVersioningEnabled: !serverlessService, }} > {...tableListViewTableProps}> diff --git a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx index 96d9025f822ff..efcc0fe2cc644 100644 --- a/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx +++ b/src/plugins/dashboard/public/dashboard_listing/dashboard_listing_table.tsx @@ -16,7 +16,11 @@ import { import { FormattedRelative, I18nProvider } from '@kbn/i18n-react'; import { useExecutionContext } from '@kbn/kibana-react-plugin/public'; -import { coreServices, savedObjectsTaggingService } from '../services/kibana_services'; +import { + coreServices, + savedObjectsTaggingService, + serverlessService, +} from '../services/kibana_services'; import { DashboardUnsavedListing } from './dashboard_unsaved_listing'; import { useDashboardListingTable } from './hooks/use_dashboard_listing_table'; import { DashboardListingProps, DashboardSavedObjectUserContent } from './types'; @@ -57,6 +61,7 @@ export const DashboardListingTable = ({ savedObjectsTagging={savedObjectsTaggingService?.getTaggingApi()} FormattedRelative={FormattedRelative} contentInsightsClient={contentInsightsClient} + isKibanaVersioningEnabled={!serverlessService} > <> Date: Fri, 6 Dec 2024 10:58:20 -0500 Subject: [PATCH 125/141] [Data Usage] add error handling and tests for privilege related errors (#203006) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - handling of 2 error cases to error handler - `security_exception` due to lack of privileges. Metering api will respond when one of the following isn't available as a user privilege `monitor,view_index_metadata,manage,all`. - `index_not_found_exception`. Metering api will respond with this when no indices exist for the privileges it has access to or when no indices are found. - api integration tests for data_streams route for the following cases - returns no data streams when there are none it has access to and responds with appropriate message - returns no data streams without necessary privileges and responds with appropriate message - returns data streams when user only has access to a subset of indices with necessary privileges - functional tests for same as above. these remain skipped due to not being able to create data streams picked up by metering api since we implemented filtering out zero storage size data streams, but useful for local testing with some code changes. ### `security_exception` view Screenshot 2024-12-04 at 1 14 10 PM ### `index_not_found_exception` view Screenshot 2024-12-04 at 1 13 13 PM --------- Co-authored-by: Ashokaditya Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../data_usage/server/common/errors.ts | 2 +- x-pack/plugins/data_usage/server/errors.ts | 30 ++++ .../data_usage/server/routes/error_handler.ts | 18 +- .../routes/internal/data_streams.test.ts | 35 +++- .../routes/internal/data_streams_handler.ts | 7 + .../routes/internal/usage_metrics.test.ts | 2 +- .../data_usage/server/services/autoops_api.ts | 2 +- .../data_usage/server/services/errors.ts | 10 -- .../data_usage/server/services/index.ts | 2 +- .../test_suites/common/data_usage/index.ts | 1 + .../tests/data_streams_privileges.ts | 155 ++++++++++++++++++ .../common/data_usage/privileges.ts | 101 +++++++++++- 12 files changed, 345 insertions(+), 20 deletions(-) create mode 100644 x-pack/plugins/data_usage/server/errors.ts delete mode 100644 x-pack/plugins/data_usage/server/services/errors.ts create mode 100644 x-pack/test_serverless/api_integration/test_suites/common/data_usage/tests/data_streams_privileges.ts diff --git a/x-pack/plugins/data_usage/server/common/errors.ts b/x-pack/plugins/data_usage/server/common/errors.ts index 7a43a10108be1..2b583570058e9 100644 --- a/x-pack/plugins/data_usage/server/common/errors.ts +++ b/x-pack/plugins/data_usage/server/common/errors.ts @@ -5,7 +5,7 @@ * 2.0. */ -export class BaseError extends Error { +export class DataUsageError extends Error { constructor(message: string, public readonly meta?: MetaType) { super(message); // For debugging - capture name of subclasses diff --git a/x-pack/plugins/data_usage/server/errors.ts b/x-pack/plugins/data_usage/server/errors.ts new file mode 100644 index 0000000000000..17363afe5da31 --- /dev/null +++ b/x-pack/plugins/data_usage/server/errors.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. + */ + +/* eslint-disable max-classes-per-file */ + +import { DataUsageError } from './common/errors'; + +export class NotFoundError extends DataUsageError {} + +export class AutoOpsError extends DataUsageError {} + +export class NoPrivilegeMeteringError extends DataUsageError { + constructor() { + super( + 'You do not have the necessary privileges to access data stream statistics. Please contact your administrator.' + ); + } +} + +export class NoIndicesMeteringError extends DataUsageError { + constructor() { + super( + 'No data streams or indices are available for the current user. Ensure that the data streams or indices you are authorized to access have been created and contain data. If you believe this is an error, please contact your administrator.' + ); + } +} diff --git a/x-pack/plugins/data_usage/server/routes/error_handler.ts b/x-pack/plugins/data_usage/server/routes/error_handler.ts index b889d12674db5..055b09bb71b9e 100644 --- a/x-pack/plugins/data_usage/server/routes/error_handler.ts +++ b/x-pack/plugins/data_usage/server/routes/error_handler.ts @@ -7,10 +7,12 @@ import type { IKibanaResponse, KibanaResponseFactory, Logger } from '@kbn/core/server'; import { CustomHttpRequestError } from '../utils/custom_http_request_error'; -import { BaseError } from '../common/errors'; -import { AutoOpsError } from '../services/errors'; - -export class NotFoundError extends BaseError {} +import { + AutoOpsError, + NoPrivilegeMeteringError, + NoIndicesMeteringError, + NotFoundError, +} from '../errors'; /** * Default Data Usage Routes error handler @@ -43,6 +45,14 @@ export const errorHandler = ( return res.notFound({ body: error }); } + if (error instanceof NoPrivilegeMeteringError) { + return res.forbidden({ body: error }); + } + + if (error instanceof NoIndicesMeteringError) { + return res.notFound({ body: error }); + } + // Kibana CORE will take care of `500` errors when the handler `throw`'s, including logging the error throw error; }; diff --git a/x-pack/plugins/data_usage/server/routes/internal/data_streams.test.ts b/x-pack/plugins/data_usage/server/routes/internal/data_streams.test.ts index 374c4b9c82e7e..9efe61bd75118 100644 --- a/x-pack/plugins/data_usage/server/routes/internal/data_streams.test.ts +++ b/x-pack/plugins/data_usage/server/routes/internal/data_streams.test.ts @@ -19,6 +19,7 @@ import { DATA_USAGE_DATA_STREAMS_API_ROUTE } from '../../../common'; import { createMockedDataUsageContext } from '../../mocks'; import { getMeteringStats } from '../../utils/get_metering_stats'; import { CustomHttpRequestError } from '../../utils'; +import { NoIndicesMeteringError, NoPrivilegeMeteringError } from '../../errors'; jest.mock('../../utils/get_metering_stats'); const mockGetMeteringStats = getMeteringStats as jest.Mock; @@ -126,7 +127,7 @@ describe('registerDataStreamsRoute', () => { }); }); - it('should return correct error if metering stats request fails', async () => { + it('should return correct error if metering stats request fails with an unknown error', async () => { // using custom error for test here to avoid having to import the actual error class mockGetMeteringStats.mockRejectedValue( new CustomHttpRequestError('Error getting metring stats!') @@ -144,6 +145,38 @@ describe('registerDataStreamsRoute', () => { }); }); + it('should return `not found` error if metering stats request fails when no indices', async () => { + mockGetMeteringStats.mockRejectedValue( + new Error(JSON.stringify({ message: 'index_not_found_exception' })) + ); + const mockRequest = httpServerMock.createKibanaRequest({ body: {} }); + const mockResponse = httpServerMock.createResponseFactory(); + const mockRouter = mockCore.http.createRouter.mock.results[0].value; + const [[, handler]] = mockRouter.versioned.get.mock.results[0].value.addVersion.mock.calls; + await handler(context, mockRequest, mockResponse); + + expect(mockResponse.notFound).toHaveBeenCalledTimes(1); + expect(mockResponse.notFound).toHaveBeenCalledWith({ + body: new NoIndicesMeteringError(), + }); + }); + + it('should return `forbidden` error if metering stats request fails with privileges error', async () => { + mockGetMeteringStats.mockRejectedValue( + new Error(JSON.stringify({ message: 'security_exception' })) + ); + const mockRequest = httpServerMock.createKibanaRequest({ body: {} }); + const mockResponse = httpServerMock.createResponseFactory(); + const mockRouter = mockCore.http.createRouter.mock.results[0].value; + const [[, handler]] = mockRouter.versioned.get.mock.results[0].value.addVersion.mock.calls; + await handler(context, mockRequest, mockResponse); + + expect(mockResponse.forbidden).toHaveBeenCalledTimes(1); + expect(mockResponse.forbidden).toHaveBeenCalledWith({ + body: new NoPrivilegeMeteringError(), + }); + }); + it.each([ ['no datastreams', {}, []], ['empty array', { datastreams: [] }, []], diff --git a/x-pack/plugins/data_usage/server/routes/internal/data_streams_handler.ts b/x-pack/plugins/data_usage/server/routes/internal/data_streams_handler.ts index 726aa157050f8..28967b9a0ee4a 100644 --- a/x-pack/plugins/data_usage/server/routes/internal/data_streams_handler.ts +++ b/x-pack/plugins/data_usage/server/routes/internal/data_streams_handler.ts @@ -10,6 +10,7 @@ import { DataUsageContext, DataUsageRequestHandlerContext } from '../../types'; import { errorHandler } from '../error_handler'; import { getMeteringStats } from '../../utils/get_metering_stats'; import { DataStreamsRequestQuery } from '../../../common/rest_types/data_streams'; +import { NoIndicesMeteringError, NoPrivilegeMeteringError } from '../../errors'; export const getDataStreamsHandler = ( dataUsageContext: DataUsageContext @@ -45,6 +46,12 @@ export const getDataStreamsHandler = ( body, }); } catch (error) { + if (error.message.includes('security_exception')) { + return errorHandler(logger, response, new NoPrivilegeMeteringError()); + } else if (error.message.includes('index_not_found_exception')) { + return errorHandler(logger, response, new NoIndicesMeteringError()); + } + return errorHandler(logger, response, error); } }; diff --git a/x-pack/plugins/data_usage/server/routes/internal/usage_metrics.test.ts b/x-pack/plugins/data_usage/server/routes/internal/usage_metrics.test.ts index f2bccd6d9c6b0..e6f98a97f0e93 100644 --- a/x-pack/plugins/data_usage/server/routes/internal/usage_metrics.test.ts +++ b/x-pack/plugins/data_usage/server/routes/internal/usage_metrics.test.ts @@ -18,7 +18,7 @@ import type { import { DATA_USAGE_METRICS_API_ROUTE } from '../../../common'; import { createMockedDataUsageContext } from '../../mocks'; import { CustomHttpRequestError } from '../../utils'; -import { AutoOpsError } from '../../services/errors'; +import { AutoOpsError } from '../../errors'; import { transformToUTCtime } from '../../../common/utils'; const timeRange = { diff --git a/x-pack/plugins/data_usage/server/services/autoops_api.ts b/x-pack/plugins/data_usage/server/services/autoops_api.ts index 8f371d3004def..0fb9009bb95a5 100644 --- a/x-pack/plugins/data_usage/server/services/autoops_api.ts +++ b/x-pack/plugins/data_usage/server/services/autoops_api.ts @@ -21,7 +21,7 @@ import { type UsageMetricsRequestBody, } from '../../common/rest_types'; import { AutoOpsConfig } from '../types'; -import { AutoOpsError } from './errors'; +import { AutoOpsError } from '../errors'; import { appContextService } from './app_context'; const AUTO_OPS_REQUEST_FAILED_PREFIX = '[AutoOps API] Request failed'; diff --git a/x-pack/plugins/data_usage/server/services/errors.ts b/x-pack/plugins/data_usage/server/services/errors.ts deleted file mode 100644 index 0574e2a3c75fb..0000000000000 --- a/x-pack/plugins/data_usage/server/services/errors.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { BaseError } from '../common/errors'; - -export class AutoOpsError extends BaseError {} diff --git a/x-pack/plugins/data_usage/server/services/index.ts b/x-pack/plugins/data_usage/server/services/index.ts index 56e449c8a5679..cf7a24e5ccba5 100644 --- a/x-pack/plugins/data_usage/server/services/index.ts +++ b/x-pack/plugins/data_usage/server/services/index.ts @@ -7,7 +7,7 @@ import { ValidationError } from '@kbn/config-schema'; import { Logger } from '@kbn/logging'; import type { MetricTypes } from '../../common/rest_types'; -import { AutoOpsError } from './errors'; +import { AutoOpsError } from '../errors'; import { AutoOpsAPIService } from './autoops_api'; export class DataUsageService { diff --git a/x-pack/test_serverless/api_integration/test_suites/common/data_usage/index.ts b/x-pack/test_serverless/api_integration/test_suites/common/data_usage/index.ts index cf31e1885d1d5..b0236e8dab722 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/data_usage/index.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/data_usage/index.ts @@ -11,6 +11,7 @@ export default function ({ loadTestFile }: FtrProviderContext) { describe('Serverless Data Usage APIs', function () { this.tags(['esGate']); + loadTestFile(require.resolve('./tests/data_streams_privileges')); loadTestFile(require.resolve('./tests/data_streams')); loadTestFile(require.resolve('./tests/metrics')); }); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/data_usage/tests/data_streams_privileges.ts b/x-pack/test_serverless/api_integration/test_suites/common/data_usage/tests/data_streams_privileges.ts new file mode 100644 index 0000000000000..9ea213b6d94ea --- /dev/null +++ b/x-pack/test_serverless/api_integration/test_suites/common/data_usage/tests/data_streams_privileges.ts @@ -0,0 +1,155 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { DataStreamsResponseBodySchemaBody } from '@kbn/data-usage-plugin/common/rest_types'; +import { DATA_USAGE_DATA_STREAMS_API_ROUTE } from '@kbn/data-usage-plugin/common'; +import type { RoleCredentials } from '@kbn/ftr-common-functional-services'; +import { + NoIndicesMeteringError, + NoPrivilegeMeteringError, +} from '@kbn/data-usage-plugin/server/errors'; +import { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function ({ getService }: FtrProviderContext) { + const svlDatastreamsHelpers = getService('svlDatastreamsHelpers'); + const svlCommonApi = getService('svlCommonApi'); + const samlAuth = getService('samlAuth'); + const supertestWithoutAuth = getService('supertestWithoutAuth'); + const testDataStreamName = 'test-data-stream'; + const otherTestDataStreamName = 'other-test-data-stream'; + let roleAuthc: RoleCredentials; + + describe('privileges with custom roles', function () { + // custom role testing is not supported in MKI + // the metering api which this route calls requires one of: monitor,view_index_metadata,manage,all + this.tags(['skipSvlOblt', 'skipMKI']); + before(async () => { + await svlDatastreamsHelpers.createDataStream(testDataStreamName); + await svlDatastreamsHelpers.createDataStream(otherTestDataStreamName); + }); + after(async () => { + await svlDatastreamsHelpers.deleteDataStream(testDataStreamName); + await svlDatastreamsHelpers.deleteDataStream(otherTestDataStreamName); + }); + afterEach(async () => { + await samlAuth.invalidateM2mApiKeyWithRoleScope(roleAuthc); + await samlAuth.deleteCustomRole(); + }); + it('returns all data streams for indices with necessary privileges', async () => { + await samlAuth.setCustomRole({ + elasticsearch: { + indices: [{ names: ['*'], privileges: ['all'] }], + }, + kibana: [ + { + base: ['all'], + feature: {}, + spaces: ['*'], + }, + ], + }); + roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope('customRole'); + const res = await supertestWithoutAuth + .get(DATA_USAGE_DATA_STREAMS_API_ROUTE) + .query({ includeZeroStorage: true }) + .set(svlCommonApi.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .set('elastic-api-version', '1'); + + const dataStreams: DataStreamsResponseBodySchemaBody = res.body; + const foundTestDataStream = dataStreams.find((stream) => stream.name === testDataStreamName); + const foundTestDataStream2 = dataStreams.find( + (stream) => stream.name === otherTestDataStreamName + ); + expect(res.statusCode).to.be(200); + expect(foundTestDataStream?.name).to.be(testDataStreamName); + expect(foundTestDataStream2?.name).to.be(otherTestDataStreamName); + }); + it('returns data streams for only a subset of indices with necessary privileges', async () => { + await samlAuth.setCustomRole({ + elasticsearch: { + indices: [{ names: ['test-data-stream*'], privileges: ['all'] }], + }, + kibana: [ + { + base: ['all'], + feature: {}, + spaces: ['*'], + }, + ], + }); + roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope('customRole'); + const res = await supertestWithoutAuth + .get(DATA_USAGE_DATA_STREAMS_API_ROUTE) + .query({ includeZeroStorage: true }) + .set(svlCommonApi.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .set('elastic-api-version', '1'); + + const dataStreams: DataStreamsResponseBodySchemaBody = res.body; + const foundTestDataStream = dataStreams.find((stream) => stream.name === testDataStreamName); + const dataStreamNoPermission = dataStreams.find( + (stream) => stream.name === otherTestDataStreamName + ); + + expect(res.statusCode).to.be(200); + expect(foundTestDataStream?.name).to.be(testDataStreamName); + expect(dataStreamNoPermission?.name).to.be(undefined); + }); + + it('returns no data streams without necessary privileges', async () => { + await samlAuth.setCustomRole({ + elasticsearch: { + indices: [{ names: ['*'], privileges: ['write'] }], + }, + kibana: [ + { + base: ['all'], + feature: {}, + spaces: ['*'], + }, + ], + }); + roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope('customRole'); + const res = await supertestWithoutAuth + .get(DATA_USAGE_DATA_STREAMS_API_ROUTE) + .query({ includeZeroStorage: true }) + .set(svlCommonApi.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .set('elastic-api-version', '1'); + + expect(res.statusCode).to.be(403); + expect(res.body.message).to.contain(new NoPrivilegeMeteringError().message); + }); + + it('returns no data streams when there are none it has access to', async () => { + await samlAuth.setCustomRole({ + elasticsearch: { + indices: [{ names: ['none*'], privileges: ['all'] }], + }, + kibana: [ + { + base: ['all'], + feature: {}, + spaces: ['*'], + }, + ], + }); + roleAuthc = await samlAuth.createM2mApiKeyWithRoleScope('customRole'); + const res = await supertestWithoutAuth + .get(DATA_USAGE_DATA_STREAMS_API_ROUTE) + .query({ includeZeroStorage: true }) + .set(svlCommonApi.getInternalRequestHeader()) + .set(roleAuthc.apiKeyHeader) + .set('elastic-api-version', '1'); + + expect(res.statusCode).to.be(404); + expect(res.body.message).to.contain(new NoIndicesMeteringError().message); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/data_usage/privileges.ts b/x-pack/test_serverless/functional/test_suites/common/data_usage/privileges.ts index e926b43aedfc4..4efcdd2586a85 100644 --- a/x-pack/test_serverless/functional/test_suites/common/data_usage/privileges.ts +++ b/x-pack/test_serverless/functional/test_suites/common/data_usage/privileges.ts @@ -5,6 +5,11 @@ * 2.0. */ +import expect from '@kbn/expect'; +import { + NoIndicesMeteringError, + NoPrivilegeMeteringError, +} from '@kbn/data-usage-plugin/server/errors'; import { FtrProviderContext } from '../../../ftr_provider_context'; export default ({ getPageObjects, getService }: FtrProviderContext) => { @@ -12,7 +17,9 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const testSubjects = getService('testSubjects'); const samlAuth = getService('samlAuth'); const retry = getService('retry'); + const es = getService('es'); const dataUsageAppUrl = 'management/data/data_usage'; + const toasts = getService('toasts'); const navigateAndVerify = async (expectedVisible: boolean) => { await pageObjects.common.navigateToApp('management'); @@ -32,6 +39,32 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }; describe('privileges', function () { + before(async () => { + await es.indices.putIndexTemplate({ + name: 'test-datastream', + body: { + index_patterns: ['test-datastream'], + data_stream: {}, + priority: 200, + }, + }); + + await es.indices.createDataStream({ name: 'test-datastream' }); + await es.indices.putIndexTemplate({ + name: 'no-permission-test-datastream', + body: { + index_patterns: ['no-permission-test-datastream'], + data_stream: {}, + priority: 200, + }, + }); + + await es.indices.createDataStream({ name: 'no-permission-test-datastream' }); + }); + after(async () => { + await es.indices.deleteDataStream({ name: 'test-datastream' }); + await es.indices.deleteDataStream({ name: 'no-permission-test-datastream' }); + }); it('renders for the admin role', async () => { await pageObjects.svlCommonPage.loginAsAdmin(); await navigateAndVerify(true); @@ -63,7 +96,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { afterEach(async () => { await samlAuth.deleteCustomRole(); }); - it('renders with a custom role that has the monitor cluster privilege', async () => { + it('renders with a custom role that has the privileges cluster: monitor and indices all', async () => { await samlAuth.setCustomRole({ elasticsearch: { cluster: ['monitor'], @@ -97,6 +130,72 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await pageObjects.svlCommonPage.loginWithCustomRole(); await navigateAndVerify(false); }); + + describe.skip('with custom role and data streams', function () { + // skip in all environments. requires a code change to the data_streams route + // to allow zero storage data streams to not be filtered out, but useful for testing. + // the api integration tests can pass a flag to get around this case but we can't in the UI. + // metering api requires one of: monitor,view_index_metadata,manage,all + it('does not load data streams without necessary index privilege for any index', async () => { + await samlAuth.setCustomRole({ + elasticsearch: { + cluster: ['monitor'], + indices: [{ names: ['*'], privileges: ['read'] }], + }, + kibana: [ + { + base: ['all'], + feature: {}, + spaces: ['*'], + }, + ], + }); + await pageObjects.svlCommonPage.loginWithCustomRole(); + await navigateAndVerify(true); + const toastContent = await toasts.getContentByIndex(1); + expect(toastContent).to.contain(NoPrivilegeMeteringError); + }); + + it('does load data streams with necessary index privilege for some indices', async () => { + await samlAuth.setCustomRole({ + elasticsearch: { + cluster: ['monitor'], + indices: [ + { names: ['test-datastream*'], privileges: ['all'] }, + { names: ['.*'], privileges: ['read'] }, + ], + }, + kibana: [ + { + base: ['all'], + feature: {}, + spaces: ['*'], + }, + ], + }); + await pageObjects.svlCommonPage.loginWithCustomRole(); + await navigateAndVerify(true); + }); + it('handles error when no data streams that it has permission to exist (index_not_found_exception)', async () => { + await samlAuth.setCustomRole({ + elasticsearch: { + cluster: ['monitor'], + indices: [{ names: ['none*'], privileges: ['all'] }], + }, + kibana: [ + { + base: ['all'], + feature: {}, + spaces: ['*'], + }, + ], + }); + await pageObjects.svlCommonPage.loginWithCustomRole(); + await navigateAndVerify(true); + const toastContent = await toasts.getContentByIndex(1); + expect(toastContent).to.contain(NoIndicesMeteringError); + }); + }); }); }); }; From 15b2379299a06752af1e1388e4bcf9f9bdb40361 Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Fri, 6 Dec 2024 10:58:55 -0500 Subject: [PATCH 126/141] Dependency ownership for Kibana Operations team, part 1 (#202904) ## Summary This updates our `renovate.json` configuration to mark the Kibana Operations team as owners of their set of dependencies. --------- Co-authored-by: Jeramy Soucy --- renovate.json | 1133 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1094 insertions(+), 39 deletions(-) diff --git a/renovate.json b/renovate.json index 1121043865aa2..71f80e1b67e11 100644 --- a/renovate.json +++ b/renovate.json @@ -712,7 +712,9 @@ { "groupName": "babel", "matchDepNames": [ - "@types/babel__core" + "@emotion/babel-preset-css-prop", + "@types/babel__core", + "babel-loader" ], "matchDepPatterns": [ "^@babel", @@ -726,16 +728,829 @@ ], "labels": [ "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "backport", + "matchDepNames": [ + "backport" + ], + "matchDepPatterns": [], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "bazel", + "matchDepNames": [], + "matchDepPatterns": [ + "^@bazel" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": false + }, + { + "groupName": "typescript", + "matchDepNames": [ + "typescript" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "json-stable-stringify", + "matchDepNames": [ + "json-stable-stringify", + "@types/json-stable-stringify" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "jsdom", + "matchDepNames": [ + "jsdom", + "@types/jsdom" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "license-checker", + "matchDepNames": [ + "license-checker", + "@types/license-checker" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "loader-utils", + "matchDepNames": [ + "loader-utils", + "@types/loader-utils" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "micromatch/minimatch", + "matchDepNames": [ + "micromatch", + "minimatch", + "@types/micromatch", + "@types/minimatch" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "nock", + "matchDepNames": [ + "nock", + "@types/nock" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "prettier", + "matchDepNames": [ + "prettier", + "eslint-plugin-prettier", + "eslint-config-prettier" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "allowedVersions": "<3.0", + "enabled": true + }, + { + "groupName": "eslint", + "matchDepNames": [ + "^@typescript-eslint", + "@elastic/eslint-plugin-eui", + "eslint", + "eslint-plugin-ban", + "eslint-plugin-cypress", + "eslint-plugin-depend", + "eslint-plugin-eslint-comments", + "eslint-plugin-formatjs", + "eslint-plugin-import", + "eslint-plugin-jest", + "eslint-plugin-jsx-a11y", + "eslint-plugin-mocha", + "eslint-plugin-no-unsanitized", + "eslint-plugin-node", + "eslint-plugin-react", + "eslint-plugin-react-hooks", + "eslint-plugin-react-perf", + "eslint-traverse", + "@types/eslint" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "execa", + "matchDepNames": [ + "execa" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "@elastic/makelogs", + "matchDepNames": [ + "@elastic/makelogs" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "polyfills", + "matchDepNames": [ + "blob-polyfill", + "core-js" + ], + "matchDepPatterns": [ + "polyfill" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "archiver", + "matchDepNames": [ + "archiver", + "@types/archiver" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "CLI tooling", + "matchDepNames": [ + "argsplit", + "chalk", + "cli-progress", + "cli-table3", + "commander", + "dedent", + "getopts", + "listr2", + "ora", + "@parcel/watcher", + "@types/cli-progress", + "@types/dedent", + "@types/ora" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "ejs", + "matchDepNames": [ + "ejs", + "@types/ejs" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "normalize-path", + "matchDepNames": [ + "normalize-path", + "@types/normalize-path" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "@statoscope/webpack-plugin", + "matchDepNames": [ + "@statoscope/webpack-plugin" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "mocha", + "matchDepNames": [ + "mocha", + "mocha-junit-reporter", + "mocha-multi-reporters", + "mochawesome", + "mochawesome-merge", + "regenerate" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "@octokit/rest", + "matchDepNames": [ + "@octokit/rest" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "picomatch", + "matchDepNames": [ + "picomatch", + "@types/picomatch" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "postcss", + "matchDepNames": [ + "postcss", + "postcss-scss" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "resolve", + "matchDepNames": [ + "resolve", + "@types/resolve" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "source-map", + "matchDepNames": [ + "source-map", + "source-map-support", + "@types/source-map-support" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "stylelint", + "matchDepNames": [ + "stylelint", + "stylelint-scss" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "vega related modules", + "matchDepNames": [ + "vega", + "vega-lite", + "vega-schema-url-parser", + "vega-tooltip" + ], + "reviewers": [ + "team:kibana-visualizations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Feature:Vega", + "Team:Visualizations" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "vinyl", + "matchDepNames": [ + "vinyl", + "vinyl-fs", + "@types/vinyl", + "@types/vinyl-fs" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "watchpack", + "matchDepNames": [ + "watchpack", + "@types/watchpack" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "webpack", + "matchDepNames": [ + "autoprefixer", + "clean-webpack-plugin", + "css-loader", + "file-loader", + "mini-css-extract-plugin", + "postcss-loader", + "raw-loader", + "sass-loader", + "style-loader", + "url-loader", + "val-loader", + "webpack", + "webpack-bundle-analyzer", + "webpack-cli", + "webpack-dev-server", + "webpack-merge", + "webpack-sources", + "webpack-visualizer-plugin2", + "@types/webpack", + "@types/webpack-bundle-analyzer", + "@types/webpack-env", + "@types/webpack-merge", + "@types/webpack-sources" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "yargs", + "matchDepNames": [ + "yargs", + "@types/yargs" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "yauzl/yazl", + "matchDepNames": [ + "yazl", + "yauzl", + "@types/yazl", + "@types/yauzl" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "package.json/yarn.lock utils", + "matchDepNames": [ + "@yarnpkg/lockfile", + "sort-package-json" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "aggregate-error", + "matchDepNames": [ + "aggregate-error" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "borc", + "matchDepNames": [ + "borc" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "cpy", + "matchDepNames": [ + "cpy" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "cssnano", + "matchDepNames": [ + "cssnano", + "cssnano-preset-default" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "del", + "matchDepNames": [ + "del" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", "release_note:skip" ], "minimumReleaseAge": "7 days", "enabled": true }, { - "groupName": "typescript", + "groupName": "exit-hook", "matchDepNames": [ - "typescript", - "@types/jsdom" + "exit-hook" ], "reviewers": [ "team:kibana-operations" @@ -745,17 +1560,16 @@ ], "labels": [ "Team:Operations", + "backport:all-open", "release_note:skip" ], "minimumReleaseAge": "7 days", "enabled": true }, { - "groupName": "prettier", + "groupName": "expect", "matchDepNames": [ - "prettier", - "eslint-plugin-prettier", - "eslint-config-prettier" + "expect" ], "reviewers": [ "team:kibana-operations" @@ -765,16 +1579,16 @@ ], "labels": [ "Team:Operations", + "backport:all-open", "release_note:skip" ], "minimumReleaseAge": "7 days", - "allowedVersions": "<3.0", "enabled": true }, { - "groupName": "typescript-eslint", - "matchDepPatterns": [ - "^@typescript-eslint" + "groupName": "expiry-js", + "matchDepNames": [ + "expiry-js" ], "reviewers": [ "team:kibana-operations" @@ -784,15 +1598,16 @@ ], "labels": [ "Team:Operations", + "backport:all-open", "release_note:skip" ], "minimumReleaseAge": "7 days", "enabled": true }, { - "groupName": "eslint-plugin-depend", - "matchDepPatterns": [ - "eslint-plugin-depend" + "groupName": "globby", + "matchDepNames": [ + "globby" ], "reviewers": [ "team:kibana-operations" @@ -802,18 +1617,35 @@ ], "labels": [ "Team:Operations", + "backport:all-open", "release_note:skip" ], "minimumReleaseAge": "7 days", "enabled": true }, { - "groupName": "polyfills", + "groupName": "ignore", "matchDepNames": [ - "core-js" + "ignore" ], - "matchDepPatterns": [ - "polyfill" + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "json-schema-typed", + "matchDepNames": [ + "json-schema-typed" ], "reviewers": [ "team:kibana-operations" @@ -823,15 +1655,16 @@ ], "labels": [ "Team:Operations", + "backport:all-open", "release_note:skip" ], "minimumReleaseAge": "7 days", "enabled": true }, { - "groupName": "CLI tooling", + "groupName": "lmdb", "matchDepNames": [ - "listr2" + "lmdb" ], "reviewers": [ "team:kibana-operations" @@ -848,22 +1681,211 @@ "enabled": true }, { - "groupName": "vega related modules", + "groupName": "pirates", "matchDepNames": [ - "vega", - "vega-lite", - "vega-schema-url-parser", - "vega-tooltip" + "pirates" ], "reviewers": [ - "team:kibana-visualizations" + "team:kibana-operations" ], "matchBaseBranches": [ "main" ], "labels": [ - "Feature:Vega", - "Team:Visualizations" + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "piscina", + "matchDepNames": [ + "piscina" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "proxy-from-env", + "matchDepNames": [ + "proxy-from-env" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "svgo", + "matchDepNames": [ + "svgo" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "symbol-observable", + "matchDepNames": [ + "symbol-observable" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "tree-kill", + "matchDepNames": [ + "tree-kill" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "ts-morph", + "matchDepNames": [ + "ts-morph" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "tsd", + "matchDepNames": [ + "tsd" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "tslib", + "matchDepNames": [ + "tslib" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "yarn-deduplicate", + "matchDepNames": [ + "yarn-deduplicate" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, + { + "groupName": "http2", + "matchDepNames": [ + "http2-proxy", + "http2-wrapper" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "backport:all-open", + "release_note:skip" ], "minimumReleaseAge": "7 days", "enabled": true @@ -971,7 +1993,8 @@ ], "labels": [ "Team:Operations", - "release_note:skip" + "release_note:skip", + "backport:all-open" ], "minimumReleaseAge": "7 days", "enabled": true @@ -995,11 +2018,35 @@ "minimumReleaseAge": "7 days", "enabled": true }, + { + "groupName": "inquirer", + "matchDepNames": [ + "inquirer", + "@types/inquirer" + ], + "reviewers": [ + "team:kibana-operations" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "Team:Operations", + "release_note:skip", + "backport:all-open" + ], + "minimumReleaseAge": "7 days", + "enabled": true + }, { "groupName": "minify", "matchDepNames": [ + "gulp-brotli", + "gulp-postcss", "gulp-terser", - "terser" + "terser", + "terser-webpack-plugin", + "@types/gulp" ], "reviewers": [ "team:kibana-operations" @@ -1009,7 +2056,8 @@ ], "labels": [ "Team:Operations", - "release_note:skip" + "release_note:skip", + "backport:all-open" ], "minimumReleaseAge": "7 days", "enabled": true @@ -1021,7 +2069,8 @@ "@testing-library/jest-dom", "@testing-library/react", "@testing-library/react-hooks", - "@testing-library/user-event" + "@testing-library/user-event", + "@types/testing-library__jest-dom" ], "reviewers": [ "team:kibana-operations" @@ -1031,7 +2080,8 @@ ], "labels": [ "Team:Operations", - "release_note:skip" + "release_note:skip", + "backport:all-open" ], "minimumReleaseAge": "7 days", "enabled": true @@ -1039,12 +2089,16 @@ { "groupName": "jest", "matchDepNames": [ + "@emotion/jest", "@jest/console", "@jest/reporters", + "@jest/transform", "@jest/types", + "@types/jest", "babel-jest", "expect", "jest", + "jest-canvas-mock", "jest-cli", "jest-config", "jest-diff", @@ -1052,7 +2106,10 @@ "jest-matcher-utils", "jest-mock", "jest-runtime", - "jest-snapshot" + "jest-specific-snapshot", + "jest-snapshot", + "jest-styled-components", + "mutation-observer" ], "reviewers": [ "team:kibana-operations" @@ -1062,7 +2119,8 @@ ], "labels": [ "Team:Operations", - "release_note:skip" + "release_note:skip", + "backport:all-open" ], "minimumReleaseAge": "7 days", "enabled": true @@ -1078,9 +2136,6 @@ "matchDepPatterns": [ "^@storybook" ], - "excludeDepNames": [ - "@storybook/testing-react" - ], "labels": [ "Team:Operations", "release_note:skip", From 724d110a2793be3fa124319986fd3c04c6410b2e Mon Sep 17 00:00:00 2001 From: Pierre Gayvallet Date: Fri, 6 Dec 2024 17:55:59 +0100 Subject: [PATCH 127/141] Add documentation for airgap install of the product documentation (#202912) ## Summary Part of https://github.com/elastic/kibana/issues/199999 Add documentation regarding how to install the AI Assistant product documentation on air-gap environments. --- docs/settings/ai-assistant-settings.asciidoc | 117 ++++++++++++++++++ docs/setup/settings.asciidoc | 1 + .../resources/base/bin/kibana-docker | 1 + 3 files changed, 119 insertions(+) create mode 100644 docs/settings/ai-assistant-settings.asciidoc diff --git a/docs/settings/ai-assistant-settings.asciidoc b/docs/settings/ai-assistant-settings.asciidoc new file mode 100644 index 0000000000000..a2b62c75a9247 --- /dev/null +++ b/docs/settings/ai-assistant-settings.asciidoc @@ -0,0 +1,117 @@ +[role="xpack"] +[[ai-assistant-settings-kb]] +=== AI Assistant settings in {kib} +++++ +AI Assistant settings +++++ + +`xpack.productDocBase.artifactRepositoryUrl`:: +Url of the repository to use to download and install the Elastic product documentation artifacts for the AI assistants. +Defaults to `https://kibana-knowledge-base-artifacts.elastic.co` + +[[configuring-product-doc-for-airgap]] +==== Configuring product documentation for air-gapped environments + +Installing product documentation requires network access to its artifact repository. +For air-gapped environments, or environments where remote network traffic is blocked or filtered, +the artifact repository must be manually deployed somewhere accessible by the Kibana deployment. + +Deploying a custom product documentation repository can be done in 2 ways: using a S3 bucket, or using a CDN. + +===== Deploying using a S3 bucket + +*1. Download the artifacts for your current {kib} version* + +The artifact names follow this pattern: `kb-product-doc-{productName}-{versionMajor}.{versionMinor}.zip` + +The available products are: +- elasticsearch +- kibana +- observability +- security + +You must download, from the source repository (`https://kibana-knowledge-base-artifacts.elastic.co/`), +the artifacts for your current version of Kibana. + +For example, for Kibana 8.16: +- `kb-product-doc-elasticsearch-8.16.zip` +- `kb-product-doc-kibana-8.16.zip` +- `kb-product-doc-observability-8.16.zip` +- `kb-product-doc-security-8.16.zip` + +*2. Upload the artifacts to your local S3 bucket* + +Upload the artifact files to your custom S3 bucket, then make sure that they are properly listed in the bucket's index, similar to +the bucket listing displayed when accessing `https://kibana-knowledge-base-artifacts.elastic.co/` in a browser. + +*3. Configure {kib} to use the custom repository* + +Add the following line to your {kib} configuration file: + +[source,yaml] +---- +# Replace with the root of your custom bucket +xpack.productDocBase.artifactRepositoryUrl: "https://my-custom-repository.example.com" +---- + +*4. Restart {kib}* + +You should then be able to install the product documentation feature from the AI assistant management page. + +===== Deploying using a CDN + +Deploying using a CDN is quite similar to the S3 bucket approach. The main difference will be that we will need to manually +generate the bucket listing and set it as the CDN folder's index page. + +*1. Download the artifacts for your current {kib} version* + +Following the step from the `Deploying using a S3 bucket` section + +*2. Upload the artifacts to the CDN* + +Create a folder in your CDN, and upload the artifacts to it. + +*3. Create and upload the bucket listing* + +Generate the S3 bucket listing xml file for the folder. + +To do that, copy the following template, and replace the versions in the `` tags with your current version of {kib}. + +For example for {kib} 8.17, replace all `8.16` occurrences in the file with `8.17`. + +[source,xml] +---- + + kibana-ai-assistant-kb-artifacts + false + + kb-product-doc-elasticsearch-8.16.zip + + + kb-product-doc-kibana-8.16.zip + + + kb-product-doc-observability-8.16.zip + + + kb-product-doc-security-8.16.zip + + +---- + +Then upload that xml file to the same CDN folder where the artifacts were uploaded, and then configure the folder to have that file +served as the folder's index. + +*4. Configure {kib} to use the custom repository* + +Add the following line to your {kib} configuration file: + +[source,yaml] +---- +# Replace with the path to the CDN folder previously configured +xpack.productDocBase.artifactRepositoryUrl: "https://my-custom-repository.example.com" +---- + +*5. Restart {kib}* + +You should then be able to install the product documentation feature from the AI assistant management page. \ No newline at end of file diff --git a/docs/setup/settings.asciidoc b/docs/setup/settings.asciidoc index 4e452c63cf3b1..51064981fab85 100644 --- a/docs/setup/settings.asciidoc +++ b/docs/setup/settings.asciidoc @@ -650,6 +650,7 @@ Set this value to false to disable the Upgrade Assistant UI. *Default: true* Set this value to change the {kib} interface language. Valid locales are: `en`, `zh-CN`, `ja-JP`, `fr-FR`. *Default: `en`* +include::{kibana-root}/docs/settings/ai-assistant-settings.asciidoc[] include::{kibana-root}/docs/settings/alert-action-settings.asciidoc[leveloffset=+1] include::{kibana-root}/docs/settings/apm-settings.asciidoc[] include::{kibana-root}/docs/settings/banners-settings.asciidoc[] 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 e751997a1fb78..4bd937d3fc8fd 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 @@ -313,6 +313,7 @@ kibana_vars=( xpack.observability.unsafe.alertDetails.uptime.enabled xpack.observability.unsafe.alertDetails.observability.enabled xpack.observability.unsafe.thresholdRule.enabled + xpack.productDocBase.artifactRepositoryUrl xpack.reporting.capture.browser.autoDownload xpack.reporting.capture.browser.chromium.disableSandbox xpack.reporting.capture.browser.chromium.maxScreenshotDimension From 5ca3e8abedd04f60048cbf7fbaa280ea0c9fdfd8 Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Fri, 6 Dec 2024 17:58:47 +0100 Subject: [PATCH 128/141] [Discover] Remove discover:searchFieldsFromSource setting (#202679) - Closes https://github.com/elastic/kibana/issues/196501 ## Summary The PR removes `discover:searchFieldsFromSource` Advanced Setting and the associated code. This breaking change is planned for v9. The setting was marked as deprecated in v8.15 https://github.com/elastic/kibana/pull/185871 ### Checklist - [x] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [x] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- docs/management/advanced-options.asciidoc | 6 - .../data_table_react_embeddable.tsx | 1 - packages/kbn-discover-utils/index.ts | 1 - packages/kbn-discover-utils/src/constants.ts | 1 - .../settings/setting_ids/index.ts | 1 - packages/kbn-unified-data-table/README.md | 3 - .../src/components/actions/columns.test.ts | 1 - .../src/components/actions/columns.ts | 22 +- .../src/components/data_table.test.tsx | 2 - .../src/components/data_table.tsx | 7 - .../src/hooks/use_data_grid_columns.test.tsx | 4 +- .../src/hooks/use_data_grid_columns.ts | 25 +- .../src/utils/get_render_cell_value.test.tsx | 17 - .../src/utils/get_render_cell_value.tsx | 7 +- .../field_list_sidebar.tsx | 8 +- .../with_discover_services.tsx | 3 - .../discover/public/__mocks__/ui_settings.ts | 3 - .../application/context/context_app.tsx | 7 +- .../context/context_app_content.test.tsx | 1 - .../context/context_app_content.tsx | 3 - .../hooks/use_context_app_fetch.test.tsx | 1 - .../context/hooks/use_context_app_fetch.tsx | 20 +- .../context.predecessors.test.ts.snap | 9 + .../context.successors.test.ts.snap | 9 + .../__snapshots__/context.test.ts.snap | 23 +- .../context/services/anchor.test.ts | 71 +- .../application/context/services/anchor.ts | 12 +- .../services/context.predecessors.test.ts | 4 +- .../services/context.successors.test.ts | 5 +- .../context/services/context.test.ts | 9 +- .../application/context/services/context.ts | 14 +- .../context/services/context_state.test.ts | 12 +- .../application/doc/components/doc.test.tsx | 8 - .../field_stats_table/field_stats_table.tsx | 2 +- .../components/layout/discover_documents.tsx | 6 +- .../components/layout/discover_layout.tsx | 9 +- .../main/data_fetching/fetch_all.test.ts | 3 - .../main/data_fetching/fetch_all.ts | 1 - .../update_search_source.test.ts | 50 +- .../data_fetching/update_search_source.ts | 11 +- .../discover_data_state_container.ts | 7 +- .../utils/get_state_defaults.ts | 9 +- .../search_embeddable_grid_component.tsx | 9 +- .../public/embeddable/initialize_fetch.ts | 3 - .../utils/update_search_source.test.ts | 24 - .../embeddable/utils/update_search_source.ts | 10 +- .../public/utils/get_sharing_data.test.ts | 48 +- .../discover/public/utils/get_sharing_data.ts | 36 +- .../discover/public/utils/state_helpers.ts | 37 +- .../server/locator/columns_from_locator.ts | 9 +- src/plugins/discover/server/ui_settings.ts | 24 - .../esql_datagrid/public/data_grid.tsx | 1 - .../server/collectors/management/schema.ts | 4 - .../server/collectors/management/types.ts | 1 - src/plugins/telemetry/schema/oss_plugins.json | 6 - .../doc_viewer_source/source.test.tsx | 11 - .../components/doc_viewer_source/source.tsx | 5 - .../public/hooks/use_es_doc_search.test.tsx | 100 +-- .../public/hooks/use_es_doc_search.ts | 50 +- .../discover/group4/_discover_fields_api.ts | 26 +- .../apps/discover/group5/_field_data.ts | 105 --- .../group5/_field_data_with_fields_api.ts | 27 +- .../apps/discover/group5/_source_filters.ts | 1 - test/functional/apps/discover/group5/index.ts | 1 - .../discover/group6/_field_stats_table.ts | 51 +- .../apps/discover/group6/_sidebar.ts | 41 - .../_indexpattern_with_unmapped_fields.ts | 2 - .../discover/group7/_runtime_fields_editor.ts | 1 - .../cloud_security_data_table.tsx | 4 - .../data_view_management.tsx | 8 +- .../index_data_visualizer_view.tsx | 5 +- .../components/common/documents_table.tsx | 1 - .../unified_components/data_table/index.tsx | 1 - .../timeline/unified_components/index.tsx | 1 - .../translations/translations/fr-FR.json | 3 - .../translations/translations/ja-JP.json | 3 - .../translations/translations/zh-CN.json | 3 - .../discover/__snapshots__/reporting.snap | 745 ------------------ .../functional/apps/discover/reporting.ts | 20 - .../common/discover/group6/_sidebar.ts | 43 - .../x_pack/__snapshots__/reporting.snap | 745 ------------------ .../common/discover/x_pack/reporting.ts | 23 - 82 files changed, 182 insertions(+), 2474 deletions(-) delete mode 100644 test/functional/apps/discover/group5/_field_data.ts diff --git a/docs/management/advanced-options.asciidoc b/docs/management/advanced-options.asciidoc index a2af3b91931af..ef6d6306792b1 100644 --- a/docs/management/advanced-options.asciidoc +++ b/docs/management/advanced-options.asciidoc @@ -309,12 +309,6 @@ Limits the number of rows per page in the document table. [[discover-sample-size]]`discover:sampleSize`:: Sets the maximum number of rows for the entire document table. This is the maximum number of documents fetched from {es}. -[[discover-searchFieldsFromSource]]`discover:searchFieldsFromSource`:: -deprecated:[8.15.0] -Load fields from the original JSON {ref}/mapping-source-field.html[`_source`]. -When disabled, *Discover* loads fields using the {es} search API's -{ref}/search-fields.html#search-fields-param[`fields`] parameter. - [[discover-searchonpageload]]`discover:searchOnPageLoad`:: Controls whether a search is executed when *Discover* first loads. This setting does not have an effect when loading a saved search. diff --git a/examples/embeddable_examples/public/react_embeddables/data_table/data_table_react_embeddable.tsx b/examples/embeddable_examples/public/react_embeddables/data_table/data_table_react_embeddable.tsx index 40bb9186e16a5..54046eb5afa02 100644 --- a/examples/embeddable_examples/public/react_embeddables/data_table/data_table_react_embeddable.tsx +++ b/examples/embeddable_examples/public/react_embeddables/data_table/data_table_react_embeddable.tsx @@ -112,7 +112,6 @@ export const getDataTableFactory = ( dataView={dataView} sampleSizeState={100} columns={fields ?? []} - useNewFieldsApi={true} services={allServices} onSetColumns={() => {}} ariaLabelledBy="dataTableReactEmbeddableAria" diff --git a/packages/kbn-discover-utils/index.ts b/packages/kbn-discover-utils/index.ts index 93481c681d930..d344e2640371f 100644 --- a/packages/kbn-discover-utils/index.ts +++ b/packages/kbn-discover-utils/index.ts @@ -22,7 +22,6 @@ export { SAMPLE_ROWS_PER_PAGE_SETTING, SAMPLE_SIZE_SETTING, SEARCH_EMBEDDABLE_TYPE, - SEARCH_FIELDS_FROM_SOURCE, SEARCH_ON_PAGE_LOAD_SETTING, SHOW_FIELD_STATISTICS, SHOW_MULTIFIELDS, diff --git a/packages/kbn-discover-utils/src/constants.ts b/packages/kbn-discover-utils/src/constants.ts index 005f6f7687109..068741ef84ad6 100644 --- a/packages/kbn-discover-utils/src/constants.ts +++ b/packages/kbn-discover-utils/src/constants.ts @@ -20,7 +20,6 @@ export const ROW_HEIGHT_OPTION = 'discover:rowHeightOption'; export const SAMPLE_ROWS_PER_PAGE_SETTING = 'discover:sampleRowsPerPage'; export const SAMPLE_SIZE_SETTING = 'discover:sampleSize'; export const SEARCH_EMBEDDABLE_TYPE = 'search'; -export const SEARCH_FIELDS_FROM_SOURCE = 'discover:searchFieldsFromSource'; export const SEARCH_ON_PAGE_LOAD_SETTING = 'discover:searchOnPageLoad'; export const SHOW_FIELD_STATISTICS = 'discover:showFieldStatistics'; export const SHOW_MULTIFIELDS = 'discover:showMultiFields'; diff --git a/packages/kbn-management/settings/setting_ids/index.ts b/packages/kbn-management/settings/setting_ids/index.ts index 438e216ab8f32..0a1b3e2bcdade 100644 --- a/packages/kbn-management/settings/setting_ids/index.ts +++ b/packages/kbn-management/settings/setting_ids/index.ts @@ -80,7 +80,6 @@ export const DISCOVER_MODIFY_COLUMNS_ON_SWITCH_ID = 'discover:modifyColumnsOnSwi export const DISCOVER_ROW_HEIGHT_OPTION_ID = 'discover:rowHeightOption'; export const DISCOVER_SAMPLE_ROWS_PER_PAGE_ID = 'discover:sampleRowsPerPage'; export const DISCOVER_SAMPLE_SIZE_ID = 'discover:sampleSize'; -export const DISCOVER_SEARCH_FIELDS_FROM_SOURCE_ID = 'discover:searchFieldsFromSource'; export const DISCOVER_SEARCH_ON_PAGE_LOAD_ID = 'discover:searchOnPageLoad'; export const DISCOVER_SHOW_FIELD_STATISTICS_ID = 'discover:showFieldStatistics'; export const DISCOVER_SHOW_MULTI_FIELDS_ID = 'discover:showMultiFields'; diff --git a/packages/kbn-unified-data-table/README.md b/packages/kbn-unified-data-table/README.md index 0dd94c7c0977d..a6927eaae69b4 100644 --- a/packages/kbn-unified-data-table/README.md +++ b/packages/kbn-unified-data-table/README.md @@ -26,7 +26,6 @@ Props description: | **showFullScreenButton** | (optional)boolean | Determines whether the full screen button should be displayed. | | **isSortEnabled** | (optional)boolean | Manage user sorting control. | | **sort** | SortOrder[] | Current sort setting. | -| **useNewFieldsApi** | boolean | How the data is fetched. | | **isPaginationEnabled** | (optional)boolean | Manage pagination control. | | **controlColumnIds** | (optional)string[] | List of used control columns (available: 'openDetails', 'select'). | | **rowHeightState** | (optional)number | Row height from state. | @@ -145,7 +144,6 @@ Usage example: renderCustomGridBody={renderCustomGridBody} rowsPerPageOptions={[10, 30, 40, 100]} showFullScreenButton={false} - useNewFieldsApi={true} maxDocFieldsDisplayed={50} consumer="timeline" totalHits={ @@ -210,7 +208,6 @@ const { dataView, dataViews, setAppState: stateContainer.appState.update, - useNewFieldsApi, columns, sort, }); diff --git a/packages/kbn-unified-data-table/src/components/actions/columns.test.ts b/packages/kbn-unified-data-table/src/components/actions/columns.test.ts index 8850a7f8caf1c..370ea3b2a20de 100644 --- a/packages/kbn-unified-data-table/src/components/actions/columns.test.ts +++ b/packages/kbn-unified-data-table/src/components/actions/columns.test.ts @@ -25,7 +25,6 @@ function getStateColumnAction( } as unknown as Capabilities, dataView: dataViewMock, dataViews: dataViewsMock, - useNewFieldsApi: true, setAppState, columns: state.columns, sort: state.sort, diff --git a/packages/kbn-unified-data-table/src/components/actions/columns.ts b/packages/kbn-unified-data-table/src/components/actions/columns.ts index 50682df14721c..97d00340a01f3 100644 --- a/packages/kbn-unified-data-table/src/components/actions/columns.ts +++ b/packages/kbn-unified-data-table/src/components/actions/columns.ts @@ -18,7 +18,6 @@ export function getStateColumnActions({ capabilities, dataView, dataViews, - useNewFieldsApi, setAppState, columns, sort, @@ -28,7 +27,6 @@ export function getStateColumnActions({ capabilities: Capabilities; dataView: DataView; dataViews: DataViewsContract; - useNewFieldsApi: boolean; setAppState: (state: { columns: string[]; sort?: string[][]; @@ -41,7 +39,7 @@ export function getStateColumnActions({ }) { function onAddColumn(columnName: string) { popularizeField(dataView, columnName, dataViews, capabilities); - const nextColumns = addColumn(columns || [], columnName, useNewFieldsApi); + const nextColumns = addColumn(columns || [], columnName); const nextSort = columnName === '_score' && !sort?.length ? [['_score', defaultOrder]] : sort; setAppState({ columns: nextColumns, sort: nextSort, settings }); } @@ -49,7 +47,7 @@ export function getStateColumnActions({ function onRemoveColumn(columnName: string) { popularizeField(dataView, columnName, dataViews, capabilities); - const nextColumns = removeColumn(columns || [], columnName, useNewFieldsApi); + const nextColumns = removeColumn(columns || [], columnName); // The state's sort property is an array of [sortByColumn,sortDirection] const nextSort = sort && sort.length ? sort.filter((subArr) => subArr[0] !== columnName) : []; @@ -98,32 +96,28 @@ export function getStateColumnActions({ * Helper function to provide a fallback to a single _source column if the given array of columns * is empty, and removes _source if there are more than 1 columns given * @param columns - * @param useNewFieldsApi should a new fields API be used */ -function buildColumns(columns: string[], useNewFieldsApi = false) { +function buildColumns(columns: string[]) { if (columns.length > 1 && columns.indexOf('_source') !== -1) { return columns.filter((col) => col !== '_source'); } else if (columns.length !== 0) { return columns; } - return useNewFieldsApi ? [] : ['_source']; + return []; } -function addColumn(columns: string[], columnName: string, useNewFieldsApi?: boolean) { +function addColumn(columns: string[], columnName: string) { if (columns.includes(columnName)) { return columns; } - return buildColumns([...columns, columnName], useNewFieldsApi); + return buildColumns([...columns, columnName]); } -function removeColumn(columns: string[], columnName: string, useNewFieldsApi?: boolean) { +function removeColumn(columns: string[], columnName: string) { if (!columns.includes(columnName)) { return columns; } - return buildColumns( - columns.filter((col) => col !== columnName), - useNewFieldsApi - ); + return buildColumns(columns.filter((col) => col !== columnName)); } function moveColumn(columns: string[], columnName: string, newIndex: number) { diff --git a/packages/kbn-unified-data-table/src/components/data_table.test.tsx b/packages/kbn-unified-data-table/src/components/data_table.test.tsx index 3ee4e5a9e7a13..c52d9377112b7 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.test.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.test.tsx @@ -82,7 +82,6 @@ function getProps(): UnifiedDataTableProps { settings: {}, showTimeCol: true, sort: [], - useNewFieldsApi: true, services: { fieldFormats: services.fieldFormats, uiSettings: services.uiSettings, @@ -124,7 +123,6 @@ const renderDataTable = async (props: Partial) => { setSettings(state.settings); } }, []), - useNewFieldsApi: true, columns, settings, }); diff --git a/packages/kbn-unified-data-table/src/components/data_table.tsx b/packages/kbn-unified-data-table/src/components/data_table.tsx index 7f4297404c4e5..abaec0f6a98e3 100644 --- a/packages/kbn-unified-data-table/src/components/data_table.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table.tsx @@ -217,10 +217,6 @@ export interface UnifiedDataTableProps { * Current sort setting */ sort: SortOrder[]; - /** - * How the data is fetched - */ - useNewFieldsApi: boolean; /** * Manage pagination control */ @@ -454,7 +450,6 @@ export const UnifiedDataTable = ({ showTimeCol, showFullScreenButton = true, sort, - useNewFieldsApi, isSortEnabled = true, isPaginationEnabled = true, cellActionsTriggerId, @@ -716,7 +711,6 @@ export const UnifiedDataTable = ({ getRenderCellValueFn({ dataView, rows: displayedRows, - useNewFieldsApi, shouldShowFieldHandler, closePopover: () => dataGridRef.current?.closeCellPopover(), fieldFormats, @@ -728,7 +722,6 @@ export const UnifiedDataTable = ({ [ dataView, displayedRows, - useNewFieldsApi, shouldShowFieldHandler, maxDocFieldsDisplayed, fieldFormats, diff --git a/packages/kbn-unified-data-table/src/hooks/use_data_grid_columns.test.tsx b/packages/kbn-unified-data-table/src/hooks/use_data_grid_columns.test.tsx index 31b1b42b7c6d0..f0c9ef46ebac3 100644 --- a/packages/kbn-unified-data-table/src/hooks/use_data_grid_columns.test.tsx +++ b/packages/kbn-unified-data-table/src/hooks/use_data_grid_columns.test.tsx @@ -22,7 +22,6 @@ describe('useColumns', () => { dataViews: dataViewsMock, setAppState: () => {}, columns: ['Time', 'message'], - useNewFieldsApi: false, }; test('should return valid result', () => { @@ -37,12 +36,11 @@ describe('useColumns', () => { expect(result.current.onSetColumns).toBeInstanceOf(Function); }); - test('should skip _source column when useNewFieldsApi is set to true', () => { + test('should skip _source column', () => { const { result } = renderHook(() => { return useColumns({ ...defaultProps, columns: ['Time', '_source'], - useNewFieldsApi: true, }); }); diff --git a/packages/kbn-unified-data-table/src/hooks/use_data_grid_columns.ts b/packages/kbn-unified-data-table/src/hooks/use_data_grid_columns.ts index be4843eec2c3c..e5f9c629b4b76 100644 --- a/packages/kbn-unified-data-table/src/hooks/use_data_grid_columns.ts +++ b/packages/kbn-unified-data-table/src/hooks/use_data_grid_columns.ts @@ -19,7 +19,6 @@ export interface UseColumnsProps { capabilities: Capabilities; dataView: DataView; dataViews: DataViewsContract; - useNewFieldsApi: boolean; setAppState: (state: { columns: string[]; sort?: string[][]; @@ -36,20 +35,19 @@ export const useColumns = ({ dataView, dataViews, setAppState, - useNewFieldsApi, columns, sort, defaultOrder = 'desc', settings, }: UseColumnsProps) => { - const [usedColumns, setUsedColumns] = useState(getColumns(columns, useNewFieldsApi)); + const [usedColumns, setUsedColumns] = useState(getColumns(columns)); useEffect(() => { - const nextColumns = getColumns(columns, useNewFieldsApi); + const nextColumns = getColumns(columns); if (isEqual(usedColumns, nextColumns)) { return; } setUsedColumns(nextColumns); - }, [columns, useNewFieldsApi, usedColumns]); + }, [columns, usedColumns]); const { onAddColumn, onRemoveColumn, onSetColumns, onMoveColumn } = useMemo( () => getStateColumnActions({ @@ -57,23 +55,12 @@ export const useColumns = ({ dataView, dataViews, setAppState, - useNewFieldsApi, columns: usedColumns, sort, defaultOrder, settings, }), - [ - capabilities, - dataView, - dataViews, - defaultOrder, - setAppState, - settings, - sort, - useNewFieldsApi, - usedColumns, - ] + [capabilities, dataView, dataViews, defaultOrder, setAppState, settings, sort, usedColumns] ); return { @@ -85,9 +72,9 @@ export const useColumns = ({ }; }; -function getColumns(columns: string[] | undefined, useNewFieldsApi: boolean) { +function getColumns(columns: string[] | undefined) { if (!columns) { return []; } - return useNewFieldsApi ? columns.filter((col) => col !== '_source') : columns; + return columns.filter((col) => col !== '_source'); } diff --git a/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx b/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx index 11636b9d1f761..0dfeb1f691e88 100644 --- a/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx +++ b/packages/kbn-unified-data-table/src/utils/get_render_cell_value.test.tsx @@ -113,7 +113,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows: rowsSource.map(build), - useNewFieldsApi: false, shouldShowFieldHandler: () => false, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -139,7 +138,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows: rowsSource.map(build), - useNewFieldsApi: false, shouldShowFieldHandler: () => false, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -166,7 +164,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows: rowsFields.map(build), - useNewFieldsApi: false, shouldShowFieldHandler: () => false, closePopover: closePopoverMockFn, fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -196,7 +193,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows, - useNewFieldsApi: false, shouldShowFieldHandler: showFieldHandler, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -233,7 +229,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows: rowsSource.map(build), - useNewFieldsApi: false, shouldShowFieldHandler: () => false, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -300,7 +295,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows, - useNewFieldsApi: false, shouldShowFieldHandler: showFieldHandler, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -341,7 +335,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows, - useNewFieldsApi: true, shouldShowFieldHandler: showFieldHandler, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -380,7 +373,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows, - useNewFieldsApi: true, shouldShowFieldHandler: showFieldHandler, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -418,7 +410,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows: rowsFields.map(build), - useNewFieldsApi: true, shouldShowFieldHandler: (fieldName: string) => false, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -495,7 +486,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows, - useNewFieldsApi: true, shouldShowFieldHandler: showFieldHandler, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -536,7 +526,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows, - useNewFieldsApi: true, shouldShowFieldHandler: showFieldHandler, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -574,7 +563,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows: rowsFieldsWithTopLevelObject.map(build), - useNewFieldsApi: true, shouldShowFieldHandler: () => false, closePopover: closePopoverMockFn, fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -649,7 +637,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows: rowsFieldsWithTopLevelObject.map(build), - useNewFieldsApi: true, shouldShowFieldHandler: () => false, closePopover: closePopoverMockFn, fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -678,7 +665,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows: rowsFieldsWithTopLevelObject.map(build), - useNewFieldsApi: true, shouldShowFieldHandler: () => false, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -713,7 +699,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows: rowsSource.map(build), - useNewFieldsApi: false, shouldShowFieldHandler: () => false, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -739,7 +724,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows: rowsSource.map(build), - useNewFieldsApi: false, shouldShowFieldHandler: () => false, closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, @@ -778,7 +762,6 @@ describe('Unified data table cell rendering', function () { const DataTableCellValue = getRenderCellValueFn({ dataView: dataViewMock, rows: rowsFieldsUnmapped.map(build), - useNewFieldsApi: true, shouldShowFieldHandler: (fieldName: string) => ['unmapped'].includes(fieldName), closePopover: jest.fn(), fieldFormats: mockServices.fieldFormats as unknown as FieldFormatsStart, diff --git a/packages/kbn-unified-data-table/src/utils/get_render_cell_value.tsx b/packages/kbn-unified-data-table/src/utils/get_render_cell_value.tsx index 585feb675016c..f05499f7618b9 100644 --- a/packages/kbn-unified-data-table/src/utils/get_render_cell_value.tsx +++ b/packages/kbn-unified-data-table/src/utils/get_render_cell_value.tsx @@ -32,7 +32,6 @@ const IS_JEST_ENVIRONMENT = typeof jest !== 'undefined'; export const getRenderCellValueFn = ({ dataView, rows, - useNewFieldsApi, shouldShowFieldHandler, closePopover, fieldFormats, @@ -43,7 +42,6 @@ export const getRenderCellValueFn = ({ }: { dataView: DataView; rows: DataTableRecord[] | undefined; - useNewFieldsApi: boolean; shouldShowFieldHandler: ShouldShowFieldInTableHandler; closePopover: () => void; fieldFormats: FieldFormatsStart; @@ -111,10 +109,7 @@ export const getRenderCellValueFn = ({ * this is used for legacy stuff like displaying products of our ecommerce dataset */ const useTopLevelObjectColumns = Boolean( - useNewFieldsApi && - !field && - row?.raw.fields && - !(row.raw.fields as Record)[columnId] + !field && row?.raw.fields && !(row.raw.fields as Record)[columnId] ); if (isDetails) { diff --git a/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.tsx b/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.tsx index 2d23903c34ea3..7d98764279016 100644 --- a/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.tsx +++ b/packages/kbn-unified-field-list/src/containers/unified_field_list_sidebar/field_list_sidebar.tsx @@ -25,7 +25,7 @@ import { import { ToolbarButton } from '@kbn/shared-ux-button-toolbar'; import { DataViewField, type FieldSpec } from '@kbn/data-views-plugin/common'; import { getDataViewFieldSubtypeMulti } from '@kbn/es-query/src/utils'; -import { FIELDS_LIMIT_SETTING, SEARCH_FIELDS_FROM_SOURCE } from '@kbn/discover-utils'; +import { FIELDS_LIMIT_SETTING } from '@kbn/discover-utils'; import { FieldList } from '../../components/field_list'; import { FieldListFilters } from '../../components/field_list_filters'; import { FieldListGrouped, type FieldListGroupedProps } from '../../components/field_list_grouped'; @@ -174,10 +174,6 @@ export const UnifiedFieldListSidebarComponent: React.FC { const { dataViews, core } = services; - const useNewFieldsApi = useMemo( - () => !core.uiSettings.get(SEARCH_FIELDS_FROM_SOURCE), - [core.uiSettings] - ); const [selectedFieldsState, setSelectedFieldsState] = useState( INITIAL_SELECTED_FIELDS_RESULT @@ -244,7 +240,6 @@ export const UnifiedFieldListSidebarComponent: React.FC { if ( searchMode !== 'documents' || - !useNewFieldsApi || stateService.creationOptions.disableMultiFieldsGroupingByParent ) { setMultiFieldsMap(undefined); // we don't have to calculate multifields in this case @@ -257,7 +252,6 @@ export const UnifiedFieldListSidebarComponent: React.FC fieldsMetadata, } = services; - const useNewFieldsApi = useMemo(() => !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE), [uiSettings]); - /** * Context app state */ @@ -79,7 +77,6 @@ export const ContextApp = ({ dataView, anchorId, referrer }: ContextAppProps) => defaultOrder: uiSettings.get(SORT_DEFAULT_ORDER_SETTING), dataView, dataViews, - useNewFieldsApi, setAppState, columns: appState.columns, sort: appState.sort, @@ -110,7 +107,6 @@ export const ContextApp = ({ dataView, anchorId, referrer }: ContextAppProps) => anchorId, dataView, appState, - useNewFieldsApi, }); /** @@ -284,7 +280,6 @@ export const ContextApp = ({ dataView, anchorId, referrer }: ContextAppProps) => { defaultStepSize: 5, predecessorCount: 10, successorCount: 10, - useNewFieldsApi: true, isPaginationEnabled: false, onAddColumn: () => {}, onRemoveColumn: () => {}, diff --git a/src/plugins/discover/public/application/context/context_app_content.tsx b/src/plugins/discover/public/application/context/context_app_content.tsx index ed54b4f8145e2..6108f4d3485fc 100644 --- a/src/plugins/discover/public/application/context/context_app_content.tsx +++ b/src/plugins/discover/public/application/context/context_app_content.tsx @@ -70,7 +70,6 @@ export interface ContextAppContentProps { predecessorsStatus: LoadingStatus; successorsStatus: LoadingStatus; interceptedWarnings: SearchResponseWarning[]; - useNewFieldsApi: boolean; setAppState: (newState: Partial) => void; addFilter: DocViewFilterFn; } @@ -100,7 +99,6 @@ export function ContextAppContent({ predecessorsStatus, successorsStatus, interceptedWarnings, - useNewFieldsApi, setAppState, addFilter, }: ContextAppContentProps) { @@ -225,7 +223,6 @@ export function ContextAppContent({ sort={sort as SortOrder[]} isSortEnabled={false} showTimeCol={showTimeCol} - useNewFieldsApi={useNewFieldsApi} isPaginationEnabled={false} rowsPerPageState={getDefaultRowsPerPage(services.uiSettings)} controlColumnIds={controlColumnIds} diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.test.tsx b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.test.tsx index edffaa1c32530..171d3f8ec3abe 100644 --- a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.test.tsx +++ b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.test.tsx @@ -100,7 +100,6 @@ const initDefaults = (tieBreakerFields: string[], dataViewId = 'the-data-view-id predecessorCount: 2, successorCount: 2, }, - useNewFieldsApi: false, } as ContextAppFetchProps, }; diff --git a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx index 2ab9eba2831d8..ebef8340cc391 100644 --- a/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx +++ b/src/plugins/discover/public/application/context/hooks/use_context_app_fetch.tsx @@ -37,15 +37,9 @@ export interface ContextAppFetchProps { anchorId: string; dataView: DataView; appState: AppState; - useNewFieldsApi: boolean; } -export function useContextAppFetch({ - anchorId, - dataView, - appState, - useNewFieldsApi, -}: ContextAppFetchProps) { +export function useContextAppFetch({ anchorId, dataView, appState }: ContextAppFetchProps) { const services = useDiscoverServices(); const { uiSettings: config, data, toastNotifications, filterManager } = services; @@ -89,14 +83,7 @@ export function useContextAppFetch({ tieBreakerFieldName, isTimeNanosBased: dataView.isTimeNanosBased(), }); - const result = await fetchAnchor( - anchorId, - dataView, - searchSource, - sort, - useNewFieldsApi, - services - ); + const result = await fetchAnchor(anchorId, dataView, searchSource, sort, services); setState({ anchor: result.anchorRow, anchorInterceptedWarnings: result.interceptedWarnings, @@ -118,7 +105,6 @@ export function useContextAppFetch({ dataView, anchorId, searchSource, - useNewFieldsApi, ]); const fetchSurroundingRows = useCallback( @@ -146,7 +132,6 @@ export function useContextAppFetch({ count, filters, data, - useNewFieldsApi, services ) : { rows: [], interceptedWarnings: undefined }; @@ -172,7 +157,6 @@ export function useContextAppFetch({ setState, dataView, toastNotifications, - useNewFieldsApi, data, ] ); diff --git a/src/plugins/discover/public/application/context/services/__snapshots__/context.predecessors.test.ts.snap b/src/plugins/discover/public/application/context/services/__snapshots__/context.predecessors.test.ts.snap index 972df33dfa37d..18ecc09da858f 100644 --- a/src/plugins/discover/public/application/context/services/__snapshots__/context.predecessors.test.ts.snap +++ b/src/plugins/discover/public/application/context/services/__snapshots__/context.predecessors.test.ts.snap @@ -2,6 +2,15 @@ exports[`context predecessors function fetchPredecessors should perform multiple queries until the expected hit count is returned 1`] = ` Array [ + Array [ + "fields", + Array [ + Object { + "field": "*", + "include_unmapped": true, + }, + ], + ], Array [ "index", Object { diff --git a/src/plugins/discover/public/application/context/services/__snapshots__/context.successors.test.ts.snap b/src/plugins/discover/public/application/context/services/__snapshots__/context.successors.test.ts.snap index 1f8623595b707..9d53999191d38 100644 --- a/src/plugins/discover/public/application/context/services/__snapshots__/context.successors.test.ts.snap +++ b/src/plugins/discover/public/application/context/services/__snapshots__/context.successors.test.ts.snap @@ -2,6 +2,15 @@ exports[`context successors function fetchSuccessors should perform multiple queries until the expected hit count is returned 1`] = ` Array [ + Array [ + "fields", + Array [ + Object { + "field": "*", + "include_unmapped": true, + }, + ], + ], Array [ "index", Object { diff --git a/src/plugins/discover/public/application/context/services/__snapshots__/context.test.ts.snap b/src/plugins/discover/public/application/context/services/__snapshots__/context.test.ts.snap index 48bbf85bb9314..24834c6abf40a 100644 --- a/src/plugins/discover/public/application/context/services/__snapshots__/context.test.ts.snap +++ b/src/plugins/discover/public/application/context/services/__snapshots__/context.test.ts.snap @@ -1,27 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`context api createSearchSource when useFieldsApi is false 1`] = ` -Object { - "_source": Object {}, - "fields": Array [], - "query": Object { - "bool": Object { - "filter": Array [], - "must": Array [], - "must_not": Array [], - "should": Array [], - }, - }, - "runtime_mappings": Object {}, - "script_fields": Object {}, - "stored_fields": Array [ - "*", - ], - "track_total_hits": false, -} -`; - -exports[`context api createSearchSource when useFieldsApi is true 1`] = ` +exports[`context api createSearchSource 1`] = ` Object { "_source": false, "fields": Array [ diff --git a/src/plugins/discover/public/application/context/services/anchor.test.ts b/src/plugins/discover/public/application/context/services/anchor.test.ts index 8f6bcaf926ace..0d65f3ac93268 100644 --- a/src/plugins/discover/public/application/context/services/anchor.test.ts +++ b/src/plugins/discover/public/application/context/services/anchor.test.ts @@ -36,7 +36,6 @@ describe('context app', function () { dataView, searchSourceStub, [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - false, discoverServiceMock ).then(() => { expect(searchSourceStub.fetch$.calledOnce).toBe(true); @@ -49,7 +48,6 @@ describe('context app', function () { dataView, searchSourceStub, [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - false, discoverServiceMock ).then(() => { const setParentSpy = searchSourceStub.setParent; @@ -64,7 +62,6 @@ describe('context app', function () { dataView, searchSourceStub, [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - false, discoverServiceMock ).then(() => { const setFieldSpy = searchSourceStub.setField; @@ -78,7 +75,6 @@ describe('context app', function () { dataView, searchSourceStub, [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - false, discoverServiceMock ).then(() => { const setVersionSpy = searchSourceStub.setField.withArgs('version'); @@ -93,7 +89,6 @@ describe('context app', function () { dataView, searchSourceStub, [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - false, discoverServiceMock ).then(() => { const setSizeSpy = searchSourceStub.setField.withArgs('size'); @@ -108,7 +103,6 @@ describe('context app', function () { dataView, searchSourceStub, [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - false, discoverServiceMock ).then(() => { const setQuerySpy = searchSourceStub.setField.withArgs('query'); @@ -134,7 +128,6 @@ describe('context app', function () { dataView, searchSourceStub, [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - false, discoverServiceMock ).then(() => { const setSortSpy = searchSourceStub.setField.withArgs('sort'); @@ -146,27 +139,8 @@ describe('context app', function () { }); }); - it('should update search source correctly when useNewFieldsApi set to false', function () { - const searchSource = updateSearchSource( - savedSearchMock.searchSource, - 'id', - [], - false, - dataViewMock - ); - const searchRequestBody = searchSource.getSearchRequestBody(); - expect(searchRequestBody._source).toBeInstanceOf(Object); - expect(searchRequestBody.track_total_hits).toBe(false); - }); - - it('should update search source correctly when useNewFieldsApi set to true', function () { - const searchSource = updateSearchSource( - savedSearchMock.searchSource, - 'id', - [], - true, - dataViewMock - ); + it('should update search source correctly', function () { + const searchSource = updateSearchSource(savedSearchMock.searchSource, 'id', [], dataViewMock); const searchRequestBody = searchSource.getSearchRequestBody(); expect(searchRequestBody._source).toBe(false); expect(searchRequestBody.track_total_hits).toBe(false); @@ -180,7 +154,6 @@ describe('context app', function () { dataView, searchSourceStub, [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - false, discoverServiceMock ).then( () => { @@ -203,7 +176,6 @@ describe('context app', function () { dataView, searchSourceStub, [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - false, discoverServiceMock ).then(({ anchorRow, interceptedWarnings }) => { expect(anchorRow).toHaveProperty('raw._id', '1'); @@ -229,7 +201,6 @@ describe('context app', function () { dataView, searchSourceStub, [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - false, services ).then(({ anchorRow, interceptedWarnings }) => { expect(anchorRow).toHaveProperty('raw._id', '1'); @@ -239,28 +210,22 @@ describe('context app', function () { }); }); - describe('useNewFields API', () => { - beforeEach(() => { - searchSourceStub = createSearchSourceStub([{ _id: 'hit1', _index: 't' }]); - }); - - it('should request fields if useNewFieldsApi set', function () { - searchSourceStub._stubHits = [{ property1: 'value1' }, { property2: 'value2' }]; - - return fetchAnchor( - 'id', - dataView, - searchSourceStub, - [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], - true, - discoverServiceMock - ).then(() => { - const setFieldsSpy = searchSourceStub.setField.withArgs('fields'); - const removeFieldsSpy = searchSourceStub.removeField.withArgs('fieldsFromSource'); - expect(setFieldsSpy.calledOnce).toBe(true); - expect(removeFieldsSpy.calledOnce).toBe(true); - expect(setFieldsSpy.firstCall.args[1]).toEqual([{ field: '*', include_unmapped: true }]); - }); + it('should request fields', function () { + searchSourceStub = createSearchSourceStub([{ _id: 'hit1', _index: 't' }]); + searchSourceStub._stubHits = [{ property1: 'value1' }, { property2: 'value2' }]; + + return fetchAnchor( + 'id', + dataView, + searchSourceStub, + [{ '@timestamp': SortDirection.desc }, { _doc: SortDirection.desc }], + discoverServiceMock + ).then(() => { + const setFieldsSpy = searchSourceStub.setField.withArgs('fields'); + const removeFieldsSpy = searchSourceStub.removeField.withArgs('fieldsFromSource'); + expect(setFieldsSpy.calledOnce).toBe(true); + expect(removeFieldsSpy.calledOnce).toBe(true); + expect(setFieldsSpy.firstCall.args[1]).toEqual([{ field: '*', include_unmapped: true }]); }); }); }); diff --git a/src/plugins/discover/public/application/context/services/anchor.ts b/src/plugins/discover/public/application/context/services/anchor.ts index ee5198a8b4100..d5a5cb0f013f4 100644 --- a/src/plugins/discover/public/application/context/services/anchor.ts +++ b/src/plugins/discover/public/application/context/services/anchor.ts @@ -23,7 +23,6 @@ export async function fetchAnchor( dataView: DataView, searchSource: ISearchSource, sort: EsQuerySortValue[], - useNewFieldsApi: boolean = false, services: DiscoverServices ): Promise<{ anchorRow: DataTableRecord; @@ -35,7 +34,7 @@ export async function fetchAnchor( query: { query: '', language: 'kuery' }, }); - updateSearchSource(searchSource, anchorId, sort, useNewFieldsApi, dataView); + updateSearchSource(searchSource, anchorId, sort, dataView); const adapter = new RequestAdapter(); const { rawResponse } = await lastValueFrom( @@ -75,7 +74,6 @@ export function updateSearchSource( searchSource: ISearchSource, anchorId: string, sort: EsQuerySortValue[], - useNewFieldsApi: boolean, dataView: DataView ) { searchSource @@ -97,9 +95,9 @@ export function updateSearchSource( }) .setField('sort', sort) .setField('trackTotalHits', false); - if (useNewFieldsApi) { - searchSource.removeField('fieldsFromSource'); - searchSource.setField('fields', [{ field: '*', include_unmapped: true }]); - } + + searchSource.removeField('fieldsFromSource'); + searchSource.setField('fields', [{ field: '*', include_unmapped: true }]); + return searchSource; } diff --git a/src/plugins/discover/public/application/context/services/context.predecessors.test.ts b/src/plugins/discover/public/application/context/services/context.predecessors.test.ts index b0d102a62f6c4..f07f04214ada6 100644 --- a/src/plugins/discover/public/application/context/services/context.predecessors.test.ts +++ b/src/plugins/discover/public/application/context/services/context.predecessors.test.ts @@ -87,7 +87,6 @@ describe('context predecessors', function () { size, [], dataPluginMock, - false, discoverServiceMock ); }; @@ -204,7 +203,7 @@ describe('context predecessors', function () { }); }); - describe('function fetchPredecessors with useNewFieldsApi set', function () { + describe('fetchPredecessors', function () { beforeEach(() => { mockSearchSource = createContextSearchSourceStub('@timestamp'); @@ -238,7 +237,6 @@ describe('context predecessors', function () { size, [], dataPluginMock, - true, discoverServiceMock ); }; diff --git a/src/plugins/discover/public/application/context/services/context.successors.test.ts b/src/plugins/discover/public/application/context/services/context.successors.test.ts index 9543dd202c613..0756ff40d4f28 100644 --- a/src/plugins/discover/public/application/context/services/context.successors.test.ts +++ b/src/plugins/discover/public/application/context/services/context.successors.test.ts @@ -87,7 +87,6 @@ describe('context successors', function () { size, [], dataPluginMock, - false, discoverServiceMock ); }; @@ -205,7 +204,7 @@ describe('context successors', function () { }); }); - describe('function fetchSuccessors with useNewFieldsApi set', function () { + describe('fetchSuccessors', function () { beforeEach(() => { mockSearchSource = createContextSearchSourceStub('@timestamp'); @@ -240,7 +239,6 @@ describe('context successors', function () { size, [], dataPluginMock, - true, discoverServiceMock ); }; @@ -312,7 +310,6 @@ describe('context successors', function () { size, [], dataPluginMock, - true, { ...discoverServiceMock, data: dataPluginMock, diff --git a/src/plugins/discover/public/application/context/services/context.test.ts b/src/plugins/discover/public/application/context/services/context.test.ts index d817a6c81e248..ce06b2c283564 100644 --- a/src/plugins/discover/public/application/context/services/context.test.ts +++ b/src/plugins/discover/public/application/context/services/context.test.ts @@ -12,14 +12,9 @@ import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { createSearchSourceMock } from '@kbn/data-plugin/public/mocks'; describe('context api', function () { - test('createSearchSource when useFieldsApi is true', () => { + test('createSearchSource', () => { const newSearchSource = createSearchSourceMock({ index: dataViewMock }); - const searchSource = updateSearchSource(newSearchSource, dataViewMock, [], true); - expect(searchSource.getSearchRequestBody()).toMatchSnapshot(); - }); - test('createSearchSource when useFieldsApi is false', () => { - const newSearchSource = createSearchSourceMock({ index: dataViewMock }); - const searchSource = updateSearchSource(newSearchSource, dataViewMock, [], false); + const searchSource = updateSearchSource(newSearchSource, dataViewMock, []); expect(searchSource.getSearchRequestBody()).toMatchSnapshot(); }); }); diff --git a/src/plugins/discover/public/application/context/services/context.ts b/src/plugins/discover/public/application/context/services/context.ts index 2c80b46eb25b8..68c86d35d7f04 100644 --- a/src/plugins/discover/public/application/context/services/context.ts +++ b/src/plugins/discover/public/application/context/services/context.ts @@ -41,7 +41,6 @@ const LOOKUP_OFFSETS = [0, 1, 7, 30, 365, 10000].map((days) => days * DAY_MILLIS * @param {number} size - number of records to retrieve * @param {Filter[]} filters - to apply in the elastic query * @param {DataPublicPluginStart} data - * @param {boolean} useNewFieldsApi * @param {DiscoverServices} services * @returns {Promise} */ @@ -54,7 +53,6 @@ export async function fetchSurroundingDocs( size: number, filters: Filter[], data: DataPublicPluginStart, - useNewFieldsApi: boolean | undefined, services: DiscoverServices ): Promise<{ rows: DataTableRecord[]; @@ -68,7 +66,7 @@ export async function fetchSurroundingDocs( } const timeField = dataView.timeFieldName!; const searchSource = data.search.searchSource.createEmpty(); - updateSearchSource(searchSource, dataView, filters, Boolean(useNewFieldsApi)); + updateSearchSource(searchSource, dataView, filters); const sortDirToApply = type === SurrDocType.SUCCESSORS ? sortDir : reverseSortDir(sortDir); const anchorRaw = anchor.raw!; @@ -133,13 +131,11 @@ export async function fetchSurroundingDocs( export function updateSearchSource( searchSource: ISearchSource, dataView: DataView, - filters: Filter[], - useNewFieldsApi: boolean + filters: Filter[] ) { - if (useNewFieldsApi) { - searchSource.removeField('fieldsFromSource'); - searchSource.setField('fields', [{ field: '*', include_unmapped: true }]); - } + searchSource.removeField('fieldsFromSource'); + searchSource.setField('fields', [{ field: '*', include_unmapped: true }]); + return searchSource .setParent(undefined) .setField('index', dataView) diff --git a/src/plugins/discover/public/application/context/services/context_state.test.ts b/src/plugins/discover/public/application/context/services/context_state.test.ts index 7c49bada022fd..499c8c8d62581 100644 --- a/src/plugins/discover/public/application/context/services/context_state.test.ts +++ b/src/plugins/discover/public/application/context/services/context_state.test.ts @@ -13,7 +13,6 @@ import { getState } from './context_state'; import { createBrowserHistory, History } from 'history'; import { FilterManager } from '@kbn/data-plugin/public'; import { coreMock } from '@kbn/core/public/mocks'; -import { SEARCH_FIELDS_FROM_SOURCE } from '@kbn/discover-utils'; import { discoverServiceMock } from '../../../__mocks__/services'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; @@ -32,8 +31,7 @@ describe('Test Discover Context State', () => { defaultSize: 4, history, uiSettings: { - get: (key: string) => - (key === SEARCH_FIELDS_FROM_SOURCE ? true : ['_source']) as unknown as T, + get: (key: string) => ['_source'] as unknown as T, } as IUiSettingsClient, data: discoverServiceMock.data, dataView: dataViewMock, @@ -46,9 +44,7 @@ describe('Test Discover Context State', () => { test('getState function default return', () => { expect(state.appState.getState()).toMatchInlineSnapshot(` Object { - "columns": Array [ - "_source", - ], + "columns": Array [], "filters": Array [], "predecessorCount": 4, "successorCount": 4, @@ -67,7 +63,7 @@ describe('Test Discover Context State', () => { state.setAppState({ predecessorCount: 10 }); state.flushToUrl(); expect(getCurrentUrl()).toMatchInlineSnapshot( - `"/#?_a=(columns:!(_source),filters:!(),predecessorCount:10,successorCount:4)"` + `"/#?_a=(columns:!(),filters:!(),predecessorCount:10,successorCount:4)"` ); }); test('getState -> url to appState syncing', async () => { @@ -172,7 +168,7 @@ describe('Test Discover Context State', () => { `); state.flushToUrl(); expect(getCurrentUrl()).toMatchInlineSnapshot( - `"/#?_g=(filters:!(('$state':(store:globalState),meta:(alias:!n,disabled:!f,index:'logstash-*',key:extension,negate:!f,params:(query:jpg),type:phrase),query:(match_phrase:(extension:(query:jpg))))))&_a=(columns:!(_source),filters:!(('$state':(store:appState),meta:(alias:!n,disabled:!f,index:'logstash-*',key:extension,negate:!t,params:(query:png),type:phrase),query:(match_phrase:(extension:(query:png))))),predecessorCount:4,successorCount:4)"` + `"/#?_g=(filters:!(('$state':(store:globalState),meta:(alias:!n,disabled:!f,index:'logstash-*',key:extension,negate:!f,params:(query:jpg),type:phrase),query:(match_phrase:(extension:(query:jpg))))))&_a=(columns:!(),filters:!(('$state':(store:appState),meta:(alias:!n,disabled:!f,index:'logstash-*',key:extension,negate:!t,params:(query:png),type:phrase),query:(match_phrase:(extension:(query:png))))),predecessorCount:4,successorCount:4)"` ); }); }); diff --git a/src/plugins/discover/public/application/doc/components/doc.test.tsx b/src/plugins/discover/public/application/doc/components/doc.test.tsx index 4e1c81db70638..e802908d57559 100644 --- a/src/plugins/discover/public/application/doc/components/doc.test.tsx +++ b/src/plugins/discover/public/application/doc/components/doc.test.tsx @@ -14,7 +14,6 @@ import { mountWithIntl } from '@kbn/test-jest-helpers'; import { ReactWrapper } from 'enzyme'; import { findTestSubject } from '@elastic/eui/lib/test'; import { Doc, DocProps } from './doc'; -import { SEARCH_FIELDS_FROM_SOURCE as mockSearchFieldsFromSource } from '@kbn/discover-utils'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { setUnifiedDocViewerServices } from '@kbn/unified-doc-viewer-plugin/public/plugin'; @@ -62,13 +61,6 @@ async function mountDoc(update = false) { }, }, }, - uiSettings: { - get: (key: string) => { - if (key === mockSearchFieldsFromSource) { - return false; - } - }, - }, locator: { getUrl: jest.fn(() => Promise.resolve('mock-url')) }, chrome: { setBreadcrumbs: jest.fn() }, profilesManager: discoverServices.profilesManager, diff --git a/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_table.tsx b/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_table.tsx index 7742fbbcc4140..bf00d541de7ec 100644 --- a/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_table.tsx +++ b/src/plugins/discover/public/application/main/components/field_stats_table/field_stats_table.tsx @@ -57,7 +57,7 @@ export const FieldStatisticsTable = React.memo((props: FieldStatisticsTableProps const visibleFields = useMemo( () => convertFieldsToFallbackFields({ - // `discover:searchFieldsFromSource` adds `_source` to the columns, but we should exclude it for Field Statistics + // If `_source` is in the columns, we should exclude it for Field Statistics fields: columns.filter((col) => col !== '_source'), additionalFieldGroups, }), diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx index 9f929077bd7d9..18996a7cdf9ca 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx @@ -39,7 +39,6 @@ import { DOC_HIDE_TIME_COLUMN_SETTING, MAX_DOC_FIELDS_DISPLAYED, ROW_HEIGHT_OPTION, - SEARCH_FIELDS_FROM_SOURCE, SHOW_MULTIFIELDS, SORT_DEFAULT_ORDER_SETTING, } from '@kbn/discover-utils'; @@ -140,7 +139,6 @@ function DiscoverDocumentsComponent({ }); const expandedDoc = useInternalStateSelector((state) => state.expandedDoc); const isEsqlMode = useIsEsqlMode(); - const useNewFieldsApi = useMemo(() => !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE), [uiSettings]); const documentState = useDataState(documents$); const isDataLoading = documentState.fetchStatus === FetchStatus.LOADING || @@ -183,7 +181,6 @@ function DiscoverDocumentsComponent({ dataView, dataViews, setAppState, - useNewFieldsApi, columns, sort, settings: grid, @@ -356,7 +353,7 @@ function DiscoverDocumentsComponent({ <> col !== '_source')} /> @@ -438,7 +435,6 @@ function DiscoverDocumentsComponent({ onSetColumns={onSetColumns} onSort={onSort} onResize={onResizeDataGrid} - useNewFieldsApi={useNewFieldsApi} configHeaderRowHeight={3} headerRowHeightState={headerRowHeight} onUpdateHeaderRowHeight={onUpdateHeaderRowHeight} diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index 7784b8308053e..33c202c1f8be6 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -26,11 +26,7 @@ import classNames from 'classnames'; import { generateFilters } from '@kbn/data-plugin/public'; import { useDragDropContext } from '@kbn/dom-drag-drop'; import { type DataViewField, DataViewType } from '@kbn/data-views-plugin/public'; -import { - SEARCH_FIELDS_FROM_SOURCE, - SHOW_FIELD_STATISTICS, - SORT_DEFAULT_ORDER_SETTING, -} from '@kbn/discover-utils'; +import { SHOW_FIELD_STATISTICS, SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; import { UseColumnsProps, popularizeField, useColumns } from '@kbn/unified-data-table'; import { DocViewFilterFn } from '@kbn/unified-doc-viewer/types'; import { BehaviorSubject } from 'rxjs'; @@ -126,8 +122,6 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { return dataView.type !== DataViewType.ROLLUP && dataView.isTimeBased(); }, [dataView]); - const useNewFieldsApi = useMemo(() => !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE), [uiSettings]); - const resultState = useMemo( () => getResultState(dataState.fetchStatus, dataState.foundDocuments ?? false), [dataState.fetchStatus, dataState.foundDocuments] @@ -150,7 +144,6 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { dataView, dataViews, setAppState, - useNewFieldsApi, columns, sort, settings: grid, diff --git a/src/plugins/discover/public/application/main/data_fetching/fetch_all.test.ts b/src/plugins/discover/public/application/main/data_fetching/fetch_all.test.ts index bbf893a937171..ce2edba5d231e 100644 --- a/src/plugins/discover/public/application/main/data_fetching/fetch_all.test.ts +++ b/src/plugins/discover/public/application/main/data_fetching/fetch_all.test.ts @@ -84,7 +84,6 @@ describe('test fetchAll', () => { }), searchSessionId: '123', initialFetchStatus: FetchStatus.UNINITIALIZED, - useNewFieldsApi: true, savedSearch: { ...savedSearchMock, searchSource, @@ -257,7 +256,6 @@ describe('test fetchAll', () => { inspectorAdapters: { requests: new RequestAdapter() }, searchSessionId: '123', initialFetchStatus: FetchStatus.UNINITIALIZED, - useNewFieldsApi: true, savedSearch: savedSearchMock, services: discoverServiceMock, getAppState: () => ({ query }), @@ -381,7 +379,6 @@ describe('test fetchAll', () => { inspectorAdapters: { requests: new RequestAdapter() }, searchSessionId: '123', initialFetchStatus: FetchStatus.UNINITIALIZED, - useNewFieldsApi: true, savedSearch: savedSearchMock, services: discoverServiceMock, getAppState: () => ({ query }), diff --git a/src/plugins/discover/public/application/main/data_fetching/fetch_all.ts b/src/plugins/discover/public/application/main/data_fetching/fetch_all.ts index 6a493b94d2fe4..f8552411c0add 100644 --- a/src/plugins/discover/public/application/main/data_fetching/fetch_all.ts +++ b/src/plugins/discover/public/application/main/data_fetching/fetch_all.ts @@ -53,7 +53,6 @@ export interface FetchDeps { savedSearch: SavedSearch; searchSessionId: string; services: DiscoverServices; - useNewFieldsApi: boolean; } /** diff --git a/src/plugins/discover/public/application/main/data_fetching/update_search_source.test.ts b/src/plugins/discover/public/application/main/data_fetching/update_search_source.test.ts index 56e15e127cd47..20516620c19aa 100644 --- a/src/plugins/discover/public/application/main/data_fetching/update_search_source.test.ts +++ b/src/plugins/discover/public/application/main/data_fetching/update_search_source.test.ts @@ -12,73 +12,25 @@ import { createSearchSourceMock } from '@kbn/data-plugin/common/search/search_so import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import type { SortOrder } from '@kbn/saved-search-plugin/public'; import { discoverServiceMock } from '../../../__mocks__/services'; -import { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { Filter } from '@kbn/es-query'; -const getUiSettingsMock = (value: boolean) => { - return { - get: jest.fn(() => value), - } as unknown as IUiSettingsClient; -}; - describe('updateVolatileSearchSource', () => { test('updates a given search source', async () => { const searchSource = createSearchSourceMock({}); - discoverServiceMock.uiSettings = getUiSettingsMock(true); - updateVolatileSearchSource(searchSource, { - dataView: dataViewMock, - services: discoverServiceMock, - sort: [] as SortOrder[], - customFilters: [], - }); - expect(searchSource.getField('fields')).toBe(undefined); - }); - test('updates a given search source with the usage of the new fields api', async () => { - const searchSource = createSearchSourceMock({}); - discoverServiceMock.uiSettings = getUiSettingsMock(false); updateVolatileSearchSource(searchSource, { dataView: dataViewMock, services: discoverServiceMock, sort: [] as SortOrder[], customFilters: [], }); + expect(searchSource.getField('fields')).toEqual([{ field: '*', include_unmapped: true }]); expect(searchSource.getField('fieldsFromSource')).toBe(undefined); }); - test('updates a given search source when showUnmappedFields option is set to true', async () => { - const volatileSearchSourceMock = createSearchSourceMock({}); - discoverServiceMock.uiSettings = getUiSettingsMock(false); - updateVolatileSearchSource(volatileSearchSourceMock, { - dataView: dataViewMock, - services: discoverServiceMock, - sort: [] as SortOrder[], - customFilters: [], - }); - expect(volatileSearchSourceMock.getField('fields')).toEqual([ - { field: '*', include_unmapped: true }, - ]); - expect(volatileSearchSourceMock.getField('fieldsFromSource')).toBe(undefined); - }); - - test('does not explicitly request fieldsFromSource when not using fields API', async () => { - const volatileSearchSourceMock = createSearchSourceMock({}); - discoverServiceMock.uiSettings = getUiSettingsMock(true); - updateVolatileSearchSource(volatileSearchSourceMock, { - dataView: dataViewMock, - services: discoverServiceMock, - sort: [] as SortOrder[], - customFilters: [], - }); - expect(volatileSearchSourceMock.getField('fields')).toEqual(undefined); - expect(volatileSearchSourceMock.getField('fieldsFromSource')).toBe(undefined); - }); - test('should properly update the search source with the given custom filters', async () => { const searchSource = createSearchSourceMock({}); - discoverServiceMock.uiSettings = getUiSettingsMock(false); - const filter = { meta: { index: 'foo', key: 'bar' } } as Filter; updateVolatileSearchSource(searchSource, { diff --git a/src/plugins/discover/public/application/main/data_fetching/update_search_source.ts b/src/plugins/discover/public/application/main/data_fetching/update_search_source.ts index 72c60fa584f3f..ad79e93ec37e4 100644 --- a/src/plugins/discover/public/application/main/data_fetching/update_search_source.ts +++ b/src/plugins/discover/public/application/main/data_fetching/update_search_source.ts @@ -11,7 +11,7 @@ import { ISearchSource } from '@kbn/data-plugin/public'; import { DataViewType, DataView } from '@kbn/data-views-plugin/public'; import { Filter } from '@kbn/es-query'; import type { SortOrder } from '@kbn/saved-search-plugin/public'; -import { SEARCH_FIELDS_FROM_SOURCE, SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; +import { SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; import { DiscoverServices } from '../../../build_services'; import { getSortForSearchSource } from '../../../utils/sorting'; @@ -33,7 +33,6 @@ export function updateVolatileSearchSource( } ) { const { uiSettings, data } = services; - const useNewFieldsApi = !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE); const usedSort = getSortForSearchSource({ sort, @@ -55,10 +54,6 @@ export function updateVolatileSearchSource( searchSource.setField('filter', filters); - if (useNewFieldsApi) { - searchSource.removeField('fieldsFromSource'); - searchSource.setField('fields', [{ field: '*', include_unmapped: true }]); - } else { - searchSource.removeField('fields'); - } + searchSource.removeField('fieldsFromSource'); + searchSource.setField('fields', [{ field: '*', include_unmapped: true }]); } diff --git a/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts b/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts index 478d0ca06ea1c..59220d7def3c1 100644 --- a/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts +++ b/src/plugins/discover/public/application/main/state_management/discover_data_state_container.ts @@ -18,11 +18,7 @@ import type { DataView } from '@kbn/data-views-plugin/common'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import type { SearchResponseWarning } from '@kbn/search-response-warnings'; import type { DataTableRecord } from '@kbn/discover-utils/types'; -import { - DEFAULT_COLUMNS_SETTING, - SEARCH_FIELDS_FROM_SOURCE, - SEARCH_ON_PAGE_LOAD_SETTING, -} from '@kbn/discover-utils'; +import { DEFAULT_COLUMNS_SETTING, SEARCH_ON_PAGE_LOAD_SETTING } from '@kbn/discover-utils'; import { getEsqlDataView } from './utils/get_esql_data_view'; import type { DiscoverAppStateContainer } from './discover_app_state_container'; import type { DiscoverServices } from '../../../build_services'; @@ -235,7 +231,6 @@ export function getDataStateContainer({ getAppState: appStateContainer.getState, getInternalState: internalStateContainer.getState, savedSearch: getSavedSearch(), - useNewFieldsApi: !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE), }; abortController?.abort(); diff --git a/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts b/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts index f2076788e0f01..6d7e9c49bbd90 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts @@ -7,14 +7,13 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { cloneDeep, isEqual } from 'lodash'; +import { cloneDeep } from 'lodash'; import { IUiSettingsClient } from '@kbn/core/public'; import { SavedSearch } from '@kbn/saved-search-plugin/public'; import { getChartHidden } from '@kbn/unified-histogram-plugin/public'; import { DEFAULT_COLUMNS_SETTING, DOC_HIDE_TIME_COLUMN_SETTING, - SEARCH_FIELDS_FROM_SOURCE, SORT_DEFAULT_ORDER_SETTING, } from '@kbn/discover-utils'; import { isOfAggregateQueryType } from '@kbn/es-query'; @@ -28,12 +27,6 @@ function getDefaultColumns(savedSearch: SavedSearch, uiSettings: IUiSettingsClie if (savedSearch.columns && savedSearch.columns.length > 0) { return [...savedSearch.columns]; } - if ( - uiSettings.get(SEARCH_FIELDS_FROM_SOURCE) && - isEqual(uiSettings.get(DEFAULT_COLUMNS_SETTING), []) - ) { - return ['_source']; - } return [...uiSettings.get(DEFAULT_COLUMNS_SETTING)]; } diff --git a/src/plugins/discover/public/embeddable/components/search_embeddable_grid_component.tsx b/src/plugins/discover/public/embeddable/components/search_embeddable_grid_component.tsx index 8375e72aa34de..ab8eaa02c4c82 100644 --- a/src/plugins/discover/public/embeddable/components/search_embeddable_grid_component.tsx +++ b/src/plugins/discover/public/embeddable/components/search_embeddable_grid_component.tsx @@ -11,11 +11,7 @@ import React, { useMemo } from 'react'; import { BehaviorSubject } from 'rxjs'; import type { DataView } from '@kbn/data-views-plugin/common'; -import { - DOC_HIDE_TIME_COLUMN_SETTING, - SEARCH_FIELDS_FROM_SOURCE, - SORT_DEFAULT_ORDER_SETTING, -} from '@kbn/discover-utils'; +import { DOC_HIDE_TIME_COLUMN_SETTING, SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; import { FetchContext, useBatchedOptionalPublishingSubjects, @@ -108,7 +104,6 @@ export function SearchEmbeddableGridComponent({ }, [savedSearch.sort, dataView, isEsql, discoverServices.uiSettings]); const originalColumns = useMemo(() => savedSearch.columns ?? [], [savedSearch.columns]); - const useNewFieldsApi = !discoverServices.uiSettings.get(SEARCH_FIELDS_FROM_SOURCE, false); const { columns, onAddColumn, onRemoveColumn, onMoveColumn, onSetColumns } = useColumns({ capabilities: discoverServices.capabilities, @@ -126,7 +121,6 @@ export function SearchEmbeddableGridComponent({ stateManager.grid.next(params.settings as DiscoverGridSettings); } }, - useNewFieldsApi, columns: originalColumns, sort, settings: grid, @@ -219,7 +213,6 @@ export function SearchEmbeddableGridComponent({ searchDescription: panelDescription || savedSearchDescription, sort, totalHitCount, - useNewFieldsApi, }; return ( diff --git a/src/plugins/discover/public/embeddable/initialize_fetch.ts b/src/plugins/discover/public/embeddable/initialize_fetch.ts index 9ef2a3c167272..445b7da7dd984 100644 --- a/src/plugins/discover/public/embeddable/initialize_fetch.ts +++ b/src/plugins/discover/public/embeddable/initialize_fetch.ts @@ -13,7 +13,6 @@ import { KibanaExecutionContext } from '@kbn/core/types'; import { buildDataTableRecordList, SEARCH_EMBEDDABLE_TYPE, - SEARCH_FIELDS_FROM_SOURCE, SORT_DEFAULT_ORDER_SETTING, } from '@kbn/discover-utils'; import { isOfAggregateQueryType, isOfQueryType } from '@kbn/es-query'; @@ -109,14 +108,12 @@ export function initializeFetch({ return; } - const useNewFieldsApi = !discoverServices.uiSettings.get(SEARCH_FIELDS_FROM_SOURCE, false); updateSearchSource( discoverServices, savedSearch.searchSource, dataView, savedSearch.sort, getAllowedSampleSize(savedSearch.sampleSize, discoverServices.uiSettings), - useNewFieldsApi, fetchContext, { sortDir: discoverServices.uiSettings.get(SORT_DEFAULT_ORDER_SETTING), diff --git a/src/plugins/discover/public/embeddable/utils/update_search_source.test.ts b/src/plugins/discover/public/embeddable/utils/update_search_source.test.ts index 0f3cec1f18f6d..fac2291ed4434 100644 --- a/src/plugins/discover/public/embeddable/utils/update_search_source.test.ts +++ b/src/plugins/discover/public/embeddable/utils/update_search_source.test.ts @@ -41,24 +41,6 @@ describe('updateSearchSource', () => { const customSampleSize = 70; - it('updates a given search source', async () => { - const searchSource = createSearchSourceMock({}); - updateSearchSource( - discoverServiceMock, - searchSource, - dataViewMock, - [] as SortOrder[], - customSampleSize, - false, - defaultFetchContext, - defaults - ); - expect(searchSource.getField('fields')).toBe(undefined); - // does not explicitly request fieldsFromSource when not using fields API - expect(searchSource.getField('fieldsFromSource')).toBe(undefined); - expect(searchSource.getField('size')).toEqual(customSampleSize); - }); - it('updates a given search source with the usage of the new fields api', async () => { const searchSource = createSearchSourceMock({}); updateSearchSource( @@ -67,7 +49,6 @@ describe('updateSearchSource', () => { dataViewMock, [] as SortOrder[], customSampleSize, - true, defaultFetchContext, defaults ); @@ -84,7 +65,6 @@ describe('updateSearchSource', () => { dataViewMock, [] as SortOrder[], customSampleSize, - true, defaultFetchContext, defaults ); @@ -97,7 +77,6 @@ describe('updateSearchSource', () => { dataViewMockWithTimeField, [] as SortOrder[], customSampleSize, - true, defaultFetchContext, { sortDir: 'desc', @@ -112,7 +91,6 @@ describe('updateSearchSource', () => { dataViewMockWithTimeField, [['bytes', 'desc']] as SortOrder[], customSampleSize, - true, defaultFetchContext, defaults ); @@ -137,7 +115,6 @@ describe('updateSearchSource', () => { dataViewMock, [] as SortOrder[], customSampleSize, - true, defaultFetchContext, defaults ); @@ -177,7 +154,6 @@ describe('updateSearchSource', () => { dataViewMockWithTimeField, [] as SortOrder[], customSampleSize, - true, defaultFetchContext, defaults ); diff --git a/src/plugins/discover/public/embeddable/utils/update_search_source.ts b/src/plugins/discover/public/embeddable/utils/update_search_source.ts index 47140911b0980..0bdf50f539363 100644 --- a/src/plugins/discover/public/embeddable/utils/update_search_source.ts +++ b/src/plugins/discover/public/embeddable/utils/update_search_source.ts @@ -44,7 +44,6 @@ export const updateSearchSource = ( dataView: DataView | undefined, sort: (SortOrder[] & string[][]) | undefined, sampleSize: number, - useNewFieldsApi: boolean, fetchContext: FetchContext, defaults: { sortDir: string; @@ -62,12 +61,9 @@ export const updateSearchSource = ( includeTieBreaker: true, }) ); - if (useNewFieldsApi) { - searchSource.removeField('fieldsFromSource'); - searchSource.setField('fields', [{ field: '*', include_unmapped: true }]); - } else { - searchSource.removeField('fields'); - } + + searchSource.removeField('fieldsFromSource'); + searchSource.setField('fields', [{ field: '*', include_unmapped: true }]); // if the search source has a parent, update that too based on fetch context const parentSearchSource = searchSource.getParent(); diff --git a/src/plugins/discover/public/utils/get_sharing_data.test.ts b/src/plugins/discover/public/utils/get_sharing_data.test.ts index 9ffe4872659d4..a6f54bfac7a5b 100644 --- a/src/plugins/discover/public/utils/get_sharing_data.test.ts +++ b/src/plugins/discover/public/utils/get_sharing_data.test.ts @@ -12,11 +12,7 @@ import { FilterStateStore, RangeFilter } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/public'; import type { DiscoverServices } from '../build_services'; import { createSearchSourceMock } from '@kbn/data-plugin/common/search/search_source/mocks'; -import { - DOC_HIDE_TIME_COLUMN_SETTING, - SORT_DEFAULT_ORDER_SETTING, - SEARCH_FIELDS_FROM_SOURCE, -} from '@kbn/discover-utils'; +import { DOC_HIDE_TIME_COLUMN_SETTING, SORT_DEFAULT_ORDER_SETTING } from '@kbn/discover-utils'; import { buildDataViewMock, dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { createDiscoverServicesMock } from '../__mocks__/services'; import { getSharingData, showPublicUrlSwitch } from './get_sharing_data'; @@ -30,9 +26,6 @@ describe('getSharingData', () => { ...discoverServiceMock, uiSettings: { get: (key: string) => { - if (key === SEARCH_FIELDS_FROM_SOURCE) { - return false; - } if (key === SORT_DEFAULT_ORDER_SETTING) { return 'desc'; } @@ -97,45 +90,6 @@ describe('getSharingData', () => { `); }); - test(`getSearchSource does not add fields to the searchSource with 'discover:searchFieldsFromSource=true'`, async () => { - const originalGet = services.uiSettings.get; - services.uiSettings = { - get: (key: string, ...args: unknown[]) => { - if (key === SEARCH_FIELDS_FROM_SOURCE) { - return true; - } - return originalGet(key, ...args); - }, - } as unknown as IUiSettingsClient; - const index = { ...dataViewMock } as DataView; - index.timeFieldName = 'cool-timefield'; - const searchSourceMock = createSearchSourceMock({ index }); - const { getSearchSource } = await getSharingData( - searchSourceMock, - { - columns: [ - 'cool-field-1', - 'cool-field-2', - 'cool-field-3', - 'cool-field-4', - 'cool-field-5', - 'cool-field-6', - ], - }, - services - ); - expect(getSearchSource({})).toMatchInlineSnapshot(` - Object { - "index": "the-data-view-id", - "sort": Array [ - Object { - "_doc": "desc", - }, - ], - } - `); - }); - test('getSearchSource does add fields to the searchSource when columns are selected', async () => { const index = { ...dataViewMock } as DataView; index.timeFieldName = 'cool-timefield'; diff --git a/src/plugins/discover/public/utils/get_sharing_data.ts b/src/plugins/discover/public/utils/get_sharing_data.ts index 78e8334cc8f3a..8f6b0c4356ea6 100644 --- a/src/plugins/discover/public/utils/get_sharing_data.ts +++ b/src/plugins/discover/public/utils/get_sharing_data.ts @@ -19,7 +19,6 @@ import type { SavedSearch, SortOrder } from '@kbn/saved-search-plugin/public'; import { DOC_HIDE_TIME_COLUMN_SETTING, isNestedFieldParent, - SEARCH_FIELDS_FROM_SOURCE, SORT_DEFAULT_ORDER_SETTING, } from '@kbn/discover-utils'; import { @@ -113,25 +112,22 @@ export async function getSharingData( * Otherwise, the requests will ask for all fields, even if only a few are really needed. * Discover does not set fields, since having all fields is needed for the UI. */ - const useFieldsApi = !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE); - if (useFieldsApi) { - searchSourceUpdated.removeField('fieldsFromSource'); - const fields = columns.length - ? columns.map((column) => { - let field = column; - - // If this column is a nested field, add a wildcard to the field name in order to fetch - // all leaf fields for the report, since the fields API doesn't support nested field roots - if (isNestedFieldParent(column, index)) { - field = `${column}.*`; - } - - return { field, include_unmapped: true }; - }) - : [{ field: '*', include_unmapped: true }]; - - searchSourceUpdated.setField('fields', fields); - } + searchSourceUpdated.removeField('fieldsFromSource'); + const fields = columns.length + ? columns.map((column) => { + let field = column; + + // If this column is a nested field, add a wildcard to the field name in order to fetch + // all leaf fields for the report, since the fields API doesn't support nested field roots + if (isNestedFieldParent(column, index)) { + field = `${column}.*`; + } + + return { field, include_unmapped: true }; + }) + : [{ field: '*', include_unmapped: true }]; + searchSourceUpdated.setField('fields', fields); + return searchSourceUpdated.getSerializedFields(true); }, columns, diff --git a/src/plugins/discover/public/utils/state_helpers.ts b/src/plugins/discover/public/utils/state_helpers.ts index 991f35ab724bb..b9d0f065f0573 100644 --- a/src/plugins/discover/public/utils/state_helpers.ts +++ b/src/plugins/discover/public/utils/state_helpers.ts @@ -9,7 +9,7 @@ import { IUiSettingsClient } from '@kbn/core/public'; import { isEqual } from 'lodash'; -import { SEARCH_FIELDS_FROM_SOURCE, DEFAULT_COLUMNS_SETTING } from '@kbn/discover-utils'; +import { DEFAULT_COLUMNS_SETTING } from '@kbn/discover-utils'; /** * Makes sure the current state is not referencing the source column when using the fields api @@ -23,33 +23,18 @@ export function handleSourceColumnState( if (!state.columns) { return state; } - const useNewFieldsApi = !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE); const defaultColumns = uiSettings.get(DEFAULT_COLUMNS_SETTING); - if (useNewFieldsApi) { - // if fields API is used, filter out the source column - let cleanedColumns = state.columns.filter((column) => column !== '_source'); - if (cleanedColumns.length === 0 && !isEqual(defaultColumns, ['_source'])) { - cleanedColumns = defaultColumns; - // defaultColumns could still contain _source - cleanedColumns = cleanedColumns.filter((column) => column !== '_source'); - } - return { - ...state, - columns: cleanedColumns, - }; - } else if (state.columns.length === 0) { - // if _source fetching is used and there are no column, switch back to default columns - // this can happen if the fields API was previously used - const columns = defaultColumns; - if (columns.length === 0) { - columns.push('_source'); - } - return { - ...state, - columns: [...columns], - }; + // filter out the source column + let cleanedColumns = state.columns.filter((column) => column !== '_source'); + if (cleanedColumns.length === 0 && !isEqual(defaultColumns, ['_source'])) { + cleanedColumns = defaultColumns; + // defaultColumns could still contain _source + cleanedColumns = cleanedColumns.filter((column) => column !== '_source'); } - return state; + return { + ...state, + columns: cleanedColumns, + }; } diff --git a/src/plugins/discover/server/locator/columns_from_locator.ts b/src/plugins/discover/server/locator/columns_from_locator.ts index 4991f1d05b0f5..33ff231473795 100644 --- a/src/plugins/discover/server/locator/columns_from_locator.ts +++ b/src/plugins/discover/server/locator/columns_from_locator.ts @@ -10,7 +10,7 @@ import { DataView } from '@kbn/data-views-plugin/common'; import { SavedSearch } from '@kbn/saved-search-plugin/common'; import { getSavedSearch } from '@kbn/saved-search-plugin/server'; -import { DOC_HIDE_TIME_COLUMN_SETTING, SEARCH_FIELDS_FROM_SOURCE } from '@kbn/discover-utils'; +import { DOC_HIDE_TIME_COLUMN_SETTING } from '@kbn/discover-utils'; import { LocatorServicesDeps } from '.'; import { DiscoverAppLocatorParams } from '../../common'; @@ -26,10 +26,7 @@ export const getColumns = async ( index: DataView, savedSearch: SavedSearch ) => { - const [hideTimeColumn, useFieldsFromSource] = await Promise.all([ - services.uiSettings.get(DOC_HIDE_TIME_COLUMN_SETTING), - services.uiSettings.get(SEARCH_FIELDS_FROM_SOURCE), - ]); + const hideTimeColumn = await services.uiSettings.get(DOC_HIDE_TIME_COLUMN_SETTING); // Add/adjust columns from the saved search attributes and UI Settings let columns: string[] | undefined; @@ -54,7 +51,7 @@ export const getColumns = async ( * Otherwise, the requests will ask for all fields, even if only a few are really needed. * Discover does not set fields, since having all fields is needed for the UI. */ - if (!useFieldsFromSource && columns.length) { + if (columns.length) { columnsNext = columns; } } diff --git a/src/plugins/discover/server/ui_settings.ts b/src/plugins/discover/server/ui_settings.ts index 7dd84c9728696..03625807a8381 100644 --- a/src/plugins/discover/server/ui_settings.ts +++ b/src/plugins/discover/server/ui_settings.ts @@ -24,7 +24,6 @@ import { CONTEXT_STEP_SETTING, CONTEXT_TIE_BREAKER_FIELDS_SETTING, MODIFY_COLUMNS_ON_SWITCH, - SEARCH_FIELDS_FROM_SOURCE, MAX_DOC_FIELDS_DISPLAYED, SHOW_MULTIFIELDS, SHOW_FIELD_STATISTICS, @@ -195,29 +194,6 @@ export const getUiSettings: ( name: 'discover:modifyColumnsOnSwitchTitle', }, }, - [SEARCH_FIELDS_FROM_SOURCE]: { - name: i18n.translate('discover.advancedSettings.discover.readFieldsFromSource', { - defaultMessage: 'Read fields from _source', - }), - description: i18n.translate( - 'discover.advancedSettings.discover.readFieldsFromSourceDescription', - { - defaultMessage: `When enabled will load documents directly from \`_source\`. This is soon going to be deprecated. When disabled, will retrieve fields via the new Fields API in the high-level search service.`, - } - ), - value: false, - category: ['discover'], - schema: schema.boolean(), - deprecation: { - message: i18n.translate( - 'discover.advancedSettings.discover.readFieldsFromSourceDeprecation', - { - defaultMessage: 'This setting is deprecated and will be removed in Kibana 9.0.', - } - ), - docLinksKey: 'discoverSettings', - }, - }, [SHOW_FIELD_STATISTICS]: { name: i18n.translate('discover.advancedSettings.discover.showFieldStatistics', { defaultMessage: 'Show field statistics', diff --git a/src/plugins/esql_datagrid/public/data_grid.tsx b/src/plugins/esql_datagrid/public/data_grid.tsx index 58145627f139f..1b6dbca2b5eb8 100644 --- a/src/plugins/esql_datagrid/public/data_grid.tsx +++ b/src/plugins/esql_datagrid/public/data_grid.tsx @@ -216,7 +216,6 @@ const DataGrid: React.FC = (props) => { expandedDoc={expandedDoc} setExpandedDoc={setExpandedDoc} showTimeCol - useNewFieldsApi enableComparisonMode sort={sortOrder} ariaLabelledBy="esqlDataGrid" diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts index 6ad26b9dce724..f04e8cc62022a 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts @@ -424,10 +424,6 @@ export const stackManagementSchema: MakeSchemaFrom = { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, }, - 'discover:searchFieldsFromSource': { - type: 'boolean', - _meta: { description: 'Non-default value of setting.' }, - }, 'securitySolution:rulesTableRefresh': { type: 'text', _meta: { description: 'Non-default value of setting.' }, diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts index 4c6f17a85914c..0182f688f5ecf 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts @@ -31,7 +31,6 @@ export interface UsageStats { 'search:timeout': number; 'visualization:visualize:legacyHeatmapChartsLibrary': boolean; 'discover:modifyColumnsOnSwitch': boolean; - 'discover:searchFieldsFromSource': boolean; 'discover:showFieldStatistics': boolean; 'discover:showMultiFields': boolean; enableESQL: boolean; diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index e4423a9b30743..8ba1367641679 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -10896,12 +10896,6 @@ "description": "Non-default value of setting." } }, - "discover:searchFieldsFromSource": { - "type": "boolean", - "_meta": { - "description": "Non-default value of setting." - } - }, "securitySolution:rulesTableRefresh": { "type": "text", "_meta": { diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.test.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.test.tsx index 67c4dd65a6634..32a61d28eb32e 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.test.tsx +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.test.tsx @@ -16,21 +16,10 @@ import * as useUiSettingHook from '@kbn/kibana-react-plugin/public/ui_settings/u import { EuiButton, EuiEmptyPrompt, EuiLoadingSpinner } from '@elastic/eui'; import { JsonCodeEditorCommon } from '../json_code_editor'; import { buildDataTableRecord } from '@kbn/discover-utils'; -import { setUnifiedDocViewerServices } from '../../plugin'; -import type { UnifiedDocViewerServices } from '../../types'; const mockDataView = { getComputedFields: () => [], } as never; -setUnifiedDocViewerServices({ - uiSettings: { - get: (key: string) => { - if (key === 'discover:useNewFieldsApi') { - return true; - } - }, - }, -} as UnifiedDocViewerServices); describe('Source Viewer component', () => { test('renders loading state', () => { diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.tsx index 3bd1137cabccf..03d0b78c64b24 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.tsx +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_source/source.tsx @@ -17,9 +17,7 @@ import { i18n } from '@kbn/i18n'; import type { DataView } from '@kbn/data-views-plugin/public'; import type { DataTableRecord } from '@kbn/discover-utils/types'; import { ElasticRequestState } from '@kbn/unified-doc-viewer'; -import { SEARCH_FIELDS_FROM_SOURCE } from '@kbn/discover-utils'; import { omit } from 'lodash'; -import { getUnifiedDocViewerServices } from '../../plugin'; import { useEsDocSearch } from '../../hooks'; import { getHeight, DEFAULT_MARGIN_BOTTOM } from './get_height'; import { JSONCodeEditorCommonMemoized } from '../json_code_editor'; @@ -52,13 +50,10 @@ export const DocViewerSource = ({ const [editor, setEditor] = useState(); const [editorHeight, setEditorHeight] = useState(); const [jsonValue, setJsonValue] = useState(''); - const { uiSettings } = getUnifiedDocViewerServices(); - const useNewFieldsApi = !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE); const [requestState, hit] = useEsDocSearch({ id, index, dataView, - requestSource: useNewFieldsApi, textBasedHits, }); diff --git a/src/plugins/unified_doc_viewer/public/hooks/use_es_doc_search.test.tsx b/src/plugins/unified_doc_viewer/public/hooks/use_es_doc_search.test.tsx index dac1f46e4b424..d65c5bf1e1cec 100644 --- a/src/plugins/unified_doc_viewer/public/hooks/use_es_doc_search.test.tsx +++ b/src/plugins/unified_doc_viewer/public/hooks/use_es_doc_search.test.tsx @@ -12,10 +12,7 @@ import { type EsDocSearchProps, buildSearchBody, useEsDocSearch } from './use_es import { Subject } from 'rxjs'; import type { DataView } from '@kbn/data-views-plugin/public'; import { ElasticRequestState } from '@kbn/unified-doc-viewer'; -import { - SEARCH_FIELDS_FROM_SOURCE as mockSearchFieldsFromSource, - buildDataTableRecord, -} from '@kbn/discover-utils'; +import { buildDataTableRecord } from '@kbn/discover-utils'; import { setUnifiedDocViewerServices } from '../plugin'; import { UnifiedDocViewerServices } from '../types'; @@ -29,102 +26,14 @@ setUnifiedDocViewerServices({ }), }, }, - uiSettings: { - get: (key: string) => { - if (key === mockSearchFieldsFromSource) { - return false; - } - }, - }, } as unknown as UnifiedDocViewerServices); describe('Test of helper / hook', () => { - test('buildSearchBody given useNewFieldsApi is false', () => { - const dataView = { - getComputedFields: () => ({ scriptFields: [], docvalueFields: [] }), - } as unknown as DataView; - const actual = buildSearchBody('1', index, dataView, false); - expect(actual).toMatchInlineSnapshot(` - Object { - "body": Object { - "_source": true, - "fields": Array [], - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "ids": Object { - "values": Array [ - "1", - ], - }, - }, - Object { - "term": Object { - "_index": "test-index", - }, - }, - ], - }, - }, - "script_fields": Array [], - "stored_fields": Array [ - "*", - ], - "version": true, - }, - } - `); - }); - - test('buildSearchBody useNewFieldsApi is true', () => { - const dataView = { - getComputedFields: () => ({ scriptFields: [], docvalueFields: [] }), - } as unknown as DataView; - const actual = buildSearchBody('1', index, dataView, true); - expect(actual).toMatchInlineSnapshot(` - Object { - "body": Object { - "fields": Array [ - Object { - "field": "*", - "include_unmapped": true, - }, - ], - "query": Object { - "bool": Object { - "filter": Array [ - Object { - "ids": Object { - "values": Array [ - "1", - ], - }, - }, - Object { - "term": Object { - "_index": "test-index", - }, - }, - ], - }, - }, - "runtime_mappings": Object {}, - "script_fields": Array [], - "stored_fields": Array [ - "*", - ], - "version": true, - }, - } - `); - }); - - test('buildSearchBody with requestSource', () => { + test('buildSearchBody with _source', () => { const dataView = { getComputedFields: () => ({ scriptFields: [], docvalueFields: [] }), } as unknown as DataView; - const actual = buildSearchBody('1', index, dataView, true, true); + const actual = buildSearchBody('1', index, dataView); expect(actual).toMatchInlineSnapshot(` Object { "body": Object { @@ -179,10 +88,11 @@ describe('Test of helper / hook', () => { }, }), } as unknown as DataView; - const actual = buildSearchBody('1', index, dataView, true); + const actual = buildSearchBody('1', index, dataView); expect(actual).toMatchInlineSnapshot(` Object { "body": Object { + "_source": true, "fields": Array [ Object { "field": "*", diff --git a/src/plugins/unified_doc_viewer/public/hooks/use_es_doc_search.ts b/src/plugins/unified_doc_viewer/public/hooks/use_es_doc_search.ts index c60c9eae62ed8..5b35f0e59e51b 100644 --- a/src/plugins/unified_doc_viewer/public/hooks/use_es_doc_search.ts +++ b/src/plugins/unified_doc_viewer/public/hooks/use_es_doc_search.ts @@ -7,13 +7,13 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import type * as estypes from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import { lastValueFrom } from 'rxjs'; import type { DataView } from '@kbn/data-views-plugin/public'; import { reportPerformanceMetricEvent } from '@kbn/ebt-tools'; import type { DataTableRecord } from '@kbn/discover-utils/types'; -import { SEARCH_FIELDS_FROM_SOURCE, buildDataTableRecord } from '@kbn/discover-utils'; +import { buildDataTableRecord } from '@kbn/discover-utils'; import { ElasticRequestState } from '@kbn/unified-doc-viewer'; import { getUnifiedDocViewerServices } from '../plugin'; @@ -32,10 +32,6 @@ export interface EsDocSearchProps { * DataView entity */ dataView: DataView; - /** - * If set, will always request source, regardless of the global `fieldsFromSource` setting - */ - requestSource?: boolean; /** * Records fetched from text based query */ @@ -58,15 +54,13 @@ export function useEsDocSearch({ id, index, dataView, - requestSource, textBasedHits, onBeforeFetch, onProcessRecord, }: EsDocSearchProps): [ElasticRequestState, DataTableRecord | null, () => void] { const [status, setStatus] = useState(ElasticRequestState.Loading); const [hit, setHit] = useState(null); - const { data, uiSettings, analytics } = getUnifiedDocViewerServices(); - const useNewFieldsApi = useMemo(() => !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE), [uiSettings]); + const { data, analytics } = getUnifiedDocViewerServices(); const requestData = useCallback(async () => { if (!index) { @@ -82,7 +76,7 @@ export function useEsDocSearch({ data.search.search({ params: { index: dataView.getIndexPattern(), - body: buildSearchBody(id, index, dataView, useNewFieldsApi, requestSource)?.body, + body: buildSearchBody(id, index, dataView)?.body, }, }) ); @@ -114,17 +108,7 @@ export function useEsDocSearch({ duration: singleDocFetchingDuration, }); } - }, [ - analytics, - data.search, - dataView, - id, - index, - useNewFieldsApi, - requestSource, - onBeforeFetch, - onProcessRecord, - ]); + }, [analytics, data.search, dataView, id, index, onBeforeFetch, onProcessRecord]); useEffect(() => { if (textBasedHits) { @@ -145,13 +129,7 @@ export function useEsDocSearch({ * helper function to build a query body for Elasticsearch * https://www.elastic.co/guide/en/elasticsearch/reference/current//query-dsl-ids-query.html */ -export function buildSearchBody( - id: string, - index: string, - dataView: DataView, - useNewFieldsApi: boolean, - requestAllFields?: boolean -): RequestBody | undefined { +export function buildSearchBody(id: string, index: string, dataView: DataView): RequestBody { const computedFields = dataView.getComputedFields(); const runtimeFields = computedFields.runtimeFields as estypes.MappingRuntimeFields; const request: RequestBody = { @@ -164,20 +142,10 @@ export function buildSearchBody( stored_fields: ['*'], script_fields: computedFields.scriptFields, version: true, + _source: true, + runtime_mappings: runtimeFields ? runtimeFields : {}, + fields: [{ field: '*', include_unmapped: true }, ...(computedFields.docvalueFields || [])], }, }; - if (!request.body) { - return undefined; - } - if (useNewFieldsApi) { - request.body.fields = [{ field: '*', include_unmapped: true }]; - request.body.runtime_mappings = runtimeFields ? runtimeFields : {}; - if (requestAllFields) { - request.body._source = true; - } - } else { - request.body._source = true; - } - request.body.fields = [...(request.body?.fields || []), ...(computedFields.docvalueFields || [])]; return request; } diff --git a/test/functional/apps/discover/group4/_discover_fields_api.ts b/test/functional/apps/discover/group4/_discover_fields_api.ts index 1706da0ab3c79..b4e54a87ccf5a 100644 --- a/test/functional/apps/discover/group4/_discover_fields_api.ts +++ b/test/functional/apps/discover/group4/_discover_fields_api.ts @@ -16,17 +16,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const kibanaServer = getService('kibanaServer'); const dataGrid = getService('dataGrid'); - const { common, discover, timePicker, settings, unifiedFieldList } = getPageObjects([ + const { common, discover, timePicker, unifiedFieldList } = getPageObjects([ 'common', 'discover', 'timePicker', - 'settings', 'unifiedFieldList', ]); const security = getService('security'); const defaultSettings = { defaultIndex: 'logstash-*', - 'discover:searchFieldsFromSource': false, }; describe('discover uses fields API test', function describeIndexTests() { before(async function () { @@ -74,27 +72,5 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await discover.clickDocViewerTab('doc_view_source'); await discover.expectSourceViewerToExist(); }); - - it('switches to _source column when fields API is no longer used', async function () { - await settings.navigateTo(); - await settings.clickKibanaSettings(); - await settings.toggleAdvancedSettingCheckbox('discover:searchFieldsFromSource'); - - await common.navigateToApp('discover'); - await timePicker.setDefaultAbsoluteRange(); - - expect(await discover.getDocHeader()).to.have.string('Summary'); - }); - - it('switches to Document column when fields API is used', async function () { - await settings.navigateTo(); - await settings.clickKibanaSettings(); - await settings.toggleAdvancedSettingCheckbox('discover:searchFieldsFromSource'); - - await common.navigateToApp('discover'); - await timePicker.setDefaultAbsoluteRange(); - - expect(await discover.getDocHeader()).to.have.string('Summary'); - }); }); } diff --git a/test/functional/apps/discover/group5/_field_data.ts b/test/functional/apps/discover/group5/_field_data.ts deleted file mode 100644 index c155e679ac524..0000000000000 --- a/test/functional/apps/discover/group5/_field_data.ts +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the "Elastic License - * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import expect from '@kbn/expect'; - -import { FtrProviderContext } from '../ftr_provider_context'; - -export default function ({ getService, getPageObjects }: FtrProviderContext) { - const retry = getService('retry'); - const esArchiver = getService('esArchiver'); - const kibanaServer = getService('kibanaServer'); - const queryBar = getService('queryBar'); - const browser = getService('browser'); - const { common, discover, timePicker, unifiedFieldList } = getPageObjects([ - 'common', - 'discover', - 'timePicker', - 'unifiedFieldList', - ]); - - describe('discover tab', function describeIndexTests() { - this.tags('includeFirefox'); - before(async function () { - await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); - await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover.json'); - await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); - await kibanaServer.uiSettings.replace({ - defaultIndex: 'logstash-*', - 'discover:searchFieldsFromSource': true, - }); - await timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await common.navigateToApp('discover'); - }); - describe('field data', function () { - it('search php should show the correct hit count', async function () { - const expectedHitCount = '445'; - await retry.try(async function () { - await queryBar.setQuery('php'); - await queryBar.submitQuery(); - const hitCount = await discover.getHitCount(); - expect(hitCount).to.be(expectedHitCount); - }); - }); - - it('the search term should be highlighted in the field data', async function () { - // marks is the style that highlights the text in yellow - await queryBar.setQuery('php'); - await queryBar.submitQuery(); - await unifiedFieldList.clickFieldListItemAdd('extension'); - const marks = await discover.getMarks(); - expect(marks.length).to.be.greaterThan(0); - expect(marks.indexOf('php')).to.be(0); - await unifiedFieldList.clickFieldListItemRemove('extension'); - }); - - it('search type:apache should show the correct hit count', async function () { - const expectedHitCount = '11,156'; - await queryBar.setQuery('type:apache'); - await queryBar.submitQuery(); - await retry.try(async function tryingForTime() { - const hitCount = await discover.getHitCount(); - expect(hitCount).to.be(expectedHitCount); - }); - }); - - it('a bad syntax query should show an error message', async function () { - const expectedError = - 'Expected ":", "<", "<=", ">", ">=", AND, OR, end of input, ' + - 'whitespace but "(" found.'; - await queryBar.setQuery('xxx(yyy))'); - await queryBar.submitQuery(); - await discover.showsErrorCallout(); - const message = await discover.getDiscoverErrorMessage(); - expect(message).to.contain(expectedError); - }); - - it('shows top-level object keys', async function () { - await queryBar.setQuery('election'); - await queryBar.submitQuery(); - const currentUrl = await browser.getCurrentUrl(); - const [, hash] = currentUrl.split('#/'); - await common.navigateToUrl( - 'discover', - hash.replace('columns:!(_source)', 'columns:!(relatedContent)'), - { useActualUrl: true } - ); - await retry.try(async function tryingForTime() { - expect(await discover.getDocHeader()).to.contain('relatedContent'); - - const field = await discover.getDocTableIndex(1); - expect(field).to.contain('og:description'); - }); - - const marks = await discover.getMarks(); - expect(marks.length).to.be(0); - }); - }); - }); -} diff --git a/test/functional/apps/discover/group5/_field_data_with_fields_api.ts b/test/functional/apps/discover/group5/_field_data_with_fields_api.ts index 4b9a225eb471f..b114009f20b6c 100644 --- a/test/functional/apps/discover/group5/_field_data_with_fields_api.ts +++ b/test/functional/apps/discover/group5/_field_data_with_fields_api.ts @@ -33,7 +33,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*', - 'discover:searchFieldsFromSource': false, }); await timePicker.setDefaultAbsoluteRangeViaUiSettings(); await common.navigateToApp('discover'); @@ -108,6 +107,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(marks.length).to.be.above(0); expect(marks).to.contain('election'); }); + + // we used to add _source as a column by default when `discover:searchFieldsFromSource` existed + it('should show @timestamp and Summary columns for legacy links with _source as a column', async function () { + const currentUrl = await browser.getCurrentUrl(); + const [, hash] = currentUrl.split('#/'); + const nextHash = hash + .replace('columns:!(relatedContent)', 'columns:!(_source)') + .replace('election', 'club'); + + expect(nextHash).to.contain('columns:!(_source)'); + + await common.navigateToUrl('discover', nextHash, { useActualUrl: true }); + + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + + const gridHeader = await discover.getDocHeader(); + expect(gridHeader).to.contain('@timestamp'); + expect(gridHeader).to.contain('Summary'); + + const marks = await discover.getMarks(); + expect(marks.length).to.be.above(0); + expect(marks).to.contain('club'); + + expect(await browser.getCurrentUrl()).to.contain('columns:!()'); + }); }); }); } diff --git a/test/functional/apps/discover/group5/_source_filters.ts b/test/functional/apps/discover/group5/_source_filters.ts index c74aa38628e7f..28194e8fa86e3 100644 --- a/test/functional/apps/discover/group5/_source_filters.ts +++ b/test/functional/apps/discover/group5/_source_filters.ts @@ -30,7 +30,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.uiSettings.replace({ defaultIndex: 'logstash-*', - 'discover:searchFieldsFromSource': false, }); log.debug('management'); diff --git a/test/functional/apps/discover/group5/index.ts b/test/functional/apps/discover/group5/index.ts index 9f80ad0e8f142..fcf983a20368d 100644 --- a/test/functional/apps/discover/group5/index.ts +++ b/test/functional/apps/discover/group5/index.ts @@ -24,7 +24,6 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./_no_data')); loadTestFile(require.resolve('./_filter_editor')); - loadTestFile(require.resolve('./_field_data')); loadTestFile(require.resolve('./_field_data_with_fields_api')); loadTestFile(require.resolve('./_shared_links')); loadTestFile(require.resolve('./_source_filters')); diff --git a/test/functional/apps/discover/group6/_field_stats_table.ts b/test/functional/apps/discover/group6/_field_stats_table.ts index 4d295ef5ca95c..7fbf1eaada4a2 100644 --- a/test/functional/apps/discover/group6/_field_stats_table.ts +++ b/test/functional/apps/discover/group6/_field_stats_table.ts @@ -29,48 +29,35 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']); await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); + await timePicker.setDefaultAbsoluteRangeViaUiSettings(); + await kibanaServer.uiSettings.update(defaultSettings); + await common.navigateToApp('discover'); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); }); after(async () => { await kibanaServer.importExport.unload('test/functional/fixtures/kbn_archiver/discover'); await esArchiver.unload('test/functional/fixtures/es_archiver/logstash_functional'); await kibanaServer.savedObjects.cleanStandardList(); + await kibanaServer.uiSettings.replace({}); }); - [true, false].forEach((shouldSearchFieldsFromSource) => { - describe(`discover:searchFieldsFromSource: ${shouldSearchFieldsFromSource}`, function () { - before(async function () { - await timePicker.setDefaultAbsoluteRangeViaUiSettings(); - await kibanaServer.uiSettings.update({ - ...defaultSettings, - 'discover:searchFieldsFromSource': shouldSearchFieldsFromSource, - }); - await common.navigateToApp('discover'); - await header.waitUntilLoadingHasFinished(); - await discover.waitUntilSearchingHasFinished(); - }); + it('should show Field Statistics data in data view mode', async () => { + await testSubjects.click('dscViewModeFieldStatsButton'); + await header.waitUntilLoadingHasFinished(); + await testSubjects.existOrFail('dataVisualizerTableContainer'); - after(async () => { - await kibanaServer.uiSettings.replace({}); - }); - - it('should show Field Statistics data in data view mode', async () => { - await testSubjects.click('dscViewModeFieldStatsButton'); - await header.waitUntilLoadingHasFinished(); - await testSubjects.existOrFail('dataVisualizerTableContainer'); - - await testSubjects.click('dscViewModeDocumentButton'); - await header.waitUntilLoadingHasFinished(); - await testSubjects.existOrFail('discoverDocTable'); - }); + await testSubjects.click('dscViewModeDocumentButton'); + await header.waitUntilLoadingHasFinished(); + await testSubjects.existOrFail('discoverDocTable'); + }); - it('should not show Field Statistics data in ES|QL mode', async () => { - await discover.selectTextBaseLang(); - await header.waitUntilLoadingHasFinished(); - await discover.waitUntilSearchingHasFinished(); - await testSubjects.missingOrFail('dscViewModeFieldStatsButton'); - }); - }); + it('should not show Field Statistics data in ES|QL mode', async () => { + await discover.selectTextBaseLang(); + await header.waitUntilLoadingHasFinished(); + await discover.waitUntilSearchingHasFinished(); + await testSubjects.missingOrFail('dscViewModeFieldStatsButton'); }); }); } diff --git a/test/functional/apps/discover/group6/_sidebar.ts b/test/functional/apps/discover/group6/_sidebar.ts index 01adcb7a0a907..6413859fa27f8 100644 --- a/test/functional/apps/discover/group6/_sidebar.ts +++ b/test/functional/apps/discover/group6/_sidebar.ts @@ -300,47 +300,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await expectFieldListDescription(INITIAL_FIELD_LIST_SUMMARY); }); - it('should show field list groups excluding subfields when searched from source', async function () { - await kibanaServer.uiSettings.update({ 'discover:searchFieldsFromSource': true }); - await browser.refresh(); - - await unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await unifiedFieldList.doesSidebarShowFields()).to.be(true); - - // Initial Available fields - const availableFields = await unifiedFieldList.getSidebarSectionFieldNames('available'); - expect(availableFields.length).to.be(48); - expect( - availableFields - .join(', ') - .startsWith( - '@message, @tags, @timestamp, agent, bytes, clientip, extension, geo.coordinates' - ) - ).to.be(true); - - // Available fields after scrolling down - const metaSectionButton = await find.byCssSelector( - unifiedFieldList.getSidebarSectionSelector('meta', true) - ); - await metaSectionButton.scrollIntoViewIfNecessary(); - - // Expand Meta section - await unifiedFieldList.toggleSidebarSection('meta'); - expect((await unifiedFieldList.getSidebarSectionFieldNames('meta')).join(', ')).to.be( - '_id, _ignored, _index, _score' - ); - - // Expand Unmapped section - await unifiedFieldList.toggleSidebarSection('unmapped'); - expect((await unifiedFieldList.getSidebarSectionFieldNames('unmapped')).join(', ')).to.be( - 'relatedContent' - ); - - await expectFieldListDescription( - '48 available fields. 1 unmapped field. 5 empty fields. 4 meta fields.' - ); - }); - it('should show selected and popular fields', async function () { await unifiedFieldList.clickFieldListItemAdd('extension'); await discover.waitUntilSearchingHasFinished(); diff --git a/test/functional/apps/discover/group7/_indexpattern_with_unmapped_fields.ts b/test/functional/apps/discover/group7/_indexpattern_with_unmapped_fields.ts index 7af4ec11f7997..1a5d6805f2e60 100644 --- a/test/functional/apps/discover/group7/_indexpattern_with_unmapped_fields.ts +++ b/test/functional/apps/discover/group7/_indexpattern_with_unmapped_fields.ts @@ -32,7 +32,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await kibanaServer.uiSettings.replace({ defaultIndex: 'test-index-unmapped-fields', - 'discover:searchFieldsFromSource': false, 'timepicker:timeDefaults': `{ "from": "${fromTime}", "to": "${toTime}"}`, }); @@ -44,7 +43,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await esArchiver.unload('test/functional/fixtures/es_archiver/unmapped_fields'); await kibanaServer.savedObjects.clean({ types: ['search', 'index-pattern'] }); await kibanaServer.uiSettings.unset('defaultIndex'); - await kibanaServer.uiSettings.unset('discover:searchFieldsFromSource'); await kibanaServer.uiSettings.unset('timepicker:timeDefaults'); }); diff --git a/test/functional/apps/discover/group7/_runtime_fields_editor.ts b/test/functional/apps/discover/group7/_runtime_fields_editor.ts index e93e73650b464..33747378b0ca7 100644 --- a/test/functional/apps/discover/group7/_runtime_fields_editor.ts +++ b/test/functional/apps/discover/group7/_runtime_fields_editor.ts @@ -28,7 +28,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]); const defaultSettings = { defaultIndex: 'logstash-*', - 'discover:searchFieldsFromSource': false, }; const createRuntimeField = async (fieldName: string) => { diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx index 1e81f883c69f3..8428d0e9f1d9e 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx @@ -49,8 +49,6 @@ const gridStyle: EuiDataGridStyle = { header: 'underline', }; -const useNewFieldsApi = true; - // Hide Checkbox, enable open details Flyout const controlColumnIds = ['openDetails']; @@ -208,7 +206,6 @@ export const CloudSecurityDataTable = ({ dataView, dataViews, setAppState: (props) => setColumns(props.columns), - useNewFieldsApi, columns, sort, }); @@ -350,7 +347,6 @@ export const CloudSecurityDataTable = ({ rowsPerPageState={pageSize} totalHits={total} services={services} - useNewFieldsApi onUpdateRowsPerPage={onChangeItemsPerPage} rowHeightState={rowHeightState} showMultiFields={uiSettings.get(SHOW_MULTIFIELDS)} diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/data_view_management/data_view_management.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/data_view_management/data_view_management.tsx index 8b3b677f31506..177f0b903c3e0 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/data_view_management/data_view_management.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/data_view_management/data_view_management.tsx @@ -18,10 +18,6 @@ export interface DataVisualizerDataViewManagementProps { * Currently selected data view */ currentDataView?: DataView; - /** - * Read from the Fields API - */ - useNewFieldsApi?: boolean; } export function DataVisualizerDataViewManagement(props: DataVisualizerDataViewManagementProps) { @@ -29,9 +25,9 @@ export function DataVisualizerDataViewManagement(props: DataVisualizerDataViewMa services: { dataViewFieldEditor, application }, } = useDataVisualizerKibana(); - const { useNewFieldsApi, currentDataView } = props; + const { currentDataView } = props; const dataViewFieldEditPermission = dataViewFieldEditor?.userPermissions.editIndexPattern(); - const canEditDataViewField = !!dataViewFieldEditPermission && useNewFieldsApi; + const canEditDataViewField = !!dataViewFieldEditPermission; const [isAddDataViewFieldPopoverOpen, setIsAddDataViewFieldPopoverOpen] = useState(false); const closeFieldEditor = useRef<() => void | undefined>(); diff --git a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx index 9e9aafb8b0e84..fedddbce01c5c 100644 --- a/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx +++ b/x-pack/plugins/data_visualizer/public/application/index_data_visualizer/components/index_data_visualizer_view/index_data_visualizer_view.tsx @@ -525,10 +525,7 @@ export const IndexDataVisualizerView: FC = (dataVi

      {currentDataView.getName()}

      - + {isWithinLargeBreakpoint ? : null} diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slo_edit/components/common/documents_table.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slo_edit/components/common/documents_table.tsx index 546b443aa23c7..62b59b8d1904f 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slo_edit/components/common/documents_table.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slo_edit/components/common/documents_table.tsx @@ -152,7 +152,6 @@ export function DocumentsTable({ setSampleSize(nSample); }} sort={[]} - useNewFieldsApi={true} showFullScreenButton={false} /> diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.tsx index 99e00547f1c33..5838840548b2b 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/data_table/index.tsx @@ -414,7 +414,6 @@ export const TimelineDataTableComponent: React.FC = memo( renderDocumentView={EmptyComponent} rowsPerPageOptions={itemsPerPageOptions} showFullScreenButton={false} - useNewFieldsApi={true} maxDocFieldsDisplayed={50} consumer="timeline" totalHits={totalCount} diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.tsx index d350b4b530808..cee8c6b5dd99c 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/unified_components/index.tsx @@ -250,7 +250,6 @@ const UnifiedTimelineComponent: React.FC = ({ dataView: dataView!, dataViews, setAppState, - useNewFieldsApi: true, columns: columnIds, sort: sortingColumns, }); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index f9cf34bde3fb4..397c73a512c10 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -2520,9 +2520,6 @@ "discover.advancedSettings.discover.modifyColumnsOnSwitchText": "Supprimez les colonnes qui ne sont pas disponibles dans la nouvelle vue de données.", "discover.advancedSettings.discover.modifyColumnsOnSwitchTitle": "Modifier les colonnes en cas de changement des vues de données", "discover.advancedSettings.discover.multiFieldsLinkText": "champs multiples", - "discover.advancedSettings.discover.readFieldsFromSource": "Lire les champs depuis _source", - "discover.advancedSettings.discover.readFieldsFromSourceDeprecation": "Ce paramètre est déclassé et sera supprimé dans la version 9.0 de Kibana.", - "discover.advancedSettings.discover.readFieldsFromSourceDescription": "Lorsque cette option est activée, les documents sont chargés directement depuis `_source`. Elle sera bientôt déclassée. Lorsqu'elle est désactivée, les champs sont extraits via la nouvelle API de champ du service de recherche de haut niveau.", "discover.advancedSettings.discover.showFieldStatistics": "Afficher les statistiques de champ", "discover.advancedSettings.discover.showFieldStatisticsDescription": "Activez le {fieldStatisticsDocs} pour afficher des détails tels que les valeurs minimale et maximale d'un champ numérique ou une carte d'un champ géographique. Cette fonctionnalité est en version bêta et susceptible d'être modifiée.", "discover.advancedSettings.discover.showMultifields": "Afficher les champs multiples", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 3e58909f4826f..37f24051c6001 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -2519,9 +2519,6 @@ "discover.advancedSettings.discover.modifyColumnsOnSwitchText": "新しいデータビューで使用できない列を削除します。", "discover.advancedSettings.discover.modifyColumnsOnSwitchTitle": "データビューを変更するときに列を修正", "discover.advancedSettings.discover.multiFieldsLinkText": "マルチフィールド", - "discover.advancedSettings.discover.readFieldsFromSource": "_sourceからフィールドを読み取る", - "discover.advancedSettings.discover.readFieldsFromSourceDeprecation": "この設定はサポートが終了し、Kibana 9.0では削除されます。", - "discover.advancedSettings.discover.readFieldsFromSourceDescription": "有効にすると、「_source」から直接ドキュメントを読み込みます。これはまもなく廃止される予定です。無効にすると、上位レベルの検索サービスで新しいフィールドAPI経由でフィールドを取得します。", "discover.advancedSettings.discover.showFieldStatistics": "フィールド統計情報を表示", "discover.advancedSettings.discover.showFieldStatisticsDescription": "{fieldStatisticsDocs}を有効にすると、数値フィールドの最大/最小値やジオフィールドの地図といった詳細が表示されます。この機能はベータ段階で、変更される可能性があります。", "discover.advancedSettings.discover.showMultifields": "マルチフィールドを表示", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 726679753f6bb..67f0cee7591ff 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -2510,9 +2510,6 @@ "discover.advancedSettings.discover.modifyColumnsOnSwitchText": "移除新数据视图中不存在的列。", "discover.advancedSettings.discover.modifyColumnsOnSwitchTitle": "在更改数据视图时修改列", "discover.advancedSettings.discover.multiFieldsLinkText": "多字段", - "discover.advancedSettings.discover.readFieldsFromSource": "从 _source 读取字段", - "discover.advancedSettings.discover.readFieldsFromSourceDeprecation": "此设置已过时,将在 Kibana 9.0 中移除。", - "discover.advancedSettings.discover.readFieldsFromSourceDescription": "启用后,将直接从 `_source` 加载文档。这很快将被弃用。禁用后,将通过高级别搜索服务中的新字段 API 检索字段。", "discover.advancedSettings.discover.showFieldStatistics": "显示字段统计信息", "discover.advancedSettings.discover.showFieldStatisticsDescription": "启用 {fieldStatisticsDocs} 以显示详细信息,如数字字段的最小和最大值,或地理字段的地图。此功能为公测版,可能会进行更改。", "discover.advancedSettings.discover.showMultifields": "显示多字段", diff --git a/x-pack/test/functional/apps/discover/__snapshots__/reporting.snap b/x-pack/test/functional/apps/discover/__snapshots__/reporting.snap index 3ad80a1cc1bfe..1577d942ccab7 100644 --- a/x-pack/test/functional/apps/discover/__snapshots__/reporting.snap +++ b/x-pack/test/functional/apps/discover/__snapshots__/reporting.snap @@ -745,751 +745,6 @@ exports[`discover Discover CSV Export Generate CSV: archived search generates a " `; -exports[`discover Discover CSV Export Generate CSV: archived search generates a report with discover:searchFieldsFromSource = true 1`] = ` -"\\"order_date\\",category,currency,\\"customer_id\\",\\"order_id\\",\\"day_of_week_i\\",\\"products.created_on\\",sku -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,732050,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0101201012, ZO0230902309, ZO0325603256, ZO0056400564\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,17,730736,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0074200742, ZO0266602666, ZO0364503645, ZO0134601346\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,5,725669,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0234102341, ZO0353703537, ZO0265102651, ZO0149501495\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,17,725499,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0678306783, ZO0305503055, ZO0369203692, ZO0006700067\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,25,721217,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0567705677, ZO0414204142, ZO0415904159, ZO0119801198\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,52,719675,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0448604486, ZO0686206862, ZO0395403954, ZO0528505285\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,25,719459,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0410004100, ZO0513605136, ZO0431404314, ZO0662906629\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Men's Accessories, Men's Clothing\\",EUR,52,716588,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0318303183, ZO0310503105, ZO0584605846, ZO0609706097\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes, Women's Accessories\\",EUR,38,714566,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0430204302, ZO0397303973, ZO0686806868, ZO0320403204\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes, Women's Accessories\\",EUR,52,713556,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0592105921, ZO0421204212, ZO0400604006, ZO0319403194\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Men's Clothing, Men's Accessories\\",EUR,52,713377,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0318803188, ZO0535005350, ZO0445504455, ZO0599605996\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,712926,3,\\"Dec 15, 2016 @ 00:00:00.000\\",ZO0263002630 -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,712856,3,\\"Dec 15, 2016 @ 00:00:00.000\\",ZO0263202632 -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,712590,3,\\"Dec 15, 2016 @ 00:00:00.000\\",ZO0262202622 -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,18,570694,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0376703767, ZO0350603506\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,44,570687,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0135501355, ZO0675806758\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,24,570671,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0240702407, ZO0099400994\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,570663,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0152501525, ZO0104201042\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,18,570658,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0003600036, ZO0016800168\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,570643,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0618806188, ZO0119701197\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,29,570632,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0432404324, ZO0313603136\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,51,570620,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0422204222, ZO0256502565\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,7,570608,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0478504785, ZO0663306633\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,570594,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0111901119, ZO0540605406\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,26,570588,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0092000920, ZO0152001520\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,8,570586,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0694206942, ZO0596505965\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,42,570576,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0637906379, ZO0325103251\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,570569,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0643506435, ZO0646406464\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,12,570552,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0216402164, ZO0666306663\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,25,570542,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0623606236, ZO0565405654\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,570532,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0557405574, ZO0118601186\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,570520,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0618906189, ZO0289502895\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,46,570512,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0332003320, ZO0357103571\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,6,570508,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0002600026, ZO0328703287\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,570502,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0280602806, ZO0408504085\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,17,570491,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0198901989, ZO0104701047\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,20,570484,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0712407124, ZO0095600956\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,39,570480,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0286202862, ZO0694506945\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,23,570477,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0299202992, ZO0392403924\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,570472,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0478704787, ZO0591205912\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,570442,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0175501755, ZO0103601036\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,32,570414,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0481704817, ZO0396503965\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,26,570396,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0495604956, ZO0208802088\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,36,570388,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0405604056, ZO0604506045\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,570374,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0674906749, ZO0073200732\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,570372,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0124001240, ZO0560205602\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,51,570353,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0413704137, ZO0559205592\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,8,570350,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0460004600, ZO0569705697\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,570335,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0337703377, ZO0048500485\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,10,570334,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0520205202, ZO0545205452\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,570309,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0496504965, ZO0269202692\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,18,570304,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0053000530, ZO0360203602\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,25,570303,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0573305733, ZO0513205132\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,570280,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0341703417, ZO0168701687\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,570264,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0627206272, ZO0285702857\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,43,570263,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0041800418, ZO0194901949\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,570254,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0495304953, ZO0634906349\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,570250,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0638906389, ZO0148001480\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,46,570234,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0707007070, ZO0016200162\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,34,570232,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0682006820, ZO0399103991\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,570209,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0658306583, ZO0570705707\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,17,570200,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0025100251, ZO0101901019\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,49,570177,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0532905329, ZO0524105241\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,17,570164,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0210002100, ZO0068200682\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories\\",EUR,4,570161,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0606606066, ZO0596305963\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,8,570151,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0589105891, ZO0587705877\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,19,570143,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0482904829\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,45,570133,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0320503205, ZO0049500495\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,50,570120,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0392903929, ZO0254802548\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,10,570111,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0253002530, ZO0117101171\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,29,570087,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0308403084, ZO0623506235\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,41,570079,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0598505985, ZO0449304493\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,570077,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0433904339, ZO0627706277\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,51,570075,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0621706217, ZO0114301143\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,46,570065,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0027300273, ZO0698606986\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,51,570061,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0604606046, ZO0416004160\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,24,570056,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0131801318, ZO0215802158\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,570040,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0146901469, ZO0673806738\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,17,570037,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0321503215, ZO0200102001\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,41,570024,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0631506315, ZO0426804268\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,570021,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0709807098, ZO0166301663\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,9,570009,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0510705107, ZO0594605946\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,34,570003,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0298902989, ZO0694506945\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,569995,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0125701257, ZO0664706647\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,19,569985,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0554005540, ZO0403504035\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,8,569984,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0537205372, ZO0403504035\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,45,569968,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0047300473, ZO0142401424\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,569962,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0129901299, ZO0440704407\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,30,569958,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0311903119, ZO0563305633\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,27,569953,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0021100211, ZO0193601936\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,13,569939,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0471304713, ZO0528905289\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,4,569925,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0437004370, ZO0475204752\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,569919,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0051200512, ZO0232602326\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,52,569905,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0599605996, ZO0403804038\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,569900,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0644506445, ZO0104901049\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,8,569898,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0591805918, ZO0474004740\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,20,569880,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0325303253, ZO0244002440\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,569873,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0165701657, ZO0485004850\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,42,569869,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0362803628, ZO0237802378\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,22,569868,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0200702007, ZO0106501065\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,17,569835,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0077800778, ZO0177301773\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,44,569834,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0076900769, ZO0151501515\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,569822,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0271402714, ZO0047200472\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,569821,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0066600666, ZO0049000490\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,569815,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0269602696, ZO0067400674\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,48,569814,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0602606026, ZO0298402984\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,30,569806,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0558305583\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,569787,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0055900559, ZO0224002240\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,41,569777,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0254302543, ZO0289102891\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,6,569768,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0231502315, ZO0131401314\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,569761,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0166101661, ZO0337203372\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Women's Accessories\\",EUR,7,569746,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0484004840, ZO0605906059\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,49,569743,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0610306103\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Women's Accessories\\",EUR,29,569736,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0517305173, ZO0319703197\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,20,569734,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0348703487, ZO0141401414\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,569716,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0146701467, ZO0212902129\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,6,569710,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0053600536, ZO0239702397\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,52,569699,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0398603986, ZO0521305213\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,50,569694,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0398703987, ZO0687806878\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,569679,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0433604336, ZO0275702757\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,569674,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0423104231, ZO0408804088\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,43,569652,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0665906659, ZO0240002400\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,52,569645,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0392803928, ZO0277102771\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,37,569637,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0300103001, ZO0688106881\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,6,569624,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0333803338, ZO0138901389\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,43,569623,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0208302083, ZO0307603076\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,569614,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0226202262, ZO0647006470\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,569611,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0450604506, ZO0440304403\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,24,569610,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0140001400, ZO0219302193\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Women's Accessories\\",EUR,16,569577,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0464404644, ZO0128401284\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,569569,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0070600706, ZO0488704887\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,17,569567,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0366203662, ZO0361403614\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,4,569548,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0587605876, ZO0463904639\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,29,569546,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0559105591, ZO0563205632\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,10,569531,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0664106641, ZO0549105491\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,5,569529,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0264102641, ZO0658706587\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,20,569513,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0135701357, ZO0097600976\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,14,569510,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0312203122, ZO0115101151\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,14,569505,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0608906089, ZO0478504785\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,569496,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0659006590, ZO0103801038\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,569477,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0533305333, ZO0565105651\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,51,569469,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0434204342, ZO0600206002\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,4,569468,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0285202852, ZO0448304483\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,28,569452,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0159301593, ZO0250502505\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,39,569436,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0386103861, ZO0451504515\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,26,569424,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0175201752, ZO0206202062\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,569422,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0102501025, ZO0063500635\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,45,569411,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0094200942, ZO0003700037\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,9,569392,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0516405164, ZO0532705327\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,569387,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0593805938, ZO0125201252\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,569375,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0347603476, ZO0668806688\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,20,569371,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0225702257, ZO0186601866\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,42,569370,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0358603586, ZO0641106411\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,19,569362,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0292402924, ZO0681006810\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,569356,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0010500105, ZO0172201722\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,31,569338,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0702507025, ZO0528105281\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,569337,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0634106341, ZO0066900669\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,14,569336,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0512505125, ZO0384103841\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,31,569312,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0425104251, ZO0107901079\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,24,569311,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0024600246, ZO0660706607\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,26,569309,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0364103641, ZO0708807088\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,5,732546,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0228602286, ZO0502605026, ZO0108901089, ZO0362503625\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories, Women's Clothing\\",EUR,5,728962,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0019800198, ZO0089200892, ZO0069700697, ZO0332303323\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,728580,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0156601566, ZO0498004980, ZO0070700707, ZO0086700867\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,728335,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0134701347, ZO0026200262, ZO0223102231, ZO0022900229\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,727370,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0680206802, ZO0321703217, ZO0049900499, ZO0029400294\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,5,726874,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0362303623, ZO0035400354, ZO0705207052, ZO0504005040\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,723213,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0297802978, ZO0456704567, ZO0572105721, ZO0280502805\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,722613,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0618806188, ZO0442804428, ZO0530705307, ZO0410804108\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,38,721706,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0519005190, ZO0610206102, ZO0514405144, ZO0586505865\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,19,720661,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0423004230, ZO0471604716, ZO0315303153, ZO0445604456\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,13,717726,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0284902849, ZO0481204812, ZO0398403984, ZO0282402824\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories, Men's Clothing\\",EUR,25,716889,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0510505105, ZO0482404824, ZO0602306023, ZO0445904459\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,25,714385,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0586805868, ZO0609106091, ZO0310903109, ZO0420104201\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing, Men's Shoes\\",EUR,25,714149,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0309503095, ZO0411904119, ZO0683306833, ZO0397103971\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,569306,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0412004120, ZO0625406254\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,41,569299,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0519605196, ZO0630806308\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,569278,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0271802718, ZO0057100571\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,33,569262,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0609906099, ZO0614806148\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,5,569259,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0335503355, ZO0381003810\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,17,569250,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0228902289, ZO0005400054\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,21,569223,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0444004440, ZO0596805968\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,6,569218,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0633206332, ZO0488604886\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,18,569214,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0490104901, ZO0087200872\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,49,569209,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0472304723, ZO0403504035\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,37,569198,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0464304643, ZO0581905819\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,569183,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0641206412, ZO0165301653\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,569178,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0177001770, ZO0260502605\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,51,569173,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0452204522, ZO0631206312\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,52,569163,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0681106811, ZO0682706827\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,569144,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0108101081, ZO0501105011\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,13,569123,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0609006090, ZO0441504415\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,569107,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0339603396, ZO0504705047\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,569103,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0636506365, ZO0345503455\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,30,569097,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0511605116, ZO0483004830\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,11,569091,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0258602586, ZO0552205522\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,569083,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0099000990, ZO0631606316\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,43,569056,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0494804948, ZO0096000960\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,28,569055,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0375903759, ZO0269402694\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,23,569046,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0393103931, ZO0619906199\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories\\",EUR,11,569045,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0315903159, ZO0461104611\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,45,569033,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0015700157, ZO0362503625\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,12,569027,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0245402454, ZO0060100601\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,43,569010,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0090700907, ZO0265002650\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,4,569003,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0414704147, ZO0387503875\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,33,568993,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0510505105, ZO0482604826\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,568955,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0068900689, ZO0076200762\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,9,568954,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0399603996, ZO0685906859\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,15,568943,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0445804458, ZO0686106861\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,42,568941,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0076600766, ZO0068800688\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,568938,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0642806428, ZO0632506325\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,23,568926,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0298302983, ZO0300003000\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,4,568901,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0466704667, ZO0427104271\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,33,568898,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0542205422, ZO0517805178\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,24,568894,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0141801418, ZO0206302063\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,28,568877,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0132401324, ZO0058200582\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,11,568875,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0613606136, ZO0463804638\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,568865,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0294502945, ZO0560605606\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,29,568854,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0616706167, ZO0255402554\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,23,568845,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0657906579, ZO0258102581\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,39,568818,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0294802948, ZO0451404514\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,568816,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0146601466, ZO0108601086\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,8,568793,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0312503125, ZO0545505455\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,42,568789,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0197501975, ZO0079300793\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,568776,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0616906169, ZO0296902969\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,568774,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0037200372, ZO0369303693\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,568762,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0052200522, ZO0265602656\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,49,568751,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0308703087, ZO0613106131\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Women's Accessories\\",EUR,25,568745,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0528305283, ZO0309203092\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,41,568707,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0513305133, ZO0253302533\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,20,568706,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0672206722, ZO0331903319\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,568702,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0142801428, ZO0182801828\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,14,568682,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0680706807, ZO0392603926\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,22,568674,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0192301923, ZO0011400114\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,568671,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0637406374, ZO0219002190\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,30,568652,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0403304033, ZO0125901259\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,7,568640,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0125901259, ZO0443204432\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,16,568638,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0388003880, ZO0478304783\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,568636,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0503905039, ZO0631806318\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,45,568611,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0174701747, ZO0305103051\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,50,568609,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0570405704, ZO0256102561\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,10,568589,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0114401144, ZO0564705647\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,42,568586,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0232202322, ZO0208402084\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,29,568578,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0520005200, ZO0421104211\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,568571,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0034100341, ZO0343103431\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,38,568559,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0599005990, ZO0626506265\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,568541,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0428904289, ZO0588205882\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,31,568531,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0482104821, ZO0447104471\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,39,568524,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0424104241, ZO0694706947\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,6,568515,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0159901599, ZO0238702387\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,568507,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0431304313, ZO0523605236\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,44,568503,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0643306433, ZO0376203762\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,568499,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0474604746, ZO0113801138\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,568492,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0346103461, ZO0054100541\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,568469,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0659806598, ZO0070100701\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,27,568458,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0164501645, ZO0195501955\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,29,568455,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0413104131, ZO0392303923\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,17,568439,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0170601706, ZO0251502515\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,568434,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0362203622, ZO0000300003\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,36,568428,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0408404084, ZO0422304223\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,36,568397,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0112101121, ZO0530405304\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,568393,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0374103741, ZO0242102421\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,568386,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0422404224, ZO0291702917\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Women's Accessories\\",EUR,21,568375,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0623606236, ZO0605306053\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,19,568363,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0629806298, ZO0467104671\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,15,568360,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0480304803, ZO0274402744\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,31,568350,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0317303173, ZO0403504035\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,39,568331,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0385903859, ZO0516605166\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,30,568325,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0288202882, ZO0391803918\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,13,568319,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0535105351, ZO0403504035\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,568308,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0138701387, ZO0024600246\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,568301,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0146401464, ZO0014700147\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,10,568292,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0534205342, ZO0599605996\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,568278,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0536705367, ZO0449804498\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,568275,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0330903309, ZO0214802148\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Men's Clothing\\",EUR,48,568269,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0318603186, ZO0407904079\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,51,568236,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0416604166, ZO0581605816\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,15,568232,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0282902829, ZO0566605666\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,44,568229,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0192201922, ZO0192801928\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,33,568228,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0387103871, ZO0580005800\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,17,568218,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0227402274, ZO0079000790\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,14,568212,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0536405364, ZO0688306883\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,568192,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0485504855, ZO0355603556\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,568182,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0338603386, ZO0641006410\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,13,568177,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0584505845, ZO0403804038\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,568165,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0065600656, ZO0337003370\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,568152,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0349303493, ZO0043900439\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,24,568149,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0342503425, ZO0675206752\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,22,568128,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0087500875, ZO0007100071\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,52,568117,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0315203152, ZO0406304063\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,568106,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0068700687, ZO0101301013\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,17,568083,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0200902009, ZO0092300923\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,568070,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0575605756, ZO0293302933\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,23,568069,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0530305303, ZO0528405284\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,37,568068,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0583005830, ZO0602706027\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,568045,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0160501605, ZO0069500695\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,7,568044,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0630406304, ZO0120201202\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,37,568039,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0599705997, ZO0416704167\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,44,568023,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0075900759, ZO0489304893\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,568019,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0530805308, ZO0563905639\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,568014,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0523905239, ZO0556605566\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,567996,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0105401054, ZO0046200462\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,33,567994,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0430904309, ZO0288402884\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,733060,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0155601556, ZO0013600136, ZO0235702357, ZO0383203832\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories, Women's Shoes\\",EUR,5,732229,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0175701757, ZO0163801638, ZO0697506975, ZO0245602456\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,731037,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0148801488, ZO0335003350, ZO0155301553, ZO0074300743\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,17,728256,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0371903719, ZO0352803528, ZO0137501375, ZO0229202292\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,727730,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0050600506, ZO0710907109, ZO0023300233, ZO0334603346\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,5,724844,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0707507075, ZO0246402464, ZO0226802268, ZO0343503435\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,724806,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0643106431, ZO0033300333, ZO0696206962, ZO0651206512\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,724326,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0499404994, ZO0641606416, ZO0334303343, ZO0676706767\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,13,721778,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0400004000, ZO0519305193, ZO0482004820, ZO0540305403\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,13,717603,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0685306853, ZO0585305853, ZO0450504505, ZO0552405524\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,13,716462,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0549505495, ZO0458504585, ZO0602506025, ZO0617506175\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,715455,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0477504775, ZO0613206132, ZO0585405854, ZO0110701107\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,18,567973,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0495104951, ZO0305903059\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,14,567970,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0441504415, ZO0691606916\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,567950,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0273002730, ZO0541105411\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,25,567939,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0127201272, ZO0425504255\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,49,567935,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0116101161, ZO0574305743\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,567926,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0113301133, ZO0562105621\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,37,567909,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0609606096, ZO0588905889\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,29,567889,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0282202822, ZO0393003930\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,567876,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0705707057, ZO0047700477\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,567869,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0565105651, ZO0443804438\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,9,567868,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0310403104, ZO0416604166\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,28,567855,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0657106571, ZO0084800848\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,31,567852,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0523805238, ZO0596505965\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,11,567835,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0589405894, ZO0483304833\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,22,567822,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0244802448, ZO0346303463\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,46,567815,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0263602636, ZO0241002410\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,4,567806,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0517705177, ZO0569305693\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,7,567790,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0522405224, ZO0405104051\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,567769,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0414004140, ZO0630106301\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,39,567755,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0571405714, ZO0255402554\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,39,567736,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0663706637, ZO0620906209\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,30,567735,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0129701297, ZO0518705187\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,19,567729,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0395103951, ZO0296102961\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,20,567708,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0090500905, ZO0466204662\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,567703,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0037900379, ZO0134901349\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,6,567684,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0201202012, ZO0035000350\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,24,567669,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0148301483, ZO0202902029\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,567667,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0273802738, ZO0300303003\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,37,567666,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0311403114, ZO0282002820\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,11,567662,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0308903089, ZO0614306143\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,14,567654,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0121301213, ZO0399403994\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,46,567631,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0101101011, ZO0667406674\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,567625,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0328603286, ZO0328803288\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,42,567623,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0239802398, ZO0645406454\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,6,567615,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0013500135, ZO0174501745\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,26,567598,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0039400394, ZO0672906729\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,46,567593,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0655306553, ZO0208902089\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,41,567592,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0535405354, ZO0291302913\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,567573,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0215602156, ZO0336803368\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,567565,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0015600156, ZO0323603236\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,567544,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0585005850, ZO0120301203\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,51,567543,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0608106081, ZO0296502965\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,31,567538,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0596905969, ZO0450804508\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,44,567524,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0096300963, ZO0377403774\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,21,567504,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0606506065, ZO0277702777\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,39,567492,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0277302773, ZO0443004430\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,42,567486,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0058200582, ZO0365503655\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,14,567475,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0578805788, ZO0520405204\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,32,567465,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0274502745, ZO0686006860\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,567462,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0644406444, ZO0709307093\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,567454,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0645406454, ZO0166001660\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,42,567446,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0322803228, ZO0002700027\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,567437,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0275902759, ZO0545005450\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,50,567418,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0400404004, ZO0625006250\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,52,567404,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0107101071, ZO0537905379\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,44,567403,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0138601386, ZO0259202592\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,52,567400,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0605606056, ZO0588105881\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,41,567384,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0426704267, ZO0612006120\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,567383,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0647406474, ZO0330703307\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,567381,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0278402784, ZO0458304583\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,26,567365,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0008600086, ZO0266002660\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Men's Clothing\\",EUR,13,567356,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0319503195, ZO0409904099\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,5,567341,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0674506745, ZO0219202192\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,7,567340,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0615606156, ZO0514905149\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,14,567324,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0426604266, ZO0629406294\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,39,567318,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0421104211, ZO0256202562\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,37,567316,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0390403904, ZO0403004030\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,45,567308,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0181601816, ZO0011000110\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,567301,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0577605776, ZO0438104381\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,15,567294,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0317403174, ZO0457204572\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,9,567290,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0442704427\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,567281,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0221402214, ZO0632806328\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,26,567260,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0068100681, ZO0674106741\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories\\",EUR,50,567256,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0461004610, ZO0702707027\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,22,567252,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0369803698, ZO0220502205\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,11,567240,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0421004210, ZO0689006890\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories\\",EUR,10,567224,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0128501285, ZO0606306063\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,567207,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0033600336, ZO0109401094\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,567191,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0113901139, ZO0478904789\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,17,567177,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0197301973, ZO0180401804\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,567169,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0558805588, ZO0622206222\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,38,567143,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0573005730, ZO0313203132\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,15,567135,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0528305283, ZO0549305493\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,567119,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0711507115, ZO0350903509\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,26,567095,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0339803398, ZO0098200982\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,33,567094,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0442904429, ZO0629706297\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,9,567082,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0278802788, ZO0515605156\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,28,567081,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0209702097, ZO0186301863\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,567069,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0503805038, ZO0047500475\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,567068,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0038000380, ZO0711007110\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,41,567048,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0566905669, ZO0564005640\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,26,567042,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0243002430, ZO0103901039\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,567039,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0184101841, ZO0711207112\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,5,567037,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0206402064, ZO0365903659\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,28,567019,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0151301513, ZO0204902049\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,31,567015,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0558605586, ZO0527805278\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,17,566986,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0360903609, ZO0030100301\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,566985,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0044700447, ZO0502105021\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,566982,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0149301493, ZO0099800998\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,566979,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0071900719, ZO0493404934\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,49,566951,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0406604066, ZO0517405174\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,566944,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0497004970, ZO0054900549\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,44,566942,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0084000840, ZO0636606366\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,50,566935,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0473704737, ZO0121501215\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,20,566924,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0673606736, ZO0161801618\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,20,566896,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0242702427, ZO0090000900\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,38,566892,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0589505895, ZO0575405754\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,12,566884,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0490204902, ZO0025000250\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,14,566881,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0419604196, ZO0559705597\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,8,566861,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0520305203, ZO0462204622\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,43,566856,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0216502165, ZO0327503275\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,49,566852,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0257002570, ZO0455404554\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,566845,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0547905479, ZO0583305833\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,566831,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0341103411, ZO0648406484\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,566829,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0100901009, ZO0235102351\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,566826,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0575305753, ZO0540605406\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,45,566812,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0266902669, ZO0244202442\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,566801,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0279702797, ZO0573705737\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,20,566790,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0699206992, ZO0641306413\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,46,566775,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0671006710, ZO0708007080\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,46,566772,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0152901529, ZO0019100191\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,566768,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0217702177, ZO0331703317\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,43,566757,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0196201962, ZO0168601686\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,566735,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0632406324, ZO0060300603\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,11,566734,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0691006910, ZO0314203142\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,38,566729,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0557305573, ZO0110401104\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,50,566725,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0444404444, ZO0584205842\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,38,566706,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0521505215, ZO0130501305\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,566690,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0449004490, ZO0118501185\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,566685,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0296902969, ZO0530205302\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,9,566680,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0316703167, ZO0393303933\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,17,731352,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0018200182, ZO0016100161, ZO0329703297, ZO0057800578\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories, Women's Shoes\\",EUR,5,730725,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0501605016, ZO0189601896, ZO0363003630, ZO0699306993\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,5,726754,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0138001380, ZO0648006480, ZO0193501935, ZO0228402284\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing, Women's Accessories\\",EUR,27,723242,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0249702497, ZO0643306433, ZO0088900889, ZO0634406344\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Women's Accessories\\",EUR,25,720445,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0423004230, ZO0292702927, ZO0320003200, ZO0318303183\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,52,720399,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0386303863, ZO0561905619, ZO0397903979, ZO0590105901\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,52,718085,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0129001290, ZO0310103101, ZO0547805478, ZO0560805608\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Women's Accessories\\",EUR,52,717206,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0390403904, ZO0608306083, ZO0690906909, ZO0394403944\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,52,717057,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0623406234, ZO0404704047, ZO0384603846, ZO0476204762\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,19,715961,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0444904449, ZO0292502925, ZO0434604346, ZO0461804618\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,19,715133,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0537005370, ZO0508605086, ZO0566605666, ZO0111301113\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,52,715081,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0688806888, ZO0399003990, ZO0412404124, ZO0405304053\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,566671,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0427604276, ZO0113801138\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,566653,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0666506665, ZO0216602166\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,27,566650,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0049100491, ZO0194801948\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,28,566628,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0195601956, ZO0098900989\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,566622,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0228402284, ZO0082300823\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,16,566621,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0579605796, ZO0315803158\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,566607,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0572205722, ZO0585205852\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,26,566591,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0502405024, ZO0366003660\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,8,566580,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0417304173, ZO0123001230\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,16,566564,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0107301073, ZO0293002930\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,566553,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0435004350, ZO0544005440\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,566538,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0224402244, ZO0342403424\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,9,566519,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0700907009, ZO0115801158\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,566518,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0554605546, ZO0569005690\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,19,566514,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0539305393, ZO0522305223\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,30,566506,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0680806808, ZO0609306093\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,51,566498,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0387103871, ZO0550005500\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,25,566456,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0597105971, ZO0283702837\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,16,566454,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0547405474, ZO0401104011\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,28,566452,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0706307063, ZO0011300113\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,566443,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0160201602, ZO0261502615\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,20,566428,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0136501365, ZO0339103391\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,45,566417,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0084900849, ZO0194701947\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,33,566416,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0396903969, ZO0607906079\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,24,566415,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0261102611, ZO0667106671\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,26,566400,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0204702047, ZO0009600096\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,566391,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0228302283, ZO0167501675\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,5,566382,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0503505035, ZO0240302403\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,48,566364,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0512505125, ZO0525005250\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,36,566360,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0285102851, ZO0658306583\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,6,566357,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0061600616, ZO0180701807\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,566343,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0185101851, ZO0052800528\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,45,566334,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0010800108, ZO0635706357\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,566320,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0105001050, ZO0652306523\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,22,566315,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0703707037, ZO0139601396\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,566295,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0635606356, ZO0043100431\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,31,566284,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0541405414, ZO0588205882\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,566280,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0573205732, ZO0116701167\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,566261,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0577105771, ZO0289302893\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,25,566259,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0694206942, ZO0553805538\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,18,566256,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0227302273, ZO0668706687\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,5,566248,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0678806788, ZO0186101861\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,31,566247,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0384903849, ZO0403504035\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,566232,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0545205452, ZO0437304373\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,9,566215,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0384903849, ZO0579305793\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,566187,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0548905489, ZO0459404594\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,8,566186,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0522105221, ZO0459104591\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,52,566176,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0607206072, ZO0431404314\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,46,566170,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0324803248, ZO0703907039\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,15,566167,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0623006230, ZO0419304193\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,566156,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0424104241, ZO0117901179\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,566155,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0501005010, ZO0214002140\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,566146,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0646206462, ZO0146201462\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,49,566125,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0433104331, ZO0549505495\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,566121,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0227202272, ZO0357003570\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,36,566101,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0691406914, ZO0617806178\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,6,566100,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0013400134, ZO0667306673\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,50,566079,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0663306633, ZO0687306873\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,566070,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0046100461, ZO0151201512\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,15,566053,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0284702847, ZO0299202992\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,46,566051,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0025600256, ZO0270202702\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,566044,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0552605526, ZO0292702927\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Women's Accessories\\",EUR,29,566042,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0451804518, ZO0127901279\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,37,566036,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0583605836, ZO0510605106\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,26,565998,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0238802388, ZO0066600666\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,18,565988,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0074700747, ZO0645206452\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,33,565985,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0436604366, ZO0280302803\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,13,565982,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0410804108, ZO0309303093\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,18,565970,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0673406734, ZO0165601656\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,22,565948,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0190701907, ZO0654806548\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,565945,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0270602706, ZO0269502695\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,565918,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0155001550, ZO0072100721\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,19,565915,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0515005150, ZO0509805098\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,565900,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0266102661, ZO0169701697\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Men's Clothing\\",EUR,31,565896,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0466104661, ZO0444104441\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,49,565877,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0125401254, ZO0123701237\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,7,565855,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0417504175, ZO0535205352\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,28,565838,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0343703437, ZO0207102071\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,565830,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0215702157, ZO0638806388\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,565819,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0031700317, ZO0157701577\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,30,565809,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0557905579, ZO0513705137\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,6,565804,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0306803068, ZO0174601746\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,46,565796,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0081500815, ZO0342603426\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,565793,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0712807128, ZO0007500075\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,565776,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0343103431, ZO0345803458\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,31,565768,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0458004580, ZO0273402734\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,565767,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0414304143, ZO0425204252\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,565760,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0504505045, ZO0223802238\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,39,565734,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0513205132, ZO0258202582\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,15,565732,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0291402914, ZO0603006030\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,565728,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0486404864, ZO0248602486\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,24,565723,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0302303023, ZO0246602466\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,565722,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0656406564, ZO0495504955\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,31,565708,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0253302533, ZO0605706057\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,565698,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0336503365, ZO0637006370\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,6,565697,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0498904989, ZO0641706417\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,38,565684,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0507705077, ZO0409804098\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,49,565683,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0573205732, ZO0310303103\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,26,565678,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0081800818, ZO0485604856\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,11,565667,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0618706187, ZO0388503885\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,565640,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0631606316, ZO0045300453\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,27,565639,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0193901939, ZO0080400804\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,13,565605,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0113301133\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,565596,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0332903329, ZO0159401594\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,14,565591,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0683806838, ZO0429204292\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,25,565580,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0395303953, ZO0386703867\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,565567,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0437604376, ZO0618906189\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,39,565564,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0576305763, ZO0116801168\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,565560,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0567505675, ZO0442104421\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,565542,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0224302243, ZO0359103591\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,26,565538,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0486804868, ZO0371603716\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,565521,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0660406604, ZO0484504845\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,565504,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0653406534, ZO0049300493\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,565498,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0046600466, ZO0503305033\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,5,565489,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0077200772, ZO0643006430\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,48,565479,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0588805888, ZO0314903149\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,22,565473,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0365303653, ZO0235802358\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,565466,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0285402854, ZO0538605386\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,565459,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0242302423, ZO0676006760\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,565452,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0133601336, ZO0643906439\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,565446,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0643206432, ZO0140101401\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,6,565410,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0023600236, ZO0704307043\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,565404,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0048900489, ZO0228702287\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,565401,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0014800148, ZO0154501545\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,565392,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0616606166, ZO0592205922\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,44,565381,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0060200602, ZO0076300763\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,33,565366,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0684906849, ZO0575905759\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,565360,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0448604486, ZO0450704507\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,18,565339,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0346503465, ZO0678406784\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,44,565334,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0641706417, ZO0382303823\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,36,565330,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0621606216, ZO0628806288\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,731788,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0486004860, ZO0177901779, ZO0680506805, ZO0340503405\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,17,730663,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0697406974, ZO0370303703, ZO0368103681, ZO0013800138\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,5,727071,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0091900919, ZO0660006600, ZO0197001970, ZO0074600746\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,725995,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0222102221, ZO0332103321, ZO0182701827, ZO0230502305\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,723683,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0648206482, ZO0496104961, ZO0142601426, ZO0491504915\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,38,717243,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0479104791, ZO0125301253, ZO0459004590, ZO0549905499\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,13,715752,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0130801308, ZO0402604026, ZO0630506305, ZO0297402974\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,565308,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0172401724, ZO0184901849\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,28,565304,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0017800178, ZO0229602296\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,50,565284,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0687206872, ZO0422304223\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,18,565276,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0131501315, ZO0668806688\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,49,565266,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0255602556, ZO0468304683\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,7,565263,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0582705827, ZO0111801118\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,12,565262,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0303503035, ZO0197601976\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,565237,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0323303233, ZO0172101721\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,29,565233,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0614906149, ZO0430404304\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,17,565231,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0235202352, ZO0135001350\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,14,565224,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0406604066, ZO0576805768\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,12,565222,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0102001020, ZO0252402524\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,33,565214,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0588705887\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,13,565206,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0316303163, ZO0401004010\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,27,565173,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0203802038, ZO0014900149\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,565161,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0441404414, ZO0430504305\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,48,565160,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0693306933, ZO0514605146\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,565150,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0624906249, ZO0411604116\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,25,565138,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0615506155, ZO0445304453\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,565137,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0118501185, ZO0561905619\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,10,565123,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0316903169, ZO0400504005\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,565100,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0069000690, ZO0490004900\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,45,565091,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0324703247, ZO0088600886\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,34,565090,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0690306903, ZO0521005210\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,31,565084,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0549805498, ZO0541205412\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,565077,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0118701187, ZO0123901239\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,49,565061,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0681106811, ZO0286402864\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,43,565052,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0697006970, ZO0711407114\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,42,565039,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0489804898, ZO0695006950\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,51,565025,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0280802808, ZO0549005490\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,565009,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0225302253, ZO0183101831\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,565002,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0354203542, ZO0338503385\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,564994,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0180601806, ZO0710007100\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,564987,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0526805268, ZO0478104781\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,18,564968,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0134101341, ZO0062400624\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,564957,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0171601716, ZO0214602146\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,22,564954,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0362903629, ZO0048100481\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,18,564940,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0026800268, ZO0003600036\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,51,564937,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0520605206, ZO0432204322\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,23,564932,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0557305573, ZO0607806078\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,8,564915,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0286502865, ZO0394703947\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,27,564902,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0698406984, ZO0704207042\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,43,564893,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0322403224, ZO0227802278\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,6,564885,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0303803038, ZO0192501925\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,564883,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0705607056, ZO0334703347\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,564876,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0215502155, ZO0168101681\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,28,564869,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0192401924, ZO0366703667\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,564844,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0553205532, ZO0526205262\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,39,564842,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0432004320, ZO0403504035\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,6,564819,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0374603746, ZO0697106971\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,4,564818,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0475004750, ZO0412304123\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,26,564812,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0266002660, ZO0031900319\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,564804,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0259702597, ZO0640606406\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,564796,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0022100221, ZO0172301723\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,23,564777,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0452704527, ZO0122201222\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,564770,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0704907049, ZO0024700247\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,564761,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0665006650, ZO0709407094\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,564759,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0218802188, ZO0492604926\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,32,564756,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0556805568, ZO0481504815\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,17,564739,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0335603356, ZO0236502365\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,30,564735,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0509705097, ZO0120501205\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,37,564733,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0384303843, ZO0273702737\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,564725,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0071700717, ZO0364303643\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,564710,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0263402634, ZO0499404994\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,564706,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0709007090, ZO0362103621\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,564701,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0585205852, ZO0418104181\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,45,564686,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0373303733, ZO0131201312\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,28,564676,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0108401084, ZO0139301393\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,23,564670,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0531205312, ZO0684706847\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,564661,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0415004150, ZO0125501255\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,21,564649,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0405704057, ZO0411704117\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,26,564627,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0211702117, ZO0499004990\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,10,564619,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0470304703, ZO0406204062\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,564609,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0162401624, ZO0156001560\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,43,564605,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0333103331, ZO0694806948\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,27,564604,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0237702377, ZO0304303043\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,41,564576,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0681206812, ZO0441904419\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,46,564559,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0015500155, ZO0650806508\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,34,564557,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0664606646, ZO0460404604\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,22,564536,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0304603046, ZO0370603706\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,564533,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0496704967, ZO0049700497\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,564532,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0474704747, ZO0622006220\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,52,564513,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0390003900, ZO0287902879\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,26,564510,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0093600936, ZO0145301453\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,43,564481,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0321603216, ZO0078000780\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,564479,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0409304093, ZO0436904369\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,564460,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0655106551, ZO0349403494\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,44,564446,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0093400934, ZO0679406794\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,19,564445,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0593805938, ZO0701407014\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,564429,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0260702607, ZO0495804958\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,564409,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0178501785, ZO0503805038\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,564398,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0328703287, ZO0351003510\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,24,564395,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0236702367, ZO0660706607\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,28,564394,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0269902699, ZO0667906679\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,6,564380,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0050400504, ZO0660006600\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,34,564366,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0681906819, ZO0549705497\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,37,564361,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0422304223, ZO0600506005\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,564350,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0444104441, ZO0476804768\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,10,564340,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0399703997, ZO0565805658\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,27,564339,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0082900829, ZO0347903479\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,564331,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0229402294, ZO0303303033\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,564315,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0221002210, ZO0263702637\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,5,564307,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0246602466, ZO0195201952\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,564274,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0542905429, ZO0423604236\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,50,564272,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0534405344, ZO0512105121\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,48,564271,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0507905079, ZO0430804308\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,564269,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0281102811, ZO0555705557\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,29,564257,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0539205392, ZO0577705777\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,50,564241,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0605506055, ZO0547505475\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,34,564237,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0311203112, ZO0395703957\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,44,564221,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0249702497, ZO0487404874\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,564215,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0147201472, ZO0152201522\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,564207,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0711807118, ZO0073100731\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,6,564190,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0243902439, ZO0208702087\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,42,564174,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0032300323, ZO0236302363\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories\\",EUR,23,564166,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0607106071, ZO0470704707\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,5,564164,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0673506735, ZO0213002130\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,564148,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0057900579, ZO0211602116\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,564144,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0218602186, ZO0501005010\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,564140,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0221002210, ZO0268502685\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,564121,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0291902919, ZO0617206172\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,8,564106,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0298002980, ZO0313103131\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,48,564095,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0613806138, ZO0403504035\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,25,564080,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0415804158, ZO0460804608\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,37,564075,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0622706227, ZO0525405254\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,24,564070,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0234202342, ZO0245102451\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,564065,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0711207112, ZO0646106461\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,41,564032,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0478404784, ZO0521905219\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,564030,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0179901799, ZO0637606376\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,8,564024,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0534405344, ZO0619006190\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,564016,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0436904369, ZO0290402904\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,44,564009,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0487904879, ZO0027100271\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,564000,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0364603646, ZO0018200182\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,33,563984,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0121301213, ZO0294102941\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,6,563967,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0493404934, ZO0640806408\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,563965,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0045800458, ZO0503405034\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,22,563964,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0001200012, ZO0251902519\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,20,563953,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0376203762, ZO0303603036\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,563947,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0348103481, ZO0164501645\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,34,563931,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0444304443, ZO0596505965\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,13,563928,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0424104241, ZO0394103941\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,46,563927,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0009800098, ZO0362803628\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,563924,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0539805398, ZO0554205542\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,563909,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0452804528, ZO0453604536\\" -" -`; - exports[`discover Discover CSV Export Generate CSV: archived search generates a report with filtered data 1`] = ` "\\"order_date\\",category,currency,\\"customer_id\\",\\"order_id\\",\\"day_of_week_i\\",\\"products.created_on\\",sku \\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,52,719675,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0448604486, ZO0686206862, ZO0395403954, ZO0528505285\\" diff --git a/x-pack/test/functional/apps/discover/reporting.ts b/x-pack/test/functional/apps/discover/reporting.ts index b86d30efe984f..0842bc9d5fc73 100644 --- a/x-pack/test/functional/apps/discover/reporting.ts +++ b/x-pack/test/functional/apps/discover/reporting.ts @@ -31,11 +31,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const toasts = getService('toasts'); - const setFieldsFromSource = async (setValue: boolean) => { - await kibanaServer.uiSettings.update({ 'discover:searchFieldsFromSource': setValue }); - await browser.refresh(); - }; - const getReport = async ({ timeout } = { timeout: 60 * 1000 }) => { // close any open notification toasts await toasts.dismissAll(); @@ -327,21 +322,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const { text: csvFile } = await getReport(); expectSnapshot(csvFile).toMatch(); }); - - it('generates a report with discover:searchFieldsFromSource = true', async () => { - await discover.loadSavedSearch('Ecommerce Data'); - - await retry.try(async () => { - expect(await discover.getHitCount()).to.equal('740'); - }); - - await setFieldsFromSource(true); - - const { text: csvFile } = await getReport(); - expectSnapshot(csvFile).toMatch(); - - await setFieldsFromSource(false); - }); }); }); } diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group6/_sidebar.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group6/_sidebar.ts index e7be4ab2859f5..8de73d5b2b92e 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/group6/_sidebar.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/group6/_sidebar.ts @@ -273,49 +273,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await expectFieldListDescription(INITIAL_FIELD_LIST_SUMMARY); }); - it('should show field list groups excluding subfields when searched from source', async function () { - await kibanaServer.uiSettings.update({ 'discover:searchFieldsFromSource': true }); - await browser.refresh(); - - await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); - expect(await PageObjects.unifiedFieldList.doesSidebarShowFields()).to.be(true); - - // Initial Available fields - const availableFields = await PageObjects.unifiedFieldList.getSidebarSectionFieldNames( - 'available' - ); - expect(availableFields.length).to.be(48); - expect( - availableFields - .join(', ') - .startsWith( - '@message, @tags, @timestamp, agent, bytes, clientip, extension, geo.coordinates' - ) - ).to.be(true); - - // Available fields after scrolling down - const metaSectionButton = await find.byCssSelector( - PageObjects.unifiedFieldList.getSidebarSectionSelector('meta', true) - ); - await metaSectionButton.scrollIntoViewIfNecessary(); - - // Expand Meta section - await PageObjects.unifiedFieldList.toggleSidebarSection('meta'); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('meta')).join(', ') - ).to.be('_id, _ignored, _index, _score'); - - // Expand Unmapped section - await PageObjects.unifiedFieldList.toggleSidebarSection('unmapped'); - expect( - (await PageObjects.unifiedFieldList.getSidebarSectionFieldNames('unmapped')).join(', ') - ).to.be('relatedContent'); - - await expectFieldListDescription( - '48 available fields. 1 unmapped field. 5 empty fields. 4 meta fields.' - ); - }); - it('should show selected and popular fields', async function () { await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); await PageObjects.discover.waitUntilSearchingHasFinished(); diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/__snapshots__/reporting.snap b/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/__snapshots__/reporting.snap index dd198993f2ad8..b1c827636da6e 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/__snapshots__/reporting.snap +++ b/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/__snapshots__/reporting.snap @@ -745,751 +745,6 @@ exports[`discover Discover CSV Export Generate CSV: archived search generates a " `; -exports[`discover Discover CSV Export Generate CSV: archived search generates a report with discover:searchFieldsFromSource = true 1`] = ` -"\\"order_date\\",category,currency,\\"customer_id\\",\\"order_id\\",\\"day_of_week_i\\",\\"products.created_on\\",sku -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,732050,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0101201012, ZO0230902309, ZO0325603256, ZO0056400564\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,17,730736,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0074200742, ZO0266602666, ZO0364503645, ZO0134601346\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,5,725669,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0234102341, ZO0353703537, ZO0265102651, ZO0149501495\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,17,725499,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0678306783, ZO0305503055, ZO0369203692, ZO0006700067\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,25,721217,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0567705677, ZO0414204142, ZO0415904159, ZO0119801198\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,52,719675,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0448604486, ZO0686206862, ZO0395403954, ZO0528505285\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,25,719459,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0410004100, ZO0513605136, ZO0431404314, ZO0662906629\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Men's Accessories, Men's Clothing\\",EUR,52,716588,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0318303183, ZO0310503105, ZO0584605846, ZO0609706097\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes, Women's Accessories\\",EUR,38,714566,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0430204302, ZO0397303973, ZO0686806868, ZO0320403204\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes, Women's Accessories\\",EUR,52,713556,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0592105921, ZO0421204212, ZO0400604006, ZO0319403194\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Men's Clothing, Men's Accessories\\",EUR,52,713377,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0318803188, ZO0535005350, ZO0445504455, ZO0599605996\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,712926,3,\\"Dec 15, 2016 @ 00:00:00.000\\",ZO0263002630 -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,712856,3,\\"Dec 15, 2016 @ 00:00:00.000\\",ZO0263202632 -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,712590,3,\\"Dec 15, 2016 @ 00:00:00.000\\",ZO0262202622 -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,18,570694,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0376703767, ZO0350603506\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,44,570687,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0135501355, ZO0675806758\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,24,570671,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0240702407, ZO0099400994\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,570663,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0152501525, ZO0104201042\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,18,570658,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0003600036, ZO0016800168\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,570643,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0618806188, ZO0119701197\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,29,570632,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0432404324, ZO0313603136\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,51,570620,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0422204222, ZO0256502565\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,7,570608,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0478504785, ZO0663306633\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,570594,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0111901119, ZO0540605406\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,26,570588,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0092000920, ZO0152001520\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,8,570586,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0694206942, ZO0596505965\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,42,570576,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0637906379, ZO0325103251\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,570569,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0643506435, ZO0646406464\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,12,570552,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0216402164, ZO0666306663\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,25,570542,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0623606236, ZO0565405654\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,570532,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0557405574, ZO0118601186\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,570520,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0618906189, ZO0289502895\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,46,570512,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0332003320, ZO0357103571\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,6,570508,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0002600026, ZO0328703287\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,570502,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0280602806, ZO0408504085\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,17,570491,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0198901989, ZO0104701047\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,20,570484,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0712407124, ZO0095600956\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,39,570480,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0286202862, ZO0694506945\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,23,570477,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0299202992, ZO0392403924\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,570472,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0478704787, ZO0591205912\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,570442,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0175501755, ZO0103601036\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,32,570414,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0481704817, ZO0396503965\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,26,570396,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0495604956, ZO0208802088\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,36,570388,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0405604056, ZO0604506045\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,570374,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0674906749, ZO0073200732\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,570372,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0124001240, ZO0560205602\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,51,570353,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0413704137, ZO0559205592\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,8,570350,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0460004600, ZO0569705697\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,570335,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0337703377, ZO0048500485\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,10,570334,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0520205202, ZO0545205452\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,570309,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0496504965, ZO0269202692\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,18,570304,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0053000530, ZO0360203602\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,25,570303,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0573305733, ZO0513205132\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,570280,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0341703417, ZO0168701687\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,570264,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0627206272, ZO0285702857\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,43,570263,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0041800418, ZO0194901949\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,570254,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0495304953, ZO0634906349\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,570250,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0638906389, ZO0148001480\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,46,570234,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0707007070, ZO0016200162\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,34,570232,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0682006820, ZO0399103991\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,570209,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0658306583, ZO0570705707\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,17,570200,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0025100251, ZO0101901019\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,49,570177,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0532905329, ZO0524105241\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,17,570164,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0210002100, ZO0068200682\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories\\",EUR,4,570161,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0606606066, ZO0596305963\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,8,570151,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0589105891, ZO0587705877\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,19,570143,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0482904829\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,45,570133,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0320503205, ZO0049500495\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,50,570120,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0392903929, ZO0254802548\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,10,570111,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0253002530, ZO0117101171\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,29,570087,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0308403084, ZO0623506235\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,41,570079,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0598505985, ZO0449304493\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,570077,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0433904339, ZO0627706277\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,51,570075,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0621706217, ZO0114301143\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,46,570065,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0027300273, ZO0698606986\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,51,570061,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0604606046, ZO0416004160\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,24,570056,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0131801318, ZO0215802158\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,570040,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0146901469, ZO0673806738\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,17,570037,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0321503215, ZO0200102001\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,41,570024,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0631506315, ZO0426804268\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,570021,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0709807098, ZO0166301663\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,9,570009,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0510705107, ZO0594605946\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,34,570003,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0298902989, ZO0694506945\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,569995,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0125701257, ZO0664706647\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,19,569985,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0554005540, ZO0403504035\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,8,569984,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0537205372, ZO0403504035\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,45,569968,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0047300473, ZO0142401424\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,569962,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0129901299, ZO0440704407\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,30,569958,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0311903119, ZO0563305633\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,27,569953,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0021100211, ZO0193601936\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,13,569939,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0471304713, ZO0528905289\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,4,569925,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0437004370, ZO0475204752\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,569919,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0051200512, ZO0232602326\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,52,569905,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0599605996, ZO0403804038\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,569900,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0644506445, ZO0104901049\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,8,569898,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0591805918, ZO0474004740\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,20,569880,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0325303253, ZO0244002440\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,569873,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0165701657, ZO0485004850\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,42,569869,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0362803628, ZO0237802378\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,22,569868,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0200702007, ZO0106501065\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,17,569835,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0077800778, ZO0177301773\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,44,569834,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0076900769, ZO0151501515\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,569822,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0271402714, ZO0047200472\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,569821,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0066600666, ZO0049000490\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,569815,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0269602696, ZO0067400674\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,48,569814,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0602606026, ZO0298402984\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,30,569806,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0558305583\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,569787,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0055900559, ZO0224002240\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,41,569777,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0254302543, ZO0289102891\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,6,569768,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0231502315, ZO0131401314\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,569761,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0166101661, ZO0337203372\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Women's Accessories\\",EUR,7,569746,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0484004840, ZO0605906059\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,49,569743,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0610306103\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Women's Accessories\\",EUR,29,569736,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0517305173, ZO0319703197\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,20,569734,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0348703487, ZO0141401414\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,569716,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0146701467, ZO0212902129\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,6,569710,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0053600536, ZO0239702397\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,52,569699,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0398603986, ZO0521305213\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,50,569694,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0398703987, ZO0687806878\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,569679,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0433604336, ZO0275702757\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,569674,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0423104231, ZO0408804088\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,43,569652,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0665906659, ZO0240002400\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,52,569645,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0392803928, ZO0277102771\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,37,569637,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0300103001, ZO0688106881\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,6,569624,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0333803338, ZO0138901389\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,43,569623,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0208302083, ZO0307603076\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,569614,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0226202262, ZO0647006470\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,569611,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0450604506, ZO0440304403\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,24,569610,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0140001400, ZO0219302193\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Women's Accessories\\",EUR,16,569577,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0464404644, ZO0128401284\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,569569,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0070600706, ZO0488704887\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,17,569567,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0366203662, ZO0361403614\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,4,569548,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0587605876, ZO0463904639\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,29,569546,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0559105591, ZO0563205632\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,10,569531,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0664106641, ZO0549105491\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,5,569529,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0264102641, ZO0658706587\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,20,569513,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0135701357, ZO0097600976\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,14,569510,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0312203122, ZO0115101151\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,14,569505,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0608906089, ZO0478504785\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,569496,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0659006590, ZO0103801038\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,569477,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0533305333, ZO0565105651\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,51,569469,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0434204342, ZO0600206002\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,4,569468,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0285202852, ZO0448304483\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,28,569452,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0159301593, ZO0250502505\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,39,569436,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0386103861, ZO0451504515\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,26,569424,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0175201752, ZO0206202062\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,569422,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0102501025, ZO0063500635\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,45,569411,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0094200942, ZO0003700037\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,9,569392,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0516405164, ZO0532705327\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,569387,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0593805938, ZO0125201252\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,569375,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0347603476, ZO0668806688\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,20,569371,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0225702257, ZO0186601866\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,42,569370,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0358603586, ZO0641106411\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,19,569362,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0292402924, ZO0681006810\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,569356,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0010500105, ZO0172201722\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,31,569338,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0702507025, ZO0528105281\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,569337,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0634106341, ZO0066900669\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,14,569336,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0512505125, ZO0384103841\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,31,569312,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0425104251, ZO0107901079\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,24,569311,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0024600246, ZO0660706607\\" -\\"Jun 26, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,26,569309,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0364103641, ZO0708807088\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,5,732546,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0228602286, ZO0502605026, ZO0108901089, ZO0362503625\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories, Women's Clothing\\",EUR,5,728962,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0019800198, ZO0089200892, ZO0069700697, ZO0332303323\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,728580,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0156601566, ZO0498004980, ZO0070700707, ZO0086700867\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,728335,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0134701347, ZO0026200262, ZO0223102231, ZO0022900229\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,727370,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0680206802, ZO0321703217, ZO0049900499, ZO0029400294\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,5,726874,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0362303623, ZO0035400354, ZO0705207052, ZO0504005040\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,723213,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0297802978, ZO0456704567, ZO0572105721, ZO0280502805\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,722613,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0618806188, ZO0442804428, ZO0530705307, ZO0410804108\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,38,721706,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0519005190, ZO0610206102, ZO0514405144, ZO0586505865\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,19,720661,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0423004230, ZO0471604716, ZO0315303153, ZO0445604456\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,13,717726,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0284902849, ZO0481204812, ZO0398403984, ZO0282402824\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories, Men's Clothing\\",EUR,25,716889,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0510505105, ZO0482404824, ZO0602306023, ZO0445904459\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,25,714385,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0586805868, ZO0609106091, ZO0310903109, ZO0420104201\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing, Men's Shoes\\",EUR,25,714149,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0309503095, ZO0411904119, ZO0683306833, ZO0397103971\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,569306,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0412004120, ZO0625406254\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,41,569299,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0519605196, ZO0630806308\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,569278,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0271802718, ZO0057100571\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,33,569262,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0609906099, ZO0614806148\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,5,569259,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0335503355, ZO0381003810\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,17,569250,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0228902289, ZO0005400054\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,21,569223,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0444004440, ZO0596805968\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,6,569218,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0633206332, ZO0488604886\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,18,569214,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0490104901, ZO0087200872\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,49,569209,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0472304723, ZO0403504035\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,37,569198,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0464304643, ZO0581905819\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,569183,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0641206412, ZO0165301653\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,569178,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0177001770, ZO0260502605\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,51,569173,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0452204522, ZO0631206312\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,52,569163,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0681106811, ZO0682706827\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,569144,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0108101081, ZO0501105011\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,13,569123,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0609006090, ZO0441504415\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,569107,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0339603396, ZO0504705047\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,569103,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0636506365, ZO0345503455\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,30,569097,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0511605116, ZO0483004830\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,11,569091,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0258602586, ZO0552205522\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,569083,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0099000990, ZO0631606316\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,43,569056,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0494804948, ZO0096000960\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,28,569055,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0375903759, ZO0269402694\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,23,569046,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0393103931, ZO0619906199\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories\\",EUR,11,569045,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0315903159, ZO0461104611\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,45,569033,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0015700157, ZO0362503625\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,12,569027,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0245402454, ZO0060100601\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,43,569010,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0090700907, ZO0265002650\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,4,569003,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0414704147, ZO0387503875\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,33,568993,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0510505105, ZO0482604826\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,568955,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0068900689, ZO0076200762\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,9,568954,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0399603996, ZO0685906859\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,15,568943,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0445804458, ZO0686106861\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,42,568941,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0076600766, ZO0068800688\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,568938,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0642806428, ZO0632506325\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,23,568926,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0298302983, ZO0300003000\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,4,568901,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0466704667, ZO0427104271\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,33,568898,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0542205422, ZO0517805178\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,24,568894,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0141801418, ZO0206302063\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,28,568877,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0132401324, ZO0058200582\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,11,568875,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0613606136, ZO0463804638\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,568865,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0294502945, ZO0560605606\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,29,568854,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0616706167, ZO0255402554\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,23,568845,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0657906579, ZO0258102581\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,39,568818,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0294802948, ZO0451404514\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,568816,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0146601466, ZO0108601086\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,8,568793,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0312503125, ZO0545505455\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,42,568789,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0197501975, ZO0079300793\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,568776,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0616906169, ZO0296902969\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,568774,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0037200372, ZO0369303693\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,568762,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0052200522, ZO0265602656\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,49,568751,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0308703087, ZO0613106131\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Women's Accessories\\",EUR,25,568745,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0528305283, ZO0309203092\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,41,568707,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0513305133, ZO0253302533\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,20,568706,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0672206722, ZO0331903319\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,568702,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0142801428, ZO0182801828\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,14,568682,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0680706807, ZO0392603926\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,22,568674,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0192301923, ZO0011400114\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,568671,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0637406374, ZO0219002190\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,30,568652,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0403304033, ZO0125901259\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,7,568640,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0125901259, ZO0443204432\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,16,568638,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0388003880, ZO0478304783\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,568636,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0503905039, ZO0631806318\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,45,568611,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0174701747, ZO0305103051\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,50,568609,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0570405704, ZO0256102561\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,10,568589,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0114401144, ZO0564705647\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,42,568586,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0232202322, ZO0208402084\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,29,568578,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0520005200, ZO0421104211\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,568571,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0034100341, ZO0343103431\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,38,568559,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0599005990, ZO0626506265\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,568541,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0428904289, ZO0588205882\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,31,568531,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0482104821, ZO0447104471\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,39,568524,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0424104241, ZO0694706947\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,6,568515,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0159901599, ZO0238702387\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,568507,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0431304313, ZO0523605236\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,44,568503,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0643306433, ZO0376203762\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,568499,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0474604746, ZO0113801138\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,568492,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0346103461, ZO0054100541\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,568469,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0659806598, ZO0070100701\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,27,568458,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0164501645, ZO0195501955\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,29,568455,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0413104131, ZO0392303923\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,17,568439,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0170601706, ZO0251502515\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,568434,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0362203622, ZO0000300003\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,36,568428,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0408404084, ZO0422304223\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,36,568397,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0112101121, ZO0530405304\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,568393,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0374103741, ZO0242102421\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,568386,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0422404224, ZO0291702917\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Women's Accessories\\",EUR,21,568375,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0623606236, ZO0605306053\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,19,568363,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0629806298, ZO0467104671\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,15,568360,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0480304803, ZO0274402744\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,31,568350,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0317303173, ZO0403504035\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,39,568331,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0385903859, ZO0516605166\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,30,568325,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0288202882, ZO0391803918\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,13,568319,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0535105351, ZO0403504035\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,568308,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0138701387, ZO0024600246\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,568301,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0146401464, ZO0014700147\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,10,568292,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0534205342, ZO0599605996\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,568278,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0536705367, ZO0449804498\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,568275,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0330903309, ZO0214802148\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Men's Clothing\\",EUR,48,568269,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0318603186, ZO0407904079\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,51,568236,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0416604166, ZO0581605816\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,15,568232,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0282902829, ZO0566605666\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,44,568229,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0192201922, ZO0192801928\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,33,568228,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0387103871, ZO0580005800\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,17,568218,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0227402274, ZO0079000790\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,14,568212,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0536405364, ZO0688306883\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,568192,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0485504855, ZO0355603556\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,568182,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0338603386, ZO0641006410\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,13,568177,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0584505845, ZO0403804038\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,568165,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0065600656, ZO0337003370\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,568152,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0349303493, ZO0043900439\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,24,568149,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0342503425, ZO0675206752\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,22,568128,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0087500875, ZO0007100071\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,52,568117,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0315203152, ZO0406304063\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,568106,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0068700687, ZO0101301013\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,17,568083,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0200902009, ZO0092300923\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,568070,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0575605756, ZO0293302933\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,23,568069,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0530305303, ZO0528405284\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,37,568068,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0583005830, ZO0602706027\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,568045,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0160501605, ZO0069500695\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,7,568044,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0630406304, ZO0120201202\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,37,568039,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0599705997, ZO0416704167\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,44,568023,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0075900759, ZO0489304893\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,568019,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0530805308, ZO0563905639\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,568014,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0523905239, ZO0556605566\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,567996,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0105401054, ZO0046200462\\" -\\"Jun 25, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,33,567994,2,\\"Dec 14, 2016 @ 00:00:00.000, Dec 14, 2016 @ 00:00:00.000\\",\\"ZO0430904309, ZO0288402884\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,733060,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0155601556, ZO0013600136, ZO0235702357, ZO0383203832\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories, Women's Shoes\\",EUR,5,732229,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0175701757, ZO0163801638, ZO0697506975, ZO0245602456\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,731037,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0148801488, ZO0335003350, ZO0155301553, ZO0074300743\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,17,728256,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0371903719, ZO0352803528, ZO0137501375, ZO0229202292\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,727730,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0050600506, ZO0710907109, ZO0023300233, ZO0334603346\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,5,724844,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0707507075, ZO0246402464, ZO0226802268, ZO0343503435\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,724806,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0643106431, ZO0033300333, ZO0696206962, ZO0651206512\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,724326,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0499404994, ZO0641606416, ZO0334303343, ZO0676706767\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,13,721778,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0400004000, ZO0519305193, ZO0482004820, ZO0540305403\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,13,717603,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0685306853, ZO0585305853, ZO0450504505, ZO0552405524\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,13,716462,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0549505495, ZO0458504585, ZO0602506025, ZO0617506175\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,715455,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0477504775, ZO0613206132, ZO0585405854, ZO0110701107\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,18,567973,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0495104951, ZO0305903059\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,14,567970,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0441504415, ZO0691606916\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,567950,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0273002730, ZO0541105411\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,25,567939,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0127201272, ZO0425504255\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,49,567935,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0116101161, ZO0574305743\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,567926,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0113301133, ZO0562105621\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,37,567909,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0609606096, ZO0588905889\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,29,567889,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0282202822, ZO0393003930\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,567876,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0705707057, ZO0047700477\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,567869,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0565105651, ZO0443804438\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,9,567868,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0310403104, ZO0416604166\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,28,567855,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0657106571, ZO0084800848\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,31,567852,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0523805238, ZO0596505965\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,11,567835,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0589405894, ZO0483304833\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,22,567822,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0244802448, ZO0346303463\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,46,567815,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0263602636, ZO0241002410\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,4,567806,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0517705177, ZO0569305693\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,7,567790,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0522405224, ZO0405104051\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,567769,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0414004140, ZO0630106301\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,39,567755,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0571405714, ZO0255402554\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,39,567736,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0663706637, ZO0620906209\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,30,567735,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0129701297, ZO0518705187\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,19,567729,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0395103951, ZO0296102961\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,20,567708,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0090500905, ZO0466204662\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,567703,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0037900379, ZO0134901349\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,6,567684,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0201202012, ZO0035000350\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,24,567669,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0148301483, ZO0202902029\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,567667,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0273802738, ZO0300303003\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,37,567666,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0311403114, ZO0282002820\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,11,567662,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0308903089, ZO0614306143\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,14,567654,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0121301213, ZO0399403994\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,46,567631,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0101101011, ZO0667406674\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,567625,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0328603286, ZO0328803288\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,42,567623,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0239802398, ZO0645406454\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,6,567615,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0013500135, ZO0174501745\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,26,567598,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0039400394, ZO0672906729\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,46,567593,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0655306553, ZO0208902089\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,41,567592,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0535405354, ZO0291302913\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,567573,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0215602156, ZO0336803368\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,567565,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0015600156, ZO0323603236\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,567544,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0585005850, ZO0120301203\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,51,567543,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0608106081, ZO0296502965\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,31,567538,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0596905969, ZO0450804508\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,44,567524,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0096300963, ZO0377403774\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,21,567504,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0606506065, ZO0277702777\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,39,567492,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0277302773, ZO0443004430\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,42,567486,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0058200582, ZO0365503655\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,14,567475,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0578805788, ZO0520405204\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,32,567465,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0274502745, ZO0686006860\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,567462,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0644406444, ZO0709307093\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,567454,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0645406454, ZO0166001660\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,42,567446,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0322803228, ZO0002700027\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,567437,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0275902759, ZO0545005450\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,50,567418,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0400404004, ZO0625006250\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,52,567404,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0107101071, ZO0537905379\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,44,567403,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0138601386, ZO0259202592\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,52,567400,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0605606056, ZO0588105881\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,41,567384,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0426704267, ZO0612006120\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,567383,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0647406474, ZO0330703307\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,567381,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0278402784, ZO0458304583\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,26,567365,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0008600086, ZO0266002660\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Men's Clothing\\",EUR,13,567356,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0319503195, ZO0409904099\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,5,567341,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0674506745, ZO0219202192\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,7,567340,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0615606156, ZO0514905149\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,14,567324,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0426604266, ZO0629406294\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,39,567318,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0421104211, ZO0256202562\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,37,567316,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0390403904, ZO0403004030\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,45,567308,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0181601816, ZO0011000110\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,567301,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0577605776, ZO0438104381\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,15,567294,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0317403174, ZO0457204572\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,9,567290,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0442704427\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,567281,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0221402214, ZO0632806328\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,26,567260,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0068100681, ZO0674106741\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories\\",EUR,50,567256,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0461004610, ZO0702707027\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,22,567252,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0369803698, ZO0220502205\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,11,567240,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0421004210, ZO0689006890\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories\\",EUR,10,567224,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0128501285, ZO0606306063\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,567207,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0033600336, ZO0109401094\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,567191,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0113901139, ZO0478904789\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,17,567177,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0197301973, ZO0180401804\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,567169,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0558805588, ZO0622206222\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,38,567143,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0573005730, ZO0313203132\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,15,567135,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0528305283, ZO0549305493\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,567119,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0711507115, ZO0350903509\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,26,567095,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0339803398, ZO0098200982\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,33,567094,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0442904429, ZO0629706297\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,9,567082,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0278802788, ZO0515605156\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,28,567081,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0209702097, ZO0186301863\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,567069,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0503805038, ZO0047500475\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,567068,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0038000380, ZO0711007110\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,41,567048,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0566905669, ZO0564005640\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,26,567042,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0243002430, ZO0103901039\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,567039,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0184101841, ZO0711207112\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,5,567037,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0206402064, ZO0365903659\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,28,567019,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0151301513, ZO0204902049\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,31,567015,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0558605586, ZO0527805278\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,17,566986,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0360903609, ZO0030100301\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,566985,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0044700447, ZO0502105021\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,566982,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0149301493, ZO0099800998\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,566979,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0071900719, ZO0493404934\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,49,566951,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0406604066, ZO0517405174\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,566944,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0497004970, ZO0054900549\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,44,566942,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0084000840, ZO0636606366\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,50,566935,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0473704737, ZO0121501215\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,20,566924,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0673606736, ZO0161801618\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,20,566896,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0242702427, ZO0090000900\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,38,566892,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0589505895, ZO0575405754\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,12,566884,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0490204902, ZO0025000250\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,14,566881,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0419604196, ZO0559705597\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,8,566861,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0520305203, ZO0462204622\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,43,566856,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0216502165, ZO0327503275\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,49,566852,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0257002570, ZO0455404554\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,566845,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0547905479, ZO0583305833\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,566831,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0341103411, ZO0648406484\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,566829,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0100901009, ZO0235102351\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,566826,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0575305753, ZO0540605406\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,45,566812,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0266902669, ZO0244202442\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,566801,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0279702797, ZO0573705737\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,20,566790,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0699206992, ZO0641306413\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,46,566775,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0671006710, ZO0708007080\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,46,566772,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0152901529, ZO0019100191\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,566768,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0217702177, ZO0331703317\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,43,566757,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0196201962, ZO0168601686\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,566735,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0632406324, ZO0060300603\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,11,566734,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0691006910, ZO0314203142\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,38,566729,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0557305573, ZO0110401104\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,50,566725,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0444404444, ZO0584205842\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,38,566706,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0521505215, ZO0130501305\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,566690,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0449004490, ZO0118501185\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,566685,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0296902969, ZO0530205302\\" -\\"Jun 24, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,9,566680,1,\\"Dec 13, 2016 @ 00:00:00.000, Dec 13, 2016 @ 00:00:00.000\\",\\"ZO0316703167, ZO0393303933\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,17,731352,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0018200182, ZO0016100161, ZO0329703297, ZO0057800578\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories, Women's Shoes\\",EUR,5,730725,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0501605016, ZO0189601896, ZO0363003630, ZO0699306993\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,5,726754,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0138001380, ZO0648006480, ZO0193501935, ZO0228402284\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing, Women's Accessories\\",EUR,27,723242,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0249702497, ZO0643306433, ZO0088900889, ZO0634406344\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Women's Accessories\\",EUR,25,720445,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0423004230, ZO0292702927, ZO0320003200, ZO0318303183\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,52,720399,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0386303863, ZO0561905619, ZO0397903979, ZO0590105901\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,52,718085,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0129001290, ZO0310103101, ZO0547805478, ZO0560805608\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Women's Accessories\\",EUR,52,717206,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0390403904, ZO0608306083, ZO0690906909, ZO0394403944\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,52,717057,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0623406234, ZO0404704047, ZO0384603846, ZO0476204762\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,19,715961,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0444904449, ZO0292502925, ZO0434604346, ZO0461804618\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,19,715133,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0537005370, ZO0508605086, ZO0566605666, ZO0111301113\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,52,715081,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0688806888, ZO0399003990, ZO0412404124, ZO0405304053\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,566671,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0427604276, ZO0113801138\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,566653,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0666506665, ZO0216602166\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,27,566650,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0049100491, ZO0194801948\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,28,566628,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0195601956, ZO0098900989\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,566622,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0228402284, ZO0082300823\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,16,566621,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0579605796, ZO0315803158\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,566607,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0572205722, ZO0585205852\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,26,566591,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0502405024, ZO0366003660\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,8,566580,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0417304173, ZO0123001230\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,16,566564,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0107301073, ZO0293002930\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,566553,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0435004350, ZO0544005440\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,566538,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0224402244, ZO0342403424\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,9,566519,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0700907009, ZO0115801158\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,566518,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0554605546, ZO0569005690\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,19,566514,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0539305393, ZO0522305223\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,30,566506,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0680806808, ZO0609306093\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,51,566498,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0387103871, ZO0550005500\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,25,566456,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0597105971, ZO0283702837\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,16,566454,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0547405474, ZO0401104011\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,28,566452,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0706307063, ZO0011300113\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,566443,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0160201602, ZO0261502615\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,20,566428,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0136501365, ZO0339103391\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,45,566417,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0084900849, ZO0194701947\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,33,566416,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0396903969, ZO0607906079\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,24,566415,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0261102611, ZO0667106671\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,26,566400,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0204702047, ZO0009600096\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,566391,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0228302283, ZO0167501675\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,5,566382,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0503505035, ZO0240302403\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,48,566364,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0512505125, ZO0525005250\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,36,566360,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0285102851, ZO0658306583\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,6,566357,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0061600616, ZO0180701807\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,566343,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0185101851, ZO0052800528\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,45,566334,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0010800108, ZO0635706357\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,566320,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0105001050, ZO0652306523\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,22,566315,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0703707037, ZO0139601396\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,566295,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0635606356, ZO0043100431\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,31,566284,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0541405414, ZO0588205882\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,32,566280,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0573205732, ZO0116701167\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,34,566261,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0577105771, ZO0289302893\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,25,566259,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0694206942, ZO0553805538\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,18,566256,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0227302273, ZO0668706687\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,5,566248,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0678806788, ZO0186101861\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,31,566247,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0384903849, ZO0403504035\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,566232,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0545205452, ZO0437304373\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,9,566215,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0384903849, ZO0579305793\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,566187,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0548905489, ZO0459404594\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,8,566186,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0522105221, ZO0459104591\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,52,566176,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0607206072, ZO0431404314\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,46,566170,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0324803248, ZO0703907039\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,15,566167,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0623006230, ZO0419304193\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,566156,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0424104241, ZO0117901179\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,566155,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0501005010, ZO0214002140\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,566146,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0646206462, ZO0146201462\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,49,566125,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0433104331, ZO0549505495\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,566121,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0227202272, ZO0357003570\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,36,566101,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0691406914, ZO0617806178\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,6,566100,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0013400134, ZO0667306673\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,50,566079,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0663306633, ZO0687306873\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,566070,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0046100461, ZO0151201512\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,15,566053,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0284702847, ZO0299202992\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,46,566051,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0025600256, ZO0270202702\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,566044,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0552605526, ZO0292702927\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Women's Accessories\\",EUR,29,566042,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0451804518, ZO0127901279\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,37,566036,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0583605836, ZO0510605106\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,26,565998,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0238802388, ZO0066600666\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,18,565988,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0074700747, ZO0645206452\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,33,565985,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0436604366, ZO0280302803\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,13,565982,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0410804108, ZO0309303093\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,18,565970,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0673406734, ZO0165601656\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,22,565948,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0190701907, ZO0654806548\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,565945,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0270602706, ZO0269502695\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,565918,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0155001550, ZO0072100721\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,19,565915,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0515005150, ZO0509805098\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,565900,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0266102661, ZO0169701697\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Men's Clothing\\",EUR,31,565896,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0466104661, ZO0444104441\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,49,565877,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0125401254, ZO0123701237\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,7,565855,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0417504175, ZO0535205352\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,28,565838,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0343703437, ZO0207102071\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,565830,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0215702157, ZO0638806388\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,565819,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0031700317, ZO0157701577\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,30,565809,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0557905579, ZO0513705137\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,6,565804,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0306803068, ZO0174601746\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,46,565796,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0081500815, ZO0342603426\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,565793,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0712807128, ZO0007500075\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,565776,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0343103431, ZO0345803458\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,31,565768,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0458004580, ZO0273402734\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,565767,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0414304143, ZO0425204252\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,565760,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0504505045, ZO0223802238\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,39,565734,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0513205132, ZO0258202582\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,15,565732,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0291402914, ZO0603006030\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,565728,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0486404864, ZO0248602486\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,24,565723,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0302303023, ZO0246602466\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,565722,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0656406564, ZO0495504955\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,31,565708,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0253302533, ZO0605706057\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,565698,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0336503365, ZO0637006370\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,6,565697,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0498904989, ZO0641706417\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,38,565684,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0507705077, ZO0409804098\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,49,565683,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0573205732, ZO0310303103\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,26,565678,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0081800818, ZO0485604856\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,11,565667,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0618706187, ZO0388503885\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,565640,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0631606316, ZO0045300453\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,27,565639,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0193901939, ZO0080400804\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,13,565605,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0113301133\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,565596,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0332903329, ZO0159401594\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,14,565591,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0683806838, ZO0429204292\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,25,565580,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0395303953, ZO0386703867\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,48,565567,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0437604376, ZO0618906189\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,39,565564,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0576305763, ZO0116801168\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,565560,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0567505675, ZO0442104421\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,565542,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0224302243, ZO0359103591\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,26,565538,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0486804868, ZO0371603716\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,565521,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0660406604, ZO0484504845\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,565504,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0653406534, ZO0049300493\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,565498,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0046600466, ZO0503305033\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,5,565489,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0077200772, ZO0643006430\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,48,565479,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0588805888, ZO0314903149\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,22,565473,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0365303653, ZO0235802358\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,565466,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0285402854, ZO0538605386\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,565459,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0242302423, ZO0676006760\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,565452,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0133601336, ZO0643906439\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,565446,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0643206432, ZO0140101401\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,6,565410,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0023600236, ZO0704307043\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,12,565404,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0048900489, ZO0228702287\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,565401,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0014800148, ZO0154501545\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,565392,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0616606166, ZO0592205922\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,44,565381,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0060200602, ZO0076300763\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,33,565366,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0684906849, ZO0575905759\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,565360,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0448604486, ZO0450704507\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,18,565339,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0346503465, ZO0678406784\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,44,565334,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0641706417, ZO0382303823\\" -\\"Jun 23, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,36,565330,\\"-\\",\\"Dec 12, 2016 @ 00:00:00.000, Dec 12, 2016 @ 00:00:00.000\\",\\"ZO0621606216, ZO0628806288\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,731788,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0486004860, ZO0177901779, ZO0680506805, ZO0340503405\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,17,730663,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0697406974, ZO0370303703, ZO0368103681, ZO0013800138\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,5,727071,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0091900919, ZO0660006600, ZO0197001970, ZO0074600746\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,725995,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0222102221, ZO0332103321, ZO0182701827, ZO0230502305\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,723683,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0648206482, ZO0496104961, ZO0142601426, ZO0491504915\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,38,717243,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0479104791, ZO0125301253, ZO0459004590, ZO0549905499\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,13,715752,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0130801308, ZO0402604026, ZO0630506305, ZO0297402974\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,565308,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0172401724, ZO0184901849\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,28,565304,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0017800178, ZO0229602296\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,50,565284,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0687206872, ZO0422304223\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,18,565276,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0131501315, ZO0668806688\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Accessories\\",EUR,49,565266,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0255602556, ZO0468304683\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,7,565263,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0582705827, ZO0111801118\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,12,565262,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0303503035, ZO0197601976\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,565237,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0323303233, ZO0172101721\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,29,565233,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0614906149, ZO0430404304\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,17,565231,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0235202352, ZO0135001350\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,14,565224,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0406604066, ZO0576805768\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,12,565222,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0102001020, ZO0252402524\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,33,565214,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0403504035, ZO0588705887\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,13,565206,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0316303163, ZO0401004010\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,27,565173,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0203802038, ZO0014900149\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,30,565161,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0441404414, ZO0430504305\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,48,565160,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0693306933, ZO0514605146\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,565150,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0624906249, ZO0411604116\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,25,565138,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0615506155, ZO0445304453\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,565137,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0118501185, ZO0561905619\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,10,565123,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0316903169, ZO0400504005\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,565100,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0069000690, ZO0490004900\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,45,565091,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0324703247, ZO0088600886\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes\\",EUR,34,565090,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0690306903, ZO0521005210\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,31,565084,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0549805498, ZO0541205412\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,19,565077,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0118701187, ZO0123901239\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,49,565061,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0681106811, ZO0286402864\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,43,565052,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0697006970, ZO0711407114\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,42,565039,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0489804898, ZO0695006950\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,51,565025,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0280802808, ZO0549005490\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,565009,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0225302253, ZO0183101831\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,565002,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0354203542, ZO0338503385\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,43,564994,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0180601806, ZO0710007100\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,564987,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0526805268, ZO0478104781\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,18,564968,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0134101341, ZO0062400624\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,564957,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0171601716, ZO0214602146\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,22,564954,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0362903629, ZO0048100481\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,18,564940,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0026800268, ZO0003600036\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,51,564937,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0520605206, ZO0432204322\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,23,564932,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0557305573, ZO0607806078\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,8,564915,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0286502865, ZO0394703947\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,27,564902,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0698406984, ZO0704207042\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,43,564893,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0322403224, ZO0227802278\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories\\",EUR,6,564885,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0303803038, ZO0192501925\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,28,564883,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0705607056, ZO0334703347\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,42,564876,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0215502155, ZO0168101681\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,28,564869,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0192401924, ZO0366703667\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,564844,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0553205532, ZO0526205262\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,39,564842,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0432004320, ZO0403504035\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,6,564819,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0374603746, ZO0697106971\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,4,564818,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0475004750, ZO0412304123\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,26,564812,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0266002660, ZO0031900319\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,564804,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0259702597, ZO0640606406\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,564796,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0022100221, ZO0172301723\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,23,564777,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0452704527, ZO0122201222\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,27,564770,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0704907049, ZO0024700247\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,27,564761,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0665006650, ZO0709407094\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,564759,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0218802188, ZO0492604926\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,32,564756,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0556805568, ZO0481504815\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,17,564739,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0335603356, ZO0236502365\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,30,564735,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0509705097, ZO0120501205\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,37,564733,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0384303843, ZO0273702737\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,564725,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0071700717, ZO0364303643\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,564710,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0263402634, ZO0499404994\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,43,564706,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0709007090, ZO0362103621\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,564701,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0585205852, ZO0418104181\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,45,564686,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0373303733, ZO0131201312\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,28,564676,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0108401084, ZO0139301393\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,23,564670,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0531205312, ZO0684706847\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,564661,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0415004150, ZO0125501255\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,21,564649,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0405704057, ZO0411704117\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,26,564627,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0211702117, ZO0499004990\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,10,564619,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0470304703, ZO0406204062\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,564609,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0162401624, ZO0156001560\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,43,564605,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0333103331, ZO0694806948\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,27,564604,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0237702377, ZO0304303043\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,41,564576,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0681206812, ZO0441904419\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,46,564559,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0015500155, ZO0650806508\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,34,564557,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0664606646, ZO0460404604\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,22,564536,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0304603046, ZO0370603706\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,46,564533,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0496704967, ZO0049700497\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,564532,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0474704747, ZO0622006220\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,52,564513,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0390003900, ZO0287902879\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,26,564510,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0093600936, ZO0145301453\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,43,564481,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0321603216, ZO0078000780\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,564479,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0409304093, ZO0436904369\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,564460,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0655106551, ZO0349403494\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Shoes\\",EUR,44,564446,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0093400934, ZO0679406794\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,19,564445,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0593805938, ZO0701407014\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,18,564429,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0260702607, ZO0495804958\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,22,564409,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0178501785, ZO0503805038\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,564398,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0328703287, ZO0351003510\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,24,564395,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0236702367, ZO0660706607\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,28,564394,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0269902699, ZO0667906679\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,6,564380,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0050400504, ZO0660006600\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,34,564366,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0681906819, ZO0549705497\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,37,564361,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0422304223, ZO0600506005\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,564350,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0444104441, ZO0476804768\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,10,564340,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0399703997, ZO0565805658\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Accessories, Women's Clothing\\",EUR,27,564339,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0082900829, ZO0347903479\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,564331,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0229402294, ZO0303303033\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,564315,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0221002210, ZO0263702637\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,5,564307,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0246602466, ZO0195201952\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,13,564274,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0542905429, ZO0423604236\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,50,564272,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0534405344, ZO0512105121\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Shoes, Men's Clothing\\",EUR,48,564271,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0507905079, ZO0430804308\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,11,564269,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0281102811, ZO0555705557\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,29,564257,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0539205392, ZO0577705777\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Clothing\\",EUR,50,564241,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0605506055, ZO0547505475\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories, Men's Shoes\\",EUR,34,564237,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0311203112, ZO0395703957\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,44,564221,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0249702497, ZO0487404874\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,564215,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0147201472, ZO0152201522\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,44,564207,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0711807118, ZO0073100731\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,6,564190,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0243902439, ZO0208702087\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,42,564174,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0032300323, ZO0236302363\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Accessories\\",EUR,23,564166,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0607106071, ZO0470704707\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Clothing\\",EUR,5,564164,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0673506735, ZO0213002130\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Accessories\\",EUR,5,564148,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0057900579, ZO0211602116\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,17,564144,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0218602186, ZO0501005010\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,45,564140,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0221002210, ZO0268502685\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,9,564121,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0291902919, ZO0617206172\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,8,564106,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0298002980, ZO0313103131\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,48,564095,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0613806138, ZO0403504035\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,25,564080,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0415804158, ZO0460804608\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,37,564075,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0622706227, ZO0525405254\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,24,564070,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0234202342, ZO0245102451\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,20,564065,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0711207112, ZO0646106461\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,41,564032,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0478404784, ZO0521905219\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,24,564030,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0179901799, ZO0637606376\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,8,564024,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0534405344, ZO0619006190\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,16,564016,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0436904369, ZO0290402904\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing, Women's Shoes\\",EUR,44,564009,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0487904879, ZO0027100271\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,27,564000,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0364603646, ZO0018200182\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,33,563984,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0121301213, ZO0294102941\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,6,563967,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0493404934, ZO0640806408\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,27,563965,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0045800458, ZO0503405034\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,22,563964,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0001200012, ZO0251902519\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes, Women's Accessories\\",EUR,20,563953,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0376203762, ZO0303603036\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Clothing\\",EUR,26,563947,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0348103481, ZO0164501645\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Accessories\\",EUR,34,563931,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0444304443, ZO0596505965\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,13,563928,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0424104241, ZO0394103941\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Women's Shoes\\",EUR,46,563927,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0009800098, ZO0362803628\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,21,563924,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0539805398, ZO0554205542\\" -\\"Jun 22, 2019 @ 00:00:00.000\\",\\"Men's Clothing\\",EUR,52,563909,6,\\"Dec 11, 2016 @ 00:00:00.000, Dec 11, 2016 @ 00:00:00.000\\",\\"ZO0452804528, ZO0453604536\\" -" -`; - exports[`discover Discover CSV Export Generate CSV: archived search generates a report with filtered data 1`] = ` "\\"order_date\\",category,currency,\\"customer_id\\",\\"order_id\\",\\"day_of_week_i\\",\\"products.created_on\\",sku \\"Jun 26, 2019 @ 00:00:00.000\\",\\"Men's Clothing, Men's Shoes\\",EUR,52,719675,3,\\"Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000, Dec 15, 2016 @ 00:00:00.000\\",\\"ZO0448604486, ZO0686206862, ZO0395403954, ZO0528505285\\" diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts b/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts index 0aff2b216b1b2..319f9e0bab29a 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/x_pack/reporting.ts @@ -28,11 +28,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); const toasts = getService('toasts'); - const setFieldsFromSource = async (setValue: boolean) => { - await kibanaServer.uiSettings.update({ 'discover:searchFieldsFromSource': setValue }); - await browser.refresh(); - }; - const getReport = async ({ timeout } = { timeout: 60 * 1000 }) => { // close any open notification toasts await toasts.dismissAll(); @@ -306,24 +301,6 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const { text: csvFile } = await getReport(); expectSnapshot(csvFile).toMatch(); }); - - it('generates a report with discover:searchFieldsFromSource = true', async () => { - await PageObjects.discover.loadSavedSearch('Ecommerce Data'); - - await retry.try(async () => { - expect(await PageObjects.discover.getHitCount()).to.equal('740'); - }); - - await setFieldsFromSource(true); - - const { text: csvFile } = await getReport(); - expectSnapshot(csvFile).toMatch(); - - await setFieldsFromSource(false); - // TODO: We refreshed the page in `setFieldsFromSource`, - // so no toast will be shown - checkForReportingToasts = false; - }); }); }); } From 653bf04eda062354e7c581024780892594092d92 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 6 Dec 2024 17:06:36 +0000 Subject: [PATCH 129/141] skip flaky suite (#202761) --- .../plugins/cases/public/components/create/template.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/cases/public/components/create/template.test.tsx b/x-pack/plugins/cases/public/components/create/template.test.tsx index 22f1f4d1ee907..f52348f7ea865 100644 --- a/x-pack/plugins/cases/public/components/create/template.test.tsx +++ b/x-pack/plugins/cases/public/components/create/template.test.tsx @@ -11,7 +11,8 @@ import userEvent from '@testing-library/user-event'; import { templatesConfigurationMock } from '../../containers/mock'; import { TemplateSelector } from './templates'; -describe('TemplateSelector', () => { +// FLAKY: https://github.com/elastic/kibana/issues/202761 +describe.skip('TemplateSelector', () => { const onTemplateChange = jest.fn(); it('renders correctly', async () => { From 3cd2a7208b0eac648ba56c6d0f7149a5502f6f98 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Fri, 6 Dec 2024 10:09:23 -0700 Subject: [PATCH 130/141] Preparation for High Contrast Mode, Kibana-Management domains (#202607) ## Summary **Reviewers: Please test the code paths affected by this PR. See the "Risks" section below.** Part of work for enabling "high contrast mode" in Kibana. See https://github.com/elastic/kibana/issues/176219 **Background:** Kibana will soon have a user profile setting to allow users to enable "high contrast mode." This setting will activate a flag with `` that causes EUI components to render with higher contrast visual elements. Consumer plugins and packages need to be updated selected places where `` is wrapped, to pass the `UserProfileService` service dependency from the CoreStart contract. ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [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] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) ### Risks Does this PR introduce any risks? For example, consider risks like hard to test bugs, performance regression, potential of data loss. Describe the risk, its severity, and mitigation for each identified risk. Invite stakeholders and evaluate how to proceed before merging. - [ ] [medium/high] The implementor of this change did not manually test the affected code paths and relied on type-checking and functional tests to drive the changes. Code owners for this PR need to manually test the affected code paths. - [ ] [medium] The `UserProfileService` dependency comes from the CoreStart contract. If acquiring the service causes synchronous code to become asynchronous, check for race conditions or errors in rendering React components. Code owners for this PR need to manually test the affected code paths. --- .../kbn-management/settings/application/index.tsx | 2 ++ .../settings/application/mocks/context.tsx | 3 +++ .../kbn-management/settings/application/services.tsx | 3 ++- .../kbn-management/settings/application/tsconfig.json | 1 + .../components/field_input/mocks/context.mock.tsx | 3 +++ .../settings/components/field_input/tsconfig.json | 1 + .../settings/components/field_row/mocks/context.tsx | 3 +++ .../settings/components/field_row/tsconfig.json | 1 + .../settings/components/form/mocks/context.tsx | 3 +++ .../settings/components/form/reload_page_toast.tsx | 11 +++++++++-- .../settings/components/form/services.tsx | 4 ++-- .../settings/components/form/tsconfig.json | 2 ++ .../kbn-management/settings/components/form/types.ts | 2 ++ .../console/public/types/plugin_dependencies.ts | 8 +++++++- src/plugins/dev_tools/public/plugin.ts | 4 ++-- src/plugins/dev_tools/public/types.ts | 8 +++++++- src/plugins/guided_onboarding/public/plugin.tsx | 2 +- .../components/management_app/management_app.tsx | 2 +- .../cross_cluster_replication/public/app/index.tsx | 2 +- .../index_management/public/application/index.tsx | 5 ++++- x-pack/plugins/index_management/public/types.ts | 2 ++ .../ingest_pipelines/public/application/index.tsx | 2 +- x-pack/plugins/painless_lab/public/plugin.tsx | 11 +---------- x-pack/plugins/painless_lab/public/types.ts | 8 +++++++- .../remote_clusters/public/application/index.d.ts | 2 +- x-pack/plugins/searchprofiler/public/plugin.ts | 3 +-- x-pack/plugins/searchprofiler/public/types.ts | 8 +++++++- .../client_integration/helpers/app_context.mock.tsx | 1 + x-pack/plugins/watcher/public/application/app.tsx | 2 ++ 29 files changed, 80 insertions(+), 29 deletions(-) diff --git a/packages/kbn-management/settings/application/index.tsx b/packages/kbn-management/settings/application/index.tsx index aac5bccdafb4d..35366a1132aed 100644 --- a/packages/kbn-management/settings/application/index.tsx +++ b/packages/kbn-management/settings/application/index.tsx @@ -27,6 +27,7 @@ export const KibanaSettingsApplication = ({ i18n, notifications, settings, + userProfile, theme, history, sectionRegistry, @@ -36,6 +37,7 @@ export const KibanaSettingsApplication = ({ { Context: ({ children }) => {children}, }; const theme = themeServiceMock.createStartContract(); + const userProfile = userProfileServiceMock.createStart(); return { analytics, i18n, theme, + userProfile, }; }; diff --git a/packages/kbn-management/settings/application/services.tsx b/packages/kbn-management/settings/application/services.tsx index 26bdc77ef3cea..6384ef0791e51 100644 --- a/packages/kbn-management/settings/application/services.tsx +++ b/packages/kbn-management/settings/application/services.tsx @@ -121,6 +121,7 @@ export const SettingsApplicationKibanaProvider: FC< const { docLinks, notifications, + userProfile, theme, i18n, settings, @@ -194,7 +195,7 @@ export const SettingsApplicationKibanaProvider: FC< return ( - + {children} diff --git a/packages/kbn-management/settings/application/tsconfig.json b/packages/kbn-management/settings/application/tsconfig.json index 182131a7e8714..3ebad4ae3d214 100644 --- a/packages/kbn-management/settings/application/tsconfig.json +++ b/packages/kbn-management/settings/application/tsconfig.json @@ -35,5 +35,6 @@ "@kbn/management-settings-section-registry", "@kbn/core-notifications-browser", "@kbn/core-chrome-browser", + "@kbn/core-user-profile-browser-mocks", ] } diff --git a/packages/kbn-management/settings/components/field_input/mocks/context.mock.tsx b/packages/kbn-management/settings/components/field_input/mocks/context.mock.tsx index 99cac7ae491bb..0e97f40195ee5 100644 --- a/packages/kbn-management/settings/components/field_input/mocks/context.mock.tsx +++ b/packages/kbn-management/settings/components/field_input/mocks/context.mock.tsx @@ -13,6 +13,7 @@ import { I18nProvider } from '@kbn/i18n-react'; import { KibanaRootContextProvider } from '@kbn/react-kibana-context-root'; import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import { I18nStart } from '@kbn/core-i18n-browser'; import { FieldInputProvider } from '../services'; @@ -20,6 +21,7 @@ import { FieldInputServices } from '../types'; const createRootMock = () => { const analytics = analyticsServiceMock.createAnalyticsServiceStart(); + const userProfile = userProfileServiceMock.createStart(); const i18n: I18nStart = { Context: ({ children }) => {children}, }; @@ -28,6 +30,7 @@ const createRootMock = () => { analytics, i18n, theme, + userProfile, }; }; diff --git a/packages/kbn-management/settings/components/field_input/tsconfig.json b/packages/kbn-management/settings/components/field_input/tsconfig.json index d971549abb2d4..d3fc7c27da7a9 100644 --- a/packages/kbn-management/settings/components/field_input/tsconfig.json +++ b/packages/kbn-management/settings/components/field_input/tsconfig.json @@ -30,5 +30,6 @@ "@kbn/core-analytics-browser-mocks", "@kbn/core-ui-settings-browser", "@kbn/code-editor", + "@kbn/core-user-profile-browser-mocks", ] } diff --git a/packages/kbn-management/settings/components/field_row/mocks/context.tsx b/packages/kbn-management/settings/components/field_row/mocks/context.tsx index ef2440a252bb7..a57b9e6d801d5 100644 --- a/packages/kbn-management/settings/components/field_row/mocks/context.tsx +++ b/packages/kbn-management/settings/components/field_row/mocks/context.tsx @@ -11,6 +11,7 @@ import React, { ReactChild } from 'react'; import { I18nProvider } from '@kbn/i18n-react'; import { KibanaRootContextProvider } from '@kbn/react-kibana-context-root'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; import { I18nStart } from '@kbn/core-i18n-browser'; @@ -26,10 +27,12 @@ const createRootMock = () => { Context: ({ children }) => {children}, }; const theme = themeServiceMock.createStartContract(); + const userProfile = userProfileServiceMock.createStart(); return { analytics, i18n, theme, + userProfile, }; }; diff --git a/packages/kbn-management/settings/components/field_row/tsconfig.json b/packages/kbn-management/settings/components/field_row/tsconfig.json index fc77ee13c6dc8..0c1f8e31e4a59 100644 --- a/packages/kbn-management/settings/components/field_row/tsconfig.json +++ b/packages/kbn-management/settings/components/field_row/tsconfig.json @@ -30,5 +30,6 @@ "@kbn/core-theme-browser-mocks", "@kbn/core-i18n-browser", "@kbn/core-analytics-browser-mocks", + "@kbn/core-user-profile-browser-mocks", ] } diff --git a/packages/kbn-management/settings/components/form/mocks/context.tsx b/packages/kbn-management/settings/components/form/mocks/context.tsx index 20ee9b2d12aff..a55abd225f669 100644 --- a/packages/kbn-management/settings/components/form/mocks/context.tsx +++ b/packages/kbn-management/settings/components/form/mocks/context.tsx @@ -11,6 +11,7 @@ import React, { ReactChild } from 'react'; import { I18nProvider } from '@kbn/i18n-react'; import { KibanaRootContextProvider } from '@kbn/react-kibana-context-root'; +import { userProfileServiceMock } from '@kbn/core-user-profile-browser-mocks'; import { themeServiceMock } from '@kbn/core-theme-browser-mocks'; import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; import { I18nStart } from '@kbn/core-i18n-browser'; @@ -25,10 +26,12 @@ const createRootMock = () => { Context: ({ children }) => {children}, }; const theme = themeServiceMock.createStartContract(); + const userProfile = userProfileServiceMock.createStart(); return { analytics, i18n, theme, + userProfile, }; }; diff --git a/packages/kbn-management/settings/components/form/reload_page_toast.tsx b/packages/kbn-management/settings/components/form/reload_page_toast.tsx index a6594dc888d9c..25e22fb436adc 100644 --- a/packages/kbn-management/settings/components/form/reload_page_toast.tsx +++ b/packages/kbn-management/settings/components/form/reload_page_toast.tsx @@ -15,16 +15,23 @@ import { EuiButton, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { ToastInput } from '@kbn/core-notifications-browser'; import { I18nStart } from '@kbn/core-i18n-browser'; import { ThemeServiceStart } from '@kbn/core-theme-browser'; +import type { UserProfileService } from '@kbn/core-user-profile-browser'; export const DATA_TEST_SUBJ_PAGE_RELOAD_BUTTON = 'pageReloadButton'; +interface StartDeps { + theme: ThemeServiceStart; + i18n: I18nStart; + userProfile: UserProfileService; +} + /** * Utility function for returning a {@link ToastInput} for displaying a prompt for reloading the page. * @param theme The {@link ThemeServiceStart} contract. * @param i18nStart The {@link I18nStart} contract. * @returns A toast. */ -export const reloadPageToast = (theme: ThemeServiceStart, i18nStart: I18nStart): ToastInput => { +export const reloadPageToast = (startDeps: StartDeps): ToastInput => { return { title: i18n.translate('management.settings.form.requiresPageReloadToastDescription', { defaultMessage: 'One or more settings require you to reload the page to take effect.', @@ -43,7 +50,7 @@ export const reloadPageToast = (theme: ThemeServiceStart, i18nStart: I18nStart): , - { i18n: i18nStart, theme } + startDeps ), color: 'success', toastLifeTimeMs: 15000, diff --git a/packages/kbn-management/settings/components/form/services.tsx b/packages/kbn-management/settings/components/form/services.tsx index 49bd4ef7d6223..05d77191cbdc0 100644 --- a/packages/kbn-management/settings/components/form/services.tsx +++ b/packages/kbn-management/settings/components/form/services.tsx @@ -46,7 +46,7 @@ export const FormKibanaProvider: FC> = children, ...deps }) => { - const { settings, notifications, docLinks, theme, i18n } = deps; + const { settings, notifications, docLinks, ...startDeps } = deps; const services: Services = { saveChanges: (changes, scope: UiSettingsScope) => { @@ -57,7 +57,7 @@ export const FormKibanaProvider: FC> = return Promise.all(arr); }, showError: (message: string) => notifications.toasts.addDanger(message), - showReloadPagePrompt: () => notifications.toasts.add(reloadPageToast(theme, i18n)), + showReloadPagePrompt: () => notifications.toasts.add(reloadPageToast(startDeps)), }; return ( diff --git a/packages/kbn-management/settings/components/form/tsconfig.json b/packages/kbn-management/settings/components/form/tsconfig.json index 8fbe9249a9538..073882ccf4b48 100644 --- a/packages/kbn-management/settings/components/form/tsconfig.json +++ b/packages/kbn-management/settings/components/form/tsconfig.json @@ -34,5 +34,7 @@ "@kbn/management-settings-utilities", "@kbn/core-analytics-browser-mocks", "@kbn/core-ui-settings-common", + "@kbn/core-user-profile-browser-mocks", + "@kbn/core-user-profile-browser", ] } diff --git a/packages/kbn-management/settings/components/form/types.ts b/packages/kbn-management/settings/components/form/types.ts index 7e140823f0c23..76b5f2897540d 100644 --- a/packages/kbn-management/settings/components/form/types.ts +++ b/packages/kbn-management/settings/components/form/types.ts @@ -17,6 +17,7 @@ import { I18nStart } from '@kbn/core-i18n-browser'; import { ThemeServiceStart } from '@kbn/core-theme-browser'; import { ToastsStart } from '@kbn/core-notifications-browser'; import { UiSettingsScope } from '@kbn/core-ui-settings-common'; +import { UserProfileService } from '@kbn/core-user-profile-browser'; /** * Contextual services used by a {@link Form} component. @@ -42,6 +43,7 @@ interface KibanaDependencies { globalClient: Pick; }; theme: ThemeServiceStart; + userProfile: UserProfileService; i18n: I18nStart; /** The portion of the {@link ToastsStart} contract used by this component. */ notifications: { diff --git a/src/plugins/console/public/types/plugin_dependencies.ts b/src/plugins/console/public/types/plugin_dependencies.ts index 859bb8a1b1011..3f8d32695777f 100644 --- a/src/plugins/console/public/types/plugin_dependencies.ts +++ b/src/plugins/console/public/types/plugin_dependencies.ts @@ -8,7 +8,12 @@ */ import type { FC } from 'react'; -import type { AnalyticsServiceStart, I18nStart, ThemeServiceStart } from '@kbn/core/public'; +import type { + AnalyticsServiceStart, + I18nStart, + ThemeServiceStart, + UserProfileService, +} from '@kbn/core/public'; import { HomePublicPluginSetup, HomePublicPluginStart } from '@kbn/home-plugin/public'; import { DevToolsSetup } from '@kbn/dev-tools-plugin/public'; import { UsageCollectionSetup, UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; @@ -21,6 +26,7 @@ export interface ConsoleStartServices { analytics: Pick; i18n: I18nStart; theme: Pick; + userProfile: UserProfileService; } export interface AppSetupUIPluginDependencies { diff --git a/src/plugins/dev_tools/public/plugin.ts b/src/plugins/dev_tools/public/plugin.ts index 8984243bf04b6..9dde73d2909e0 100644 --- a/src/plugins/dev_tools/public/plugin.ts +++ b/src/plugins/dev_tools/public/plugin.ts @@ -66,8 +66,8 @@ export class DevToolsPlugin implements Plugin { const [core] = await getStartServices(); const { application, chrome, executionContext } = core; - const { analytics, i18n: i18nStart, theme } = core; - const startServices = { analytics, i18n: i18nStart, theme }; + const { analytics, i18n: i18nStart, theme, userProfile } = core; + const startServices = { analytics, i18n: i18nStart, theme, userProfile }; this.docTitleService.setup(chrome.docTitle.change); this.breadcrumbService.setup(chrome.setBreadcrumbs); diff --git a/src/plugins/dev_tools/public/types.ts b/src/plugins/dev_tools/public/types.ts index aeba759fe31ea..2f729d2a0aac5 100644 --- a/src/plugins/dev_tools/public/types.ts +++ b/src/plugins/dev_tools/public/types.ts @@ -7,7 +7,12 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { AnalyticsServiceStart, I18nStart, ThemeServiceStart } from '@kbn/core/public'; +import { + AnalyticsServiceStart, + I18nStart, + ThemeServiceStart, + UserProfileService, +} from '@kbn/core/public'; export interface ConfigSchema { deeplinks: { @@ -19,4 +24,5 @@ export interface DevToolsStartServices { analytics: Pick; i18n: I18nStart; theme: Pick; + userProfile: UserProfileService; } diff --git a/src/plugins/guided_onboarding/public/plugin.tsx b/src/plugins/guided_onboarding/public/plugin.tsx index cc6821af4ea0e..e90a357d24c19 100755 --- a/src/plugins/guided_onboarding/public/plugin.tsx +++ b/src/plugins/guided_onboarding/public/plugin.tsx @@ -80,7 +80,7 @@ export class GuidedOnboardingPlugin application, notifications, }: { - startServices: Pick; + startServices: Pick; targetDomElement: HTMLElement; api: ApiService; application: ApplicationStart; diff --git a/src/plugins/management/public/components/management_app/management_app.tsx b/src/plugins/management/public/components/management_app/management_app.tsx index 849d8f9eb0341..39e38182ddbeb 100644 --- a/src/plugins/management/public/components/management_app/management_app.tsx +++ b/src/plugins/management/public/components/management_app/management_app.tsx @@ -116,7 +116,7 @@ export const ManagementApp = ({ dependencies, history, appBasePath }: Management }; return ( - + ; +type StartServices = Pick; const AppWithExecutionContext = ({ history, diff --git a/x-pack/plugins/index_management/public/application/index.tsx b/x-pack/plugins/index_management/public/application/index.tsx index 72821d6a194ae..10079830455ee 100644 --- a/x-pack/plugins/index_management/public/application/index.tsx +++ b/x-pack/plugins/index_management/public/application/index.tsx @@ -47,8 +47,9 @@ export const IndexManagementAppContext: React.FC analytics, i18n, theme, + userProfile, } = core; - const startServices = { analytics, i18n, overlays, theme }; + const startServices = { analytics, i18n, overlays, theme, userProfile }; const { services, setBreadcrumbs, uiSettings, settings, kibanaVersion } = dependencies; // theme is required by the CodeEditor component used to edit runtime field Painless scripts. @@ -61,6 +62,7 @@ export const IndexManagementAppContext: React.FC get: () => kibanaVersion, }, theme, + userProfile, }); const componentTemplateProviderValues = { @@ -122,6 +124,7 @@ interface KibanaReactContextServices { get: () => SemVer; }; theme: CoreStart['theme']; + userProfile: CoreStart['userProfile']; } // We override useKibana() from the react plugin to return a typed version for this app diff --git a/x-pack/plugins/index_management/public/types.ts b/x-pack/plugins/index_management/public/types.ts index c470398c31957..0432feffdf00d 100644 --- a/x-pack/plugins/index_management/public/types.ts +++ b/x-pack/plugins/index_management/public/types.ts @@ -10,6 +10,7 @@ import { I18nStart, OverlayStart, ThemeServiceStart, + UserProfileService, } from '@kbn/core/public'; import { CloudSetup } from '@kbn/cloud-plugin/public'; import { ConsolePluginStart } from '@kbn/console-plugin/public'; @@ -24,6 +25,7 @@ export interface IndexManagementStartServices { i18n: I18nStart; overlays: OverlayStart; theme: Pick; + userProfile: UserProfileService; } export interface SetupDependencies { diff --git a/x-pack/plugins/ingest_pipelines/public/application/index.tsx b/x-pack/plugins/ingest_pipelines/public/application/index.tsx index 9bc3ba7fe27ad..da54113331e68 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/index.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/index.tsx @@ -53,7 +53,7 @@ export interface AppServices { config: Config; } -type StartServices = Pick; +type StartServices = Pick; export interface CoreServices extends StartServices { http: HttpSetup; diff --git a/x-pack/plugins/painless_lab/public/plugin.tsx b/x-pack/plugins/painless_lab/public/plugin.tsx index 02ff77d5a862d..2579bbe1068cf 100644 --- a/x-pack/plugins/painless_lab/public/plugin.tsx +++ b/x-pack/plugins/painless_lab/public/plugin.tsx @@ -51,16 +51,7 @@ export class PainlessLabUIPlugin implements Plugin { const [core] = await getStartServices(); - const { - notifications, - docLinks, - chrome, - settings, - analytics, - i18n: i18nStart, - theme, - } = core; - const startServices = { analytics, i18n: i18nStart, theme }; + const { notifications, docLinks, chrome, settings, ...startServices } = core; const license = await firstValueFrom(licensing.license$); const licenseStatus = checkLicenseStatus(license); diff --git a/x-pack/plugins/painless_lab/public/types.ts b/x-pack/plugins/painless_lab/public/types.ts index 693488860aff0..f870f2aedbfc8 100644 --- a/x-pack/plugins/painless_lab/public/types.ts +++ b/x-pack/plugins/painless_lab/public/types.ts @@ -8,7 +8,12 @@ import { HomePublicPluginSetup } from '@kbn/home-plugin/public'; import { DevToolsSetup } from '@kbn/dev-tools-plugin/public'; import { LicensingPluginSetup } from '@kbn/licensing-plugin/public'; -import { AnalyticsServiceStart, I18nStart, ThemeServiceStart } from '@kbn/core/public'; +import { + AnalyticsServiceStart, + I18nStart, + ThemeServiceStart, + UserProfileService, +} from '@kbn/core/public'; export interface PluginDependencies { licensing: LicensingPluginSetup; @@ -20,4 +25,5 @@ export interface PainlessLabStartServices { analytics: Pick; i18n: I18nStart; theme: Pick; + userProfile: UserProfileService; } diff --git a/x-pack/plugins/remote_clusters/public/application/index.d.ts b/x-pack/plugins/remote_clusters/public/application/index.d.ts index 182cf0ea1b71d..38da9bad7ea46 100644 --- a/x-pack/plugins/remote_clusters/public/application/index.d.ts +++ b/x-pack/plugins/remote_clusters/public/application/index.d.ts @@ -17,5 +17,5 @@ export declare const renderApp: ( canUseAPIKeyTrustModel: boolean; }, history: ScopedHistory, - startServices: Pick + startServices: Pick ) => ReturnType; diff --git a/x-pack/plugins/searchprofiler/public/plugin.ts b/x-pack/plugins/searchprofiler/public/plugin.ts index 4d8cecaf31381..a1357add7e62f 100644 --- a/x-pack/plugins/searchprofiler/public/plugin.ts +++ b/x-pack/plugins/searchprofiler/public/plugin.ts @@ -47,8 +47,7 @@ export class SearchProfilerUIPlugin implements Plugin { const [coreStart] = await getStartServices(); - const { notifications, analytics, i18n: i18nStart, theme } = coreStart; - const startServices = { analytics, i18n: i18nStart, theme }; + const { notifications, ...startServices } = coreStart; const { renderApp } = await import('./application'); diff --git a/x-pack/plugins/searchprofiler/public/types.ts b/x-pack/plugins/searchprofiler/public/types.ts index bea00be58bacc..788b2a8693e53 100644 --- a/x-pack/plugins/searchprofiler/public/types.ts +++ b/x-pack/plugins/searchprofiler/public/types.ts @@ -9,12 +9,18 @@ import { HomePublicPluginSetup } from '@kbn/home-plugin/public'; import { DevToolsSetup } from '@kbn/dev-tools-plugin/public'; import { SharePluginSetup } from '@kbn/share-plugin/public'; import { LicensingPluginSetup } from '@kbn/licensing-plugin/public'; -import { AnalyticsServiceStart, I18nStart, ThemeServiceStart } from '@kbn/core/public'; +import { + AnalyticsServiceStart, + I18nStart, + ThemeServiceStart, + UserProfileService, +} from '@kbn/core/public'; export interface SearchProfilerStartServices { analytics: Pick; i18n: I18nStart; theme: Pick; + userProfile: UserProfileService; } export interface AppPublicPluginDependencies { diff --git a/x-pack/plugins/watcher/__jest__/client_integration/helpers/app_context.mock.tsx b/x-pack/plugins/watcher/__jest__/client_integration/helpers/app_context.mock.tsx index 8b8c19b855bfa..0b216332888ea 100644 --- a/x-pack/plugins/watcher/__jest__/client_integration/helpers/app_context.mock.tsx +++ b/x-pack/plugins/watcher/__jest__/client_integration/helpers/app_context.mock.tsx @@ -48,6 +48,7 @@ export const mockContextValue: AppDeps = { toasts: notificationServiceMock.createSetupContract().toasts, i18n: coreStart.i18n, theme: coreStart.theme, + userProfile: coreStart.userProfile, chartsTheme: { useChartsBaseTheme: jest.fn(), } as any, diff --git a/x-pack/plugins/watcher/public/application/app.tsx b/x-pack/plugins/watcher/public/application/app.tsx index 8156fb9a1ca29..a5e9596b2044d 100644 --- a/x-pack/plugins/watcher/public/application/app.tsx +++ b/x-pack/plugins/watcher/public/application/app.tsx @@ -16,6 +16,7 @@ import { ExecutionContextStart, ThemeServiceStart, I18nStart, + UserProfileService, } from '@kbn/core/public'; import type { SettingsStart } from '@kbn/core-ui-settings-browser'; @@ -44,6 +45,7 @@ export interface AppDeps { uiSettings: IUiSettingsClient; i18n: I18nStart; theme: ThemeServiceStart; + userProfile: UserProfileService; chartsTheme: ChartsPluginSetup['theme']; createTimeBuckets: () => any; licenseStatus$: Observable; From 786cae8f3eb4be2295c46fa689bccf8c8f95ebc1 Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 6 Dec 2024 17:11:13 +0000 Subject: [PATCH 131/141] skip flaky suite (#177334) --- .../cases/public/components/all_cases/status_filter.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 5999da81556e4..1023e5a87b0cf 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,7 +19,8 @@ const LABELS = { inProgress: i18n.STATUS_IN_PROGRESS, }; -describe('StatusFilter', () => { +// FLAKY: https://github.com/elastic/kibana/issues/177334 +describe.skip('StatusFilter', () => { const onChange = jest.fn(); const defaultProps = { selectedOptionKeys: [], From 682030b2db6eb2d3f15b0065c0d77710eb3be164 Mon Sep 17 00:00:00 2001 From: Gerard Soldevila Date: Fri, 6 Dec 2024 19:59:17 +0100 Subject: [PATCH 132/141] Sustainable Kibana Architecture: Move modules owned by `@elastic/obs-entities` (#202713) ## Summary This PR aims at relocating some of the Kibana modules (plugins and packages) into a new folder structure, according to the _Sustainable Kibana Architecture_ initiative. > [!IMPORTANT] > * We kindly ask you to: > * Manually fix the errors in the error section below (if there are any). > * Search for the `packages[\/\\]` and `plugins[\/\\]` patterns in the source code (Babel and Eslint config files), and update them appropriately. > * Manually review `.buildkite/scripts/pipelines/pull_request/pipeline.ts` to ensure that any CI pipeline customizations continue to be correctly applied after the changed path names > * Review all of the updated files, specially the `.ts` and `.js` files listed in the sections below, as some of them contain relative paths that have been updated. > * Think of potential impact of the move, including tooling and configuration files that can be pointing to the relocated modules. E.g.: > * customised eslint rules > * docs pointing to source code > [!NOTE] > This PR has been auto-generated. > Do not attempt to push any changes unless you know what you are doing. > Please use [#sustainable_kibana_architecture](https://elastic.slack.com/archives/C07TCKTA22E) Slack channel for feedback. #### 3 plugin(s) are going to be relocated: | Id | Target folder | | -- | ------------- | | `@kbn/entities-data-access-plugin` | `x-pack/solutions/observability/plugins/observability_solution/entities_data_access` | | `@kbn/entityManager-app-plugin` | `x-pack/solutions/observability/plugins/observability_solution/entity_manager_app` | | `@kbn/entityManager-plugin` | `x-pack/platform/plugins/shared/entity_manager` | #### 1 package(s) are going to be relocated: | Id | Target folder | | -- | ------------- | | `@kbn/entities-schema` | `x-pack/platform/packages/shared/kbn-entities-schema` |
      Updated references ``` ./docs/developer/plugin-list.asciidoc ./package.json ./packages/kbn-repo-packages/package-map.json ./packages/kbn-ts-projects/config-paths.json ./tsconfig.base.json ./x-pack/platform/packages/shared/kbn-entities-schema/jest.config.js ./x-pack/platform/plugins/shared/entity_manager/jest.config.js ./x-pack/plugins/entity_manager/docs/entity_definitions.md ./x-pack/solutions/observability/plugins/observability_solution/entities_data_access/jest.config.js ./x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/jest.config.js ./yarn.lock ```
      Updated relative paths ``` x-pack/platform/packages/shared/kbn-entities-schema/jest.config.js:10 x-pack/platform/packages/shared/kbn-entities-schema/scripts/generate.js:8 x-pack/platform/packages/shared/kbn-entities-schema/scripts/generate_oas.js:65 x-pack/platform/packages/shared/kbn-entities-schema/scripts/generate_oas.js:8 x-pack/platform/packages/shared/kbn-entities-schema/scripts/serve_oas_ui.js:8 x-pack/platform/packages/shared/kbn-entities-schema/tsconfig.json:2 x-pack/platform/plugins/shared/entity_manager/jest.config.js:10 x-pack/platform/plugins/shared/entity_manager/tsconfig.json:2 x-pack/platform/plugins/shared/entity_manager/tsconfig.json:7 x-pack/solutions/observability/plugins/observability_solution/entities_data_access/jest.config.js:12 x-pack/solutions/observability/plugins/observability_solution/entities_data_access/tsconfig.json:2 x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/jest.config.js:12 x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/tsconfig.json:2 x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/tsconfig.json:7 ```
      Script errors ``` ```
      --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Rudolf Meijering --- .github/CODEOWNERS | 8 +++---- docs/developer/plugin-list.asciidoc | 6 ++--- package.json | 8 +++---- tsconfig.base.json | 16 +++++++------- .../shared}/kbn-entities-schema/README.md | 0 .../shared}/kbn-entities-schema/index.ts | 0 .../kbn-entities-schema/jest.config.js | 4 ++-- .../shared}/kbn-entities-schema/kibana.jsonc | 0 .../shared}/kbn-entities-schema/oas.yaml | 0 .../shared}/kbn-entities-schema/package.json | 0 .../kbn-entities-schema/scripts/generate.js | 2 +- .../scripts/generate_oas.js | 4 ++-- .../scripts/serve_oas_ui.js | 2 +- .../src/rest_spec/create.ts | 0 .../src/rest_spec/delete.ts | 0 .../kbn-entities-schema/src/rest_spec/get.ts | 0 .../src/rest_spec/reset.ts | 0 .../schema/__snapshots__/common.test.ts.snap | 0 .../src/schema/common.test.ts | 0 .../kbn-entities-schema/src/schema/common.ts | 0 .../src/schema/entity.test.ts | 0 .../kbn-entities-schema/src/schema/entity.ts | 0 .../src/schema/entity_definition.ts | 0 .../src/schema/patterns.test.ts | 0 .../src/schema/patterns.ts | 0 .../shared}/kbn-entities-schema/tsconfig.json | 2 +- .../plugins/shared}/entity_manager/README.md | 0 .../shared}/entity_manager/common/config.ts | 0 .../common/constants_entities.ts | 0 .../entity_manager/common/debug_log.ts | 0 .../shared}/entity_manager/common/errors.ts | 0 .../entity_manager/common/types_api.ts | 0 .../entity_manager/docs/entity_definitions.md | 2 +- .../shared}/entity_manager/jest.config.js | 9 ++++---- .../shared}/entity_manager/kibana.jsonc | 0 .../shared}/entity_manager/public/index.ts | 0 .../public/lib/entity_client.test.ts | 0 .../public/lib/entity_client.ts | 0 .../entity_manager/public/lib/errors.ts | 0 .../shared}/entity_manager/public/plugin.ts | 0 .../shared}/entity_manager/public/types.ts | 0 .../shared}/entity_manager/server/index.ts | 0 .../server/lib/auth/api_key/api_key.ts | 0 .../server/lib/auth/api_key/saved_object.ts | 0 .../entity_manager/server/lib/auth/index.ts | 0 .../server/lib/auth/privileges.ts | 0 .../server/lib/entities/built_in/constants.ts | 0 .../built_in/containers_from_ecs_data.ts | 0 .../entities/built_in/hosts_from_ecs_data.ts | 0 .../server/lib/entities/built_in/index.ts | 0 .../kubernetes/common/ecs_index_patterns.ts | 0 .../kubernetes/common/ecs_metadata.ts | 0 .../kubernetes/common/global_metadata.ts | 0 .../kubernetes/common/otel_index_patterns.ts | 0 .../kubernetes/common/otel_metadata.ts | 0 .../built_in/kubernetes/ecs/cluster.ts | 0 .../built_in/kubernetes/ecs/cron_job.ts | 0 .../built_in/kubernetes/ecs/daemon_set.ts | 0 .../built_in/kubernetes/ecs/deployment.ts | 0 .../entities/built_in/kubernetes/ecs/index.ts | 0 .../entities/built_in/kubernetes/ecs/job.ts | 0 .../entities/built_in/kubernetes/ecs/node.ts | 0 .../entities/built_in/kubernetes/ecs/pod.ts | 0 .../built_in/kubernetes/ecs/replica_set.ts | 0 .../built_in/kubernetes/ecs/service.ts | 0 .../built_in/kubernetes/ecs/stateful_set.ts | 0 .../lib/entities/built_in/kubernetes/index.ts | 0 .../built_in/kubernetes/semconv/cluster.ts | 0 .../built_in/kubernetes/semconv/cron_job.ts | 0 .../built_in/kubernetes/semconv/daemon_set.ts | 0 .../built_in/kubernetes/semconv/deployment.ts | 0 .../built_in/kubernetes/semconv/index.ts | 0 .../built_in/kubernetes/semconv/job.ts | 0 .../built_in/kubernetes/semconv/node.ts | 0 .../built_in/kubernetes/semconv/pod.ts | 0 .../kubernetes/semconv/replica_set.ts | 0 .../kubernetes/semconv/stateful_set.ts | 0 .../built_in/services_from_ecs_data.ts | 0 .../create_and_install_ingest_pipeline.ts | 0 .../entities/create_and_install_transform.ts | 0 .../lib/entities/delete_entity_definition.ts | 0 .../server/lib/entities/delete_index.ts | 0 .../lib/entities/delete_ingest_pipeline.ts | 0 .../server/lib/entities/delete_transforms.ts | 0 .../errors/entity_definition_id_invalid.ts | 0 .../entity_definition_update_conflict.ts | 0 .../errors/entity_id_conflict_error.ts | 0 .../lib/entities/errors/entity_not_found.ts | 0 .../errors/entity_security_exception.ts | 0 .../errors/invalid_transform_error.ts | 0 .../lib/entities/find_entity_definition.ts | 0 .../fixtures/builtin_entity_definition.ts | 0 .../helpers/fixtures/entity_definition.ts | 0 .../lib/entities/helpers/fixtures/index.ts | 0 .../entities/helpers/generate_component_id.ts | 0 .../get_elasticsearch_query_or_throw.ts | 0 ..._pipeline_script_processor_helpers.test.ts | 0 ...ngest_pipeline_script_processor_helpers.ts | 0 .../entities/helpers/is_builtin_definition.ts | 0 .../helpers/merge_definition_update.ts | 0 .../server/lib/entities/helpers/retry.ts | 0 .../generate_latest_processors.test.ts.snap | 0 .../generate_latest_processors.test.ts | 0 .../generate_latest_processors.ts | 0 .../install_entity_definition.test.ts | 0 .../lib/entities/install_entity_definition.ts | 0 .../lib/entities/read_entity_definition.ts | 0 .../lib/entities/save_entity_definition.ts | 0 .../server/lib/entities/start_transforms.ts | 0 .../server/lib/entities/stop_transforms.ts | 0 .../entities_latest_template.test.ts.snap | 0 .../entities_latest_template.test.ts | 0 .../templates/entities_latest_template.ts | 0 .../generate_latest_transform.test.ts.snap | 0 .../generate_identity_aggregations.ts | 0 .../generate_latest_transform.test.ts | 0 .../transform/generate_latest_transform.ts | 0 .../generate_metadata_aggregations.test.ts | 0 .../generate_metadata_aggregations.ts | 0 .../transform/generate_metric_aggregations.ts | 0 .../transform/validate_transform_ids.test.ts | 0 .../transform/validate_transform_ids.ts | 0 .../server/lib/entities/types.ts | 0 .../entities/uninstall_entity_definition.ts | 0 .../lib/entities/upgrade_entity_definition.ts | 0 .../server/lib/entity_client.ts | 0 .../server/lib/manage_index_templates.ts | 0 .../entity_manager/server/lib/utils.ts | 0 .../entity_manager/server/lib/v2/constants.ts | 0 .../setup_entity_definitions_index.ts | 0 .../lib/v2/definitions/source_definition.ts | 0 .../lib/v2/definitions/type_definition.ts | 0 .../server/lib/v2/entity_client.ts | 0 .../v2/errors/entity_definition_conflict.ts | 0 .../lib/v2/errors/unknown_entity_type.ts | 0 .../server/lib/v2/queries/index.test.ts | 0 .../server/lib/v2/queries/index.ts | 0 .../server/lib/v2/queries/utils.test.ts | 0 .../server/lib/v2/queries/utils.ts | 0 .../server/lib/v2/run_esql_query.ts | 0 .../entity_manager/server/lib/v2/types.ts | 0 .../lib/validators/validate_date_range.ts | 0 .../server/lib/validators/validation_error.ts | 0 .../shared}/entity_manager/server/plugin.ts | 0 .../create_entity_manager_server_route.ts | 0 .../server/routes/enablement/check.ts | 0 .../server/routes/enablement/disable.ts | 0 .../server/routes/enablement/enable.ts | 0 .../server/routes/enablement/index.ts | 0 .../server/routes/entities/create.ts | 0 .../server/routes/entities/delete.ts | 0 .../server/routes/entities/get.ts | 0 .../server/routes/entities/index.ts | 0 .../server/routes/entities/reset.ts | 0 .../server/routes/entities/update.ts | 0 .../entity_manager/server/routes/index.ts | 0 .../entity_manager/server/routes/types.ts | 0 .../entity_manager/server/routes/v2/index.ts | 0 .../entity_manager/server/routes/v2/search.ts | 0 .../routes/v2/source_definition_routes.ts | 0 .../routes/v2/type_definition_routes.ts | 0 .../server/saved_objects/entity_definition.ts | 0 .../saved_objects/entity_discovery_api_key.ts | 0 .../server/saved_objects/index.ts | 0 .../templates/components/base_latest.ts | 0 .../server/templates/components/entity.ts | 0 .../server/templates/components/event.ts | 0 .../shared}/entity_manager/server/types.ts | 0 .../shared}/entity_manager/tsconfig.json | 4 ++-- .../entity_manager_app/jest.config.js | 20 ----------------- .../entities_data_access/README.md | 0 .../entities_data_access/jest.config.js | 6 +++-- .../entities_data_access/kibana.jsonc | 0 .../entities_data_access/server/index.ts | 0 .../entities_data_access/server/plugin.ts | 0 .../entities_data_access/server/types.ts | 0 .../entities_data_access/tsconfig.json | 2 +- .../entity_manager_app/README.md | 0 .../entity_manager_app/jest.config.js | 22 +++++++++++++++++++ .../entity_manager_app/kibana.jsonc | 0 .../entity_manager_app/public/application.tsx | 0 .../public/context/plugin_context.ts | 0 .../public/hooks/use_kibana.ts | 0 .../public/hooks/use_plugin_context.ts | 0 .../entity_manager_app/public/index.ts | 0 .../public/pages/overview/index.tsx | 0 .../entity_manager_app/public/plugin.ts | 0 .../entity_manager_app/public/routes.tsx | 0 .../entity_manager_app/public/types.ts | 0 .../entity_manager_app/tsconfig.json | 4 ++-- yarn.lock | 8 +++---- 191 files changed, 67 insertions(+), 62 deletions(-) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/README.md (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/index.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/jest.config.js (74%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/kibana.jsonc (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/oas.yaml (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/package.json (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/scripts/generate.js (89%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/scripts/generate_oas.js (93%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/scripts/serve_oas_ui.js (92%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/rest_spec/create.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/rest_spec/delete.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/rest_spec/get.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/rest_spec/reset.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/schema/__snapshots__/common.test.ts.snap (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/schema/common.test.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/schema/common.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/schema/entity.test.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/schema/entity.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/schema/entity_definition.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/schema/patterns.test.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/src/schema/patterns.ts (100%) rename x-pack/{packages => platform/packages/shared}/kbn-entities-schema/tsconfig.json (84%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/README.md (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/common/config.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/common/constants_entities.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/common/debug_log.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/common/errors.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/common/types_api.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/docs/entity_definitions.md (97%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/jest.config.js (53%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/kibana.jsonc (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/public/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/public/lib/entity_client.test.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/public/lib/entity_client.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/public/lib/errors.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/public/plugin.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/public/types.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/auth/api_key/api_key.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/auth/api_key/saved_object.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/auth/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/auth/privileges.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/constants.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/containers_from_ecs_data.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/hosts_from_ecs_data.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/common/ecs_index_patterns.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/common/ecs_metadata.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/common/global_metadata.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/common/otel_index_patterns.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/common/otel_metadata.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/ecs/cluster.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/ecs/cron_job.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/ecs/daemon_set.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/ecs/deployment.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/ecs/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/ecs/job.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/ecs/node.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/ecs/pod.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/ecs/replica_set.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/ecs/service.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/ecs/stateful_set.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/semconv/cluster.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/semconv/cron_job.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/semconv/daemon_set.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/semconv/deployment.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/semconv/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/semconv/job.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/semconv/node.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/semconv/pod.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/semconv/replica_set.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/kubernetes/semconv/stateful_set.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/built_in/services_from_ecs_data.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/create_and_install_ingest_pipeline.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/create_and_install_transform.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/delete_entity_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/delete_index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/delete_ingest_pipeline.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/delete_transforms.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/errors/entity_definition_id_invalid.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/errors/entity_definition_update_conflict.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/errors/entity_id_conflict_error.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/errors/entity_not_found.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/errors/entity_security_exception.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/errors/invalid_transform_error.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/find_entity_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/helpers/fixtures/builtin_entity_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/helpers/fixtures/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/helpers/generate_component_id.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/helpers/get_elasticsearch_query_or_throw.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/helpers/ingest_pipeline_script_processor_helpers.test.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/helpers/ingest_pipeline_script_processor_helpers.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/helpers/is_builtin_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/helpers/merge_definition_update.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/helpers/retry.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_latest_processors.test.ts.snap (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/ingest_pipeline/generate_latest_processors.test.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/ingest_pipeline/generate_latest_processors.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/install_entity_definition.test.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/install_entity_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/read_entity_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/save_entity_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/start_transforms.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/stop_transforms.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/templates/entities_latest_template.test.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/templates/entities_latest_template.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/transform/generate_identity_aggregations.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/transform/generate_latest_transform.test.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/transform/generate_latest_transform.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/transform/generate_metric_aggregations.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/transform/validate_transform_ids.test.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/transform/validate_transform_ids.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/types.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/uninstall_entity_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entities/upgrade_entity_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/entity_client.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/manage_index_templates.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/utils.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/constants.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/definitions/source_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/definitions/type_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/entity_client.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/errors/entity_definition_conflict.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/errors/unknown_entity_type.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/queries/index.test.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/queries/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/queries/utils.test.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/queries/utils.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/run_esql_query.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/v2/types.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/validators/validate_date_range.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/lib/validators/validation_error.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/plugin.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/create_entity_manager_server_route.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/enablement/check.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/enablement/disable.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/enablement/enable.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/enablement/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/entities/create.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/entities/delete.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/entities/get.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/entities/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/entities/reset.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/entities/update.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/types.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/v2/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/v2/search.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/v2/source_definition_routes.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/routes/v2/type_definition_routes.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/saved_objects/entity_definition.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/saved_objects/entity_discovery_api_key.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/saved_objects/index.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/templates/components/base_latest.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/templates/components/entity.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/templates/components/event.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/server/types.ts (100%) rename x-pack/{plugins => platform/plugins/shared}/entity_manager/tsconfig.json (91%) delete mode 100644 x-pack/plugins/observability_solution/entity_manager_app/jest.config.js rename x-pack/{ => solutions/observability}/plugins/observability_solution/entities_data_access/README.md (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entities_data_access/jest.config.js (65%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entities_data_access/kibana.jsonc (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entities_data_access/server/index.ts (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entities_data_access/server/plugin.ts (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entities_data_access/server/types.ts (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entities_data_access/tsconfig.json (78%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/README.md (100%) create mode 100644 x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/jest.config.js rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/kibana.jsonc (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/public/application.tsx (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/public/context/plugin_context.ts (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/public/hooks/use_kibana.ts (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/public/hooks/use_plugin_context.ts (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/public/index.ts (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/public/plugin.ts (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/public/routes.tsx (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/public/types.ts (100%) rename x-pack/{ => solutions/observability}/plugins/observability_solution/entity_manager_app/tsconfig.json (88%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5dbb563fda702..1b4119ca09e3c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -788,7 +788,6 @@ x-pack/packages/kbn-cloud-security-posture/public @elastic/kibana-cloud-security x-pack/packages/kbn-data-forge @elastic/obs-ux-management-team x-pack/packages/kbn-elastic-assistant @elastic/security-generative-ai x-pack/packages/kbn-elastic-assistant-common @elastic/security-generative-ai -x-pack/packages/kbn-entities-schema @elastic/obs-entities x-pack/packages/kbn-infra-forge @elastic/obs-ux-management-team x-pack/packages/kbn-langchain @elastic/security-generative-ai x-pack/packages/kbn-random-sampling @elastic/kibana-visualizations @@ -864,6 +863,8 @@ x-pack/packages/security/plugin_types_server @elastic/kibana-security x-pack/packages/security/role_management_model @elastic/kibana-security x-pack/packages/security/ui_components @elastic/kibana-security x-pack/performance @elastic/appex-qa +x-pack/platform/packages/shared/kbn-entities-schema @elastic/obs-entities +x-pack/platform/plugins/shared/entity_manager @elastic/obs-entities x-pack/plugins/actions @elastic/response-ops x-pack/plugins/ai_infra/llm_tasks @elastic/appex-ai-infra x-pack/plugins/ai_infra/product_doc_base @elastic/appex-ai-infra @@ -894,7 +895,6 @@ x-pack/plugins/elastic_assistant @elastic/security-generative-ai x-pack/plugins/embeddable_enhanced @elastic/kibana-presentation x-pack/plugins/encrypted_saved_objects @elastic/kibana-security x-pack/plugins/enterprise_search @elastic/search-kibana -x-pack/plugins/entity_manager @elastic/obs-entities x-pack/plugins/event_log @elastic/response-ops x-pack/plugins/features @elastic/kibana-core x-pack/plugins/fields_metadata @elastic/obs-ux-logs-team @@ -926,8 +926,6 @@ x-pack/plugins/observability_solution/apm @elastic/obs-ux-infra_services-team x-pack/plugins/observability_solution/apm_data_access @elastic/obs-ux-infra_services-team x-pack/plugins/observability_solution/apm/ftr_e2e @elastic/obs-ux-infra_services-team x-pack/plugins/observability_solution/dataset_quality @elastic/obs-ux-logs-team -x-pack/plugins/observability_solution/entities_data_access @elastic/obs-entities -x-pack/plugins/observability_solution/entity_manager_app @elastic/obs-entities x-pack/plugins/observability_solution/exploratory_view @elastic/obs-ux-management-team x-pack/plugins/observability_solution/infra @elastic/obs-ux-logs-team @elastic/obs-ux-infra_services-team x-pack/plugins/observability_solution/inventory @elastic/obs-ux-infra_services-team @@ -994,6 +992,8 @@ x-pack/plugins/translations @elastic/kibana-localization x-pack/plugins/triggers_actions_ui @elastic/response-ops x-pack/plugins/upgrade_assistant @elastic/kibana-management x-pack/plugins/watcher @elastic/kibana-management +x-pack/solutions/observability/plugins/observability_solution/entities_data_access @elastic/obs-entities +x-pack/solutions/observability/plugins/observability_solution/entity_manager_app @elastic/obs-entities x-pack/test x-pack/test_serverless x-pack/test/alerting_api_integration/common/plugins/aad @elastic/response-ops diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index 00841c869ef4f..0baaf75b79493 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -575,15 +575,15 @@ security and spaces filtering. |This plugin provides Kibana user interfaces for managing the Enterprise Search solution and its products, App Search and Workplace Search. -|{kib-repo}blob/{branch}/x-pack/plugins/observability_solution/entities_data_access/README.md[entitiesDataAccess] +|{kib-repo}blob/{branch}/x-pack/solutions/observability/plugins/observability_solution/entities_data_access/README.md[entitiesDataAccess] |Exposes services to access entities data. -|{kib-repo}blob/{branch}/x-pack/plugins/entity_manager/README.md[entityManager] +|{kib-repo}blob/{branch}/x-pack/platform/plugins/shared/entity_manager/README.md[entityManager] |This plugin provides access to observed entity data, such as information about hosts, pods, containers, services, and more. -|{kib-repo}blob/{branch}/x-pack/plugins/observability_solution/entity_manager_app/README.md[entityManagerApp] +|{kib-repo}blob/{branch}/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/README.md[entityManagerApp] |This plugin provides a user interface to interact with the Entity Manager. diff --git a/package.json b/package.json index 05f10169d5e81..c32e875489aba 100644 --- a/package.json +++ b/package.json @@ -477,11 +477,11 @@ "@kbn/embedded-lens-example-plugin": "link:x-pack/examples/embedded_lens_example", "@kbn/encrypted-saved-objects-plugin": "link:x-pack/plugins/encrypted_saved_objects", "@kbn/enterprise-search-plugin": "link:x-pack/plugins/enterprise_search", - "@kbn/entities-data-access-plugin": "link:x-pack/plugins/observability_solution/entities_data_access", - "@kbn/entities-schema": "link:x-pack/packages/kbn-entities-schema", + "@kbn/entities-data-access-plugin": "link:x-pack/solutions/observability/plugins/observability_solution/entities_data_access", + "@kbn/entities-schema": "link:x-pack/platform/packages/shared/kbn-entities-schema", "@kbn/entity-manager-fixture-plugin": "link:x-pack/test/api_integration/apis/entity_manager/fixture_plugin", - "@kbn/entityManager-app-plugin": "link:x-pack/plugins/observability_solution/entity_manager_app", - "@kbn/entityManager-plugin": "link:x-pack/plugins/entity_manager", + "@kbn/entityManager-app-plugin": "link:x-pack/solutions/observability/plugins/observability_solution/entity_manager_app", + "@kbn/entityManager-plugin": "link:x-pack/platform/plugins/shared/entity_manager", "@kbn/error-boundary-example-plugin": "link:examples/error_boundary", "@kbn/es-errors": "link:packages/kbn-es-errors", "@kbn/es-query": "link:packages/kbn-es-query", diff --git a/tsconfig.base.json b/tsconfig.base.json index 85eaafc729e61..de0d8a384222a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -822,16 +822,16 @@ "@kbn/encrypted-saved-objects-plugin/*": ["x-pack/plugins/encrypted_saved_objects/*"], "@kbn/enterprise-search-plugin": ["x-pack/plugins/enterprise_search"], "@kbn/enterprise-search-plugin/*": ["x-pack/plugins/enterprise_search/*"], - "@kbn/entities-data-access-plugin": ["x-pack/plugins/observability_solution/entities_data_access"], - "@kbn/entities-data-access-plugin/*": ["x-pack/plugins/observability_solution/entities_data_access/*"], - "@kbn/entities-schema": ["x-pack/packages/kbn-entities-schema"], - "@kbn/entities-schema/*": ["x-pack/packages/kbn-entities-schema/*"], + "@kbn/entities-data-access-plugin": ["x-pack/solutions/observability/plugins/observability_solution/entities_data_access"], + "@kbn/entities-data-access-plugin/*": ["x-pack/solutions/observability/plugins/observability_solution/entities_data_access/*"], + "@kbn/entities-schema": ["x-pack/platform/packages/shared/kbn-entities-schema"], + "@kbn/entities-schema/*": ["x-pack/platform/packages/shared/kbn-entities-schema/*"], "@kbn/entity-manager-fixture-plugin": ["x-pack/test/api_integration/apis/entity_manager/fixture_plugin"], "@kbn/entity-manager-fixture-plugin/*": ["x-pack/test/api_integration/apis/entity_manager/fixture_plugin/*"], - "@kbn/entityManager-app-plugin": ["x-pack/plugins/observability_solution/entity_manager_app"], - "@kbn/entityManager-app-plugin/*": ["x-pack/plugins/observability_solution/entity_manager_app/*"], - "@kbn/entityManager-plugin": ["x-pack/plugins/entity_manager"], - "@kbn/entityManager-plugin/*": ["x-pack/plugins/entity_manager/*"], + "@kbn/entityManager-app-plugin": ["x-pack/solutions/observability/plugins/observability_solution/entity_manager_app"], + "@kbn/entityManager-app-plugin/*": ["x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/*"], + "@kbn/entityManager-plugin": ["x-pack/platform/plugins/shared/entity_manager"], + "@kbn/entityManager-plugin/*": ["x-pack/platform/plugins/shared/entity_manager/*"], "@kbn/error-boundary-example-plugin": ["examples/error_boundary"], "@kbn/error-boundary-example-plugin/*": ["examples/error_boundary/*"], "@kbn/es": ["packages/kbn-es"], diff --git a/x-pack/packages/kbn-entities-schema/README.md b/x-pack/platform/packages/shared/kbn-entities-schema/README.md similarity index 100% rename from x-pack/packages/kbn-entities-schema/README.md rename to x-pack/platform/packages/shared/kbn-entities-schema/README.md diff --git a/x-pack/packages/kbn-entities-schema/index.ts b/x-pack/platform/packages/shared/kbn-entities-schema/index.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/index.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/index.ts diff --git a/x-pack/packages/kbn-entities-schema/jest.config.js b/x-pack/platform/packages/shared/kbn-entities-schema/jest.config.js similarity index 74% rename from x-pack/packages/kbn-entities-schema/jest.config.js rename to x-pack/platform/packages/shared/kbn-entities-schema/jest.config.js index 1d10119431ec3..8a124563b366e 100644 --- a/x-pack/packages/kbn-entities-schema/jest.config.js +++ b/x-pack/platform/packages/shared/kbn-entities-schema/jest.config.js @@ -7,6 +7,6 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../..', - roots: ['/x-pack/packages/kbn-entities-schema'], + rootDir: '../../../../..', + roots: ['/x-pack/platform/packages/shared/kbn-entities-schema'], }; diff --git a/x-pack/packages/kbn-entities-schema/kibana.jsonc b/x-pack/platform/packages/shared/kbn-entities-schema/kibana.jsonc similarity index 100% rename from x-pack/packages/kbn-entities-schema/kibana.jsonc rename to x-pack/platform/packages/shared/kbn-entities-schema/kibana.jsonc diff --git a/x-pack/packages/kbn-entities-schema/oas.yaml b/x-pack/platform/packages/shared/kbn-entities-schema/oas.yaml similarity index 100% rename from x-pack/packages/kbn-entities-schema/oas.yaml rename to x-pack/platform/packages/shared/kbn-entities-schema/oas.yaml diff --git a/x-pack/packages/kbn-entities-schema/package.json b/x-pack/platform/packages/shared/kbn-entities-schema/package.json similarity index 100% rename from x-pack/packages/kbn-entities-schema/package.json rename to x-pack/platform/packages/shared/kbn-entities-schema/package.json diff --git a/x-pack/packages/kbn-entities-schema/scripts/generate.js b/x-pack/platform/packages/shared/kbn-entities-schema/scripts/generate.js similarity index 89% rename from x-pack/packages/kbn-entities-schema/scripts/generate.js rename to x-pack/platform/packages/shared/kbn-entities-schema/scripts/generate.js index e3214affce38e..7568dafb324dc 100644 --- a/x-pack/packages/kbn-entities-schema/scripts/generate.js +++ b/x-pack/platform/packages/shared/kbn-entities-schema/scripts/generate.js @@ -5,7 +5,7 @@ * 2.0. */ -require('../../../../src/setup_node_env'); +require('../../../../../../src/setup_node_env'); const { generateOAS } = require('./generate_oas'); const { writeFileSync } = require('fs'); diff --git a/x-pack/packages/kbn-entities-schema/scripts/generate_oas.js b/x-pack/platform/packages/shared/kbn-entities-schema/scripts/generate_oas.js similarity index 93% rename from x-pack/packages/kbn-entities-schema/scripts/generate_oas.js rename to x-pack/platform/packages/shared/kbn-entities-schema/scripts/generate_oas.js index d1310535db3a9..e3fa2f0b58c31 100644 --- a/x-pack/packages/kbn-entities-schema/scripts/generate_oas.js +++ b/x-pack/platform/packages/shared/kbn-entities-schema/scripts/generate_oas.js @@ -5,7 +5,7 @@ * 2.0. */ -require('../../../../src/setup_node_env'); +require('../../../../../../src/setup_node_env'); const swaggerJsdoc = require('swagger-jsdoc'); const { zodToJsonSchema } = require('zod-to-json-schema'); @@ -62,6 +62,6 @@ export const generateOAS = (options) => }, }, }, - apis: ['../../plugins/observability_solution/entity_manager/server/routes/**/*.ts'], + apis: ['../../../../plugins/observability_solution/entity_manager/server/routes/**/*.ts'], ...options, }); diff --git a/x-pack/packages/kbn-entities-schema/scripts/serve_oas_ui.js b/x-pack/platform/packages/shared/kbn-entities-schema/scripts/serve_oas_ui.js similarity index 92% rename from x-pack/packages/kbn-entities-schema/scripts/serve_oas_ui.js rename to x-pack/platform/packages/shared/kbn-entities-schema/scripts/serve_oas_ui.js index 956163f665bcf..d004c66db14d1 100644 --- a/x-pack/packages/kbn-entities-schema/scripts/serve_oas_ui.js +++ b/x-pack/platform/packages/shared/kbn-entities-schema/scripts/serve_oas_ui.js @@ -5,7 +5,7 @@ * 2.0. */ -require('../../../../src/setup_node_env'); +require('../../../../../../src/setup_node_env'); const { generateOAS } = require('./generate_oas'); const express = require('express'); diff --git a/x-pack/packages/kbn-entities-schema/src/rest_spec/create.ts b/x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/create.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/rest_spec/create.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/create.ts diff --git a/x-pack/packages/kbn-entities-schema/src/rest_spec/delete.ts b/x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/delete.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/rest_spec/delete.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/delete.ts diff --git a/x-pack/packages/kbn-entities-schema/src/rest_spec/get.ts b/x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/get.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/rest_spec/get.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/get.ts diff --git a/x-pack/packages/kbn-entities-schema/src/rest_spec/reset.ts b/x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/reset.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/rest_spec/reset.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/reset.ts diff --git a/x-pack/packages/kbn-entities-schema/src/schema/__snapshots__/common.test.ts.snap b/x-pack/platform/packages/shared/kbn-entities-schema/src/schema/__snapshots__/common.test.ts.snap similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/schema/__snapshots__/common.test.ts.snap rename to x-pack/platform/packages/shared/kbn-entities-schema/src/schema/__snapshots__/common.test.ts.snap diff --git a/x-pack/packages/kbn-entities-schema/src/schema/common.test.ts b/x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.test.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/schema/common.test.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.test.ts diff --git a/x-pack/packages/kbn-entities-schema/src/schema/common.ts b/x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/schema/common.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts diff --git a/x-pack/packages/kbn-entities-schema/src/schema/entity.test.ts b/x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.test.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/schema/entity.test.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.test.ts diff --git a/x-pack/packages/kbn-entities-schema/src/schema/entity.ts b/x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/schema/entity.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts diff --git a/x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts b/x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity_definition.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity_definition.ts diff --git a/x-pack/packages/kbn-entities-schema/src/schema/patterns.test.ts b/x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.test.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/schema/patterns.test.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.test.ts diff --git a/x-pack/packages/kbn-entities-schema/src/schema/patterns.ts b/x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.ts similarity index 100% rename from x-pack/packages/kbn-entities-schema/src/schema/patterns.ts rename to x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.ts diff --git a/x-pack/packages/kbn-entities-schema/tsconfig.json b/x-pack/platform/packages/shared/kbn-entities-schema/tsconfig.json similarity index 84% rename from x-pack/packages/kbn-entities-schema/tsconfig.json rename to x-pack/platform/packages/shared/kbn-entities-schema/tsconfig.json index 0fdbba4b7e793..d683c80d0cb12 100644 --- a/x-pack/packages/kbn-entities-schema/tsconfig.json +++ b/x-pack/platform/packages/shared/kbn-entities-schema/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", "types": [ diff --git a/x-pack/plugins/entity_manager/README.md b/x-pack/platform/plugins/shared/entity_manager/README.md similarity index 100% rename from x-pack/plugins/entity_manager/README.md rename to x-pack/platform/plugins/shared/entity_manager/README.md diff --git a/x-pack/plugins/entity_manager/common/config.ts b/x-pack/platform/plugins/shared/entity_manager/common/config.ts similarity index 100% rename from x-pack/plugins/entity_manager/common/config.ts rename to x-pack/platform/plugins/shared/entity_manager/common/config.ts diff --git a/x-pack/plugins/entity_manager/common/constants_entities.ts b/x-pack/platform/plugins/shared/entity_manager/common/constants_entities.ts similarity index 100% rename from x-pack/plugins/entity_manager/common/constants_entities.ts rename to x-pack/platform/plugins/shared/entity_manager/common/constants_entities.ts diff --git a/x-pack/plugins/entity_manager/common/debug_log.ts b/x-pack/platform/plugins/shared/entity_manager/common/debug_log.ts similarity index 100% rename from x-pack/plugins/entity_manager/common/debug_log.ts rename to x-pack/platform/plugins/shared/entity_manager/common/debug_log.ts diff --git a/x-pack/plugins/entity_manager/common/errors.ts b/x-pack/platform/plugins/shared/entity_manager/common/errors.ts similarity index 100% rename from x-pack/plugins/entity_manager/common/errors.ts rename to x-pack/platform/plugins/shared/entity_manager/common/errors.ts diff --git a/x-pack/plugins/entity_manager/common/types_api.ts b/x-pack/platform/plugins/shared/entity_manager/common/types_api.ts similarity index 100% rename from x-pack/plugins/entity_manager/common/types_api.ts rename to x-pack/platform/plugins/shared/entity_manager/common/types_api.ts diff --git a/x-pack/plugins/entity_manager/docs/entity_definitions.md b/x-pack/platform/plugins/shared/entity_manager/docs/entity_definitions.md similarity index 97% rename from x-pack/plugins/entity_manager/docs/entity_definitions.md rename to x-pack/platform/plugins/shared/entity_manager/docs/entity_definitions.md index fd08f1effd5a8..5ae22e6823737 100644 --- a/x-pack/plugins/entity_manager/docs/entity_definitions.md +++ b/x-pack/platform/plugins/shared/entity_manager/docs/entity_definitions.md @@ -7,7 +7,7 @@ Entity definitions are a core concept of the entity model. They define the way t > [!NOTE] > Entity definitions are based on transform and as such a subset of the configuration is tightly coupled to transform settings. While we provide defaults for these settings, one can still update properties such as `frequency`, `sync.time.delay` and `sync.time.field` (see [transform documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/put-transform.html)). -When creating a definition (see [entity definition schema](https://github.com/elastic/kibana/blob/main/x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts#L21)), entity manager will create a transforms to collect entities based on the configured [identityFields](https://github.com/elastic/kibana/blob/main/x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts#L29). +When creating a definition (see [entity definition schema](https://github.com/elastic/kibana/blob/main/x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity_definition.ts#L21)), entity manager will create a transforms to collect entities based on the configured [identityFields](https://github.com/elastic/kibana/blob/main/x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity_definition.ts#L29). The transform creates one document per entity, reading documents from the configured source indices and grouping them by the identity fields. Each entity document gets overwritten each time the transform runs. The transforms outputs the data to a unique index (`.entities.v1.latest.`). diff --git a/x-pack/plugins/entity_manager/jest.config.js b/x-pack/platform/plugins/shared/entity_manager/jest.config.js similarity index 53% rename from x-pack/plugins/entity_manager/jest.config.js rename to x-pack/platform/plugins/shared/entity_manager/jest.config.js index 615d1c851895b..0f3a42c2452c9 100644 --- a/x-pack/plugins/entity_manager/jest.config.js +++ b/x-pack/platform/plugins/shared/entity_manager/jest.config.js @@ -7,11 +7,12 @@ module.exports = { preset: '@kbn/test', - rootDir: '../../..', - roots: ['/x-pack/plugins/entity_manager'], - coverageDirectory: '/target/kibana-coverage/jest/x-pack/plugins/entity_manager', + rootDir: '../../../../..', + roots: ['/x-pack/platform/plugins/shared/entity_manager'], + coverageDirectory: + '/target/kibana-coverage/jest/x-pack/platform/plugins/shared/entity_manager', coverageReporters: ['text', 'html'], collectCoverageFrom: [ - '/x-pack/plugins/entity_manager/{common,public,server}/**/*.{js,ts,tsx}', + '/x-pack/platform/plugins/shared/entity_manager/{common,public,server}/**/*.{js,ts,tsx}', ], }; diff --git a/x-pack/plugins/entity_manager/kibana.jsonc b/x-pack/platform/plugins/shared/entity_manager/kibana.jsonc similarity index 100% rename from x-pack/plugins/entity_manager/kibana.jsonc rename to x-pack/platform/plugins/shared/entity_manager/kibana.jsonc diff --git a/x-pack/plugins/entity_manager/public/index.ts b/x-pack/platform/plugins/shared/entity_manager/public/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/public/index.ts rename to x-pack/platform/plugins/shared/entity_manager/public/index.ts diff --git a/x-pack/plugins/entity_manager/public/lib/entity_client.test.ts b/x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.test.ts similarity index 100% rename from x-pack/plugins/entity_manager/public/lib/entity_client.test.ts rename to x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.test.ts diff --git a/x-pack/plugins/entity_manager/public/lib/entity_client.ts b/x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts similarity index 100% rename from x-pack/plugins/entity_manager/public/lib/entity_client.ts rename to x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts diff --git a/x-pack/plugins/entity_manager/public/lib/errors.ts b/x-pack/platform/plugins/shared/entity_manager/public/lib/errors.ts similarity index 100% rename from x-pack/plugins/entity_manager/public/lib/errors.ts rename to x-pack/platform/plugins/shared/entity_manager/public/lib/errors.ts diff --git a/x-pack/plugins/entity_manager/public/plugin.ts b/x-pack/platform/plugins/shared/entity_manager/public/plugin.ts similarity index 100% rename from x-pack/plugins/entity_manager/public/plugin.ts rename to x-pack/platform/plugins/shared/entity_manager/public/plugin.ts diff --git a/x-pack/plugins/entity_manager/public/types.ts b/x-pack/platform/plugins/shared/entity_manager/public/types.ts similarity index 100% rename from x-pack/plugins/entity_manager/public/types.ts rename to x-pack/platform/plugins/shared/entity_manager/public/types.ts diff --git a/x-pack/plugins/entity_manager/server/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/index.ts diff --git a/x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts diff --git a/x-pack/plugins/entity_manager/server/lib/auth/api_key/saved_object.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/saved_object.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/auth/api_key/saved_object.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/saved_object.ts diff --git a/x-pack/plugins/entity_manager/server/lib/auth/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/auth/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/auth/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/auth/index.ts diff --git a/x-pack/plugins/entity_manager/server/lib/auth/privileges.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/auth/privileges.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/auth/privileges.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/auth/privileges.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/constants.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/constants.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/constants.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/constants.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/containers_from_ecs_data.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/containers_from_ecs_data.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/containers_from_ecs_data.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/containers_from_ecs_data.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/hosts_from_ecs_data.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/hosts_from_ecs_data.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/hosts_from_ecs_data.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/hosts_from_ecs_data.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/index.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/common/ecs_index_patterns.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/common/ecs_index_patterns.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/common/ecs_index_patterns.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/common/ecs_index_patterns.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/common/ecs_metadata.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/common/ecs_metadata.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/common/ecs_metadata.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/common/ecs_metadata.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/common/global_metadata.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/common/global_metadata.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/common/global_metadata.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/common/global_metadata.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/common/otel_index_patterns.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/common/otel_index_patterns.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/common/otel_index_patterns.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/common/otel_index_patterns.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/common/otel_metadata.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/common/otel_metadata.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/common/otel_metadata.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/common/otel_metadata.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/cluster.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/cluster.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/cluster.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/cluster.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/cron_job.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/cron_job.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/cron_job.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/cron_job.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/daemon_set.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/daemon_set.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/daemon_set.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/daemon_set.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/deployment.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/deployment.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/deployment.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/deployment.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/index.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/job.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/job.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/job.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/job.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/node.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/node.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/node.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/node.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/pod.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/pod.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/pod.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/pod.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/replica_set.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/replica_set.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/replica_set.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/replica_set.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/service.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/service.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/service.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/service.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/stateful_set.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/stateful_set.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/ecs/stateful_set.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/ecs/stateful_set.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/index.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/cluster.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/cluster.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/cluster.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/cluster.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/cron_job.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/cron_job.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/cron_job.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/cron_job.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/daemon_set.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/daemon_set.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/daemon_set.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/daemon_set.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/deployment.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/deployment.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/deployment.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/deployment.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/index.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/job.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/job.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/job.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/job.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/node.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/node.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/node.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/node.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/pod.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/pod.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/pod.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/pod.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/replica_set.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/replica_set.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/replica_set.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/replica_set.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/stateful_set.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/stateful_set.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/kubernetes/semconv/stateful_set.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/kubernetes/semconv/stateful_set.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/built_in/services_from_ecs_data.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/services_from_ecs_data.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/built_in/services_from_ecs_data.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/built_in/services_from_ecs_data.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/create_and_install_ingest_pipeline.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/create_and_install_ingest_pipeline.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/create_and_install_ingest_pipeline.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/create_and_install_ingest_pipeline.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/create_and_install_transform.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/create_and_install_transform.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/create_and_install_transform.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/create_and_install_transform.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/delete_entity_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/delete_entity_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/delete_entity_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/delete_entity_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/delete_index.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/delete_index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/delete_index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/delete_index.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/delete_ingest_pipeline.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/delete_ingest_pipeline.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/delete_ingest_pipeline.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/delete_ingest_pipeline.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/delete_transforms.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/delete_transforms.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/delete_transforms.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/delete_transforms.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/errors/entity_definition_id_invalid.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/entity_definition_id_invalid.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/errors/entity_definition_id_invalid.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/entity_definition_id_invalid.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/errors/entity_definition_update_conflict.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/entity_definition_update_conflict.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/errors/entity_definition_update_conflict.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/entity_definition_update_conflict.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/errors/entity_id_conflict_error.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/entity_id_conflict_error.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/errors/entity_id_conflict_error.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/entity_id_conflict_error.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/errors/entity_not_found.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/entity_not_found.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/errors/entity_not_found.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/entity_not_found.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/errors/entity_security_exception.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/entity_security_exception.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/errors/entity_security_exception.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/entity_security_exception.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/errors/invalid_transform_error.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/invalid_transform_error.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/errors/invalid_transform_error.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/errors/invalid_transform_error.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/find_entity_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/find_entity_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/find_entity_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/find_entity_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/helpers/fixtures/builtin_entity_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/fixtures/builtin_entity_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/helpers/fixtures/builtin_entity_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/fixtures/builtin_entity_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/fixtures/entity_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/helpers/fixtures/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/fixtures/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/helpers/fixtures/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/fixtures/index.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/helpers/generate_component_id.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/generate_component_id.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/helpers/generate_component_id.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/generate_component_id.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/helpers/get_elasticsearch_query_or_throw.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/get_elasticsearch_query_or_throw.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/helpers/get_elasticsearch_query_or_throw.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/get_elasticsearch_query_or_throw.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/helpers/ingest_pipeline_script_processor_helpers.test.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/ingest_pipeline_script_processor_helpers.test.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/helpers/ingest_pipeline_script_processor_helpers.test.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/ingest_pipeline_script_processor_helpers.test.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/helpers/ingest_pipeline_script_processor_helpers.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/ingest_pipeline_script_processor_helpers.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/helpers/ingest_pipeline_script_processor_helpers.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/ingest_pipeline_script_processor_helpers.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/helpers/is_builtin_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/is_builtin_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/helpers/is_builtin_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/is_builtin_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/helpers/merge_definition_update.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/merge_definition_update.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/helpers/merge_definition_update.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/merge_definition_update.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/helpers/retry.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/retry.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/helpers/retry.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/helpers/retry.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_latest_processors.test.ts.snap b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_latest_processors.test.ts.snap similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_latest_processors.test.ts.snap rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/ingest_pipeline/__snapshots__/generate_latest_processors.test.ts.snap diff --git a/x-pack/plugins/entity_manager/server/lib/entities/ingest_pipeline/generate_latest_processors.test.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/ingest_pipeline/generate_latest_processors.test.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/ingest_pipeline/generate_latest_processors.test.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/ingest_pipeline/generate_latest_processors.test.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/ingest_pipeline/generate_latest_processors.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/ingest_pipeline/generate_latest_processors.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/ingest_pipeline/generate_latest_processors.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/ingest_pipeline/generate_latest_processors.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/install_entity_definition.test.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/install_entity_definition.test.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/install_entity_definition.test.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/install_entity_definition.test.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/install_entity_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/install_entity_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/install_entity_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/install_entity_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/read_entity_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/read_entity_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/read_entity_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/read_entity_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/save_entity_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/save_entity_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/save_entity_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/save_entity_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/start_transforms.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/start_transforms.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/start_transforms.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/start_transforms.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/stop_transforms.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/stop_transforms.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/stop_transforms.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/stop_transforms.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/__snapshots__/entities_latest_template.test.ts.snap diff --git a/x-pack/plugins/entity_manager/server/lib/entities/templates/entities_latest_template.test.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/entities_latest_template.test.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/templates/entities_latest_template.test.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/entities_latest_template.test.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/templates/entities_latest_template.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/entities_latest_template.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/templates/entities_latest_template.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/templates/entities_latest_template.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/__snapshots__/generate_latest_transform.test.ts.snap diff --git a/x-pack/plugins/entity_manager/server/lib/entities/transform/generate_identity_aggregations.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_identity_aggregations.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/transform/generate_identity_aggregations.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_identity_aggregations.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/transform/generate_latest_transform.test.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_latest_transform.test.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/transform/generate_latest_transform.test.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_latest_transform.test.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/transform/generate_latest_transform.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_latest_transform.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/transform/generate_latest_transform.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_latest_transform.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.test.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_metadata_aggregations.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/transform/generate_metric_aggregations.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_metric_aggregations.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/transform/generate_metric_aggregations.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/generate_metric_aggregations.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/transform/validate_transform_ids.test.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/validate_transform_ids.test.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/transform/validate_transform_ids.test.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/validate_transform_ids.test.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/transform/validate_transform_ids.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/validate_transform_ids.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/transform/validate_transform_ids.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/transform/validate_transform_ids.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/types.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/types.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/types.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/types.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/uninstall_entity_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/uninstall_entity_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/uninstall_entity_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/uninstall_entity_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entities/upgrade_entity_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entities/upgrade_entity_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entities/upgrade_entity_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entities/upgrade_entity_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/entity_client.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/entity_client.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/entity_client.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/entity_client.ts diff --git a/x-pack/plugins/entity_manager/server/lib/manage_index_templates.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/manage_index_templates.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/manage_index_templates.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/manage_index_templates.ts diff --git a/x-pack/plugins/entity_manager/server/lib/utils.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/utils.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/utils.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/utils.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/constants.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/constants.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/constants.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/constants.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/definitions/setup_entity_definitions_index.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/definitions/source_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/definitions/source_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/definitions/source_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/definitions/source_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/definitions/type_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/definitions/type_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/definitions/type_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/definitions/type_definition.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/entity_client.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/entity_client.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/entity_client.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/errors/entity_definition_conflict.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/errors/entity_definition_conflict.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/errors/entity_definition_conflict.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/errors/entity_definition_conflict.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/errors/unknown_entity_type.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/errors/unknown_entity_type.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/errors/unknown_entity_type.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/errors/unknown_entity_type.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/queries/index.test.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/queries/index.test.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/queries/index.test.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/queries/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/queries/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/queries/index.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.test.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/queries/utils.test.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/queries/utils.test.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/queries/utils.test.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/queries/utils.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/queries/utils.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/queries/utils.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/run_esql_query.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/run_esql_query.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/run_esql_query.ts diff --git a/x-pack/plugins/entity_manager/server/lib/v2/types.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/v2/types.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/v2/types.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/v2/types.ts diff --git a/x-pack/plugins/entity_manager/server/lib/validators/validate_date_range.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/validators/validate_date_range.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/validators/validate_date_range.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/validators/validate_date_range.ts diff --git a/x-pack/plugins/entity_manager/server/lib/validators/validation_error.ts b/x-pack/platform/plugins/shared/entity_manager/server/lib/validators/validation_error.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/lib/validators/validation_error.ts rename to x-pack/platform/plugins/shared/entity_manager/server/lib/validators/validation_error.ts diff --git a/x-pack/plugins/entity_manager/server/plugin.ts b/x-pack/platform/plugins/shared/entity_manager/server/plugin.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/plugin.ts rename to x-pack/platform/plugins/shared/entity_manager/server/plugin.ts diff --git a/x-pack/plugins/entity_manager/server/routes/create_entity_manager_server_route.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/create_entity_manager_server_route.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/create_entity_manager_server_route.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/create_entity_manager_server_route.ts diff --git a/x-pack/plugins/entity_manager/server/routes/enablement/check.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/check.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/enablement/check.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/check.ts diff --git a/x-pack/plugins/entity_manager/server/routes/enablement/disable.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/disable.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/enablement/disable.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/disable.ts diff --git a/x-pack/plugins/entity_manager/server/routes/enablement/enable.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/enable.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/enablement/enable.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/enable.ts diff --git a/x-pack/plugins/entity_manager/server/routes/enablement/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/enablement/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/index.ts diff --git a/x-pack/plugins/entity_manager/server/routes/entities/create.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/entities/create.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/entities/create.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/entities/create.ts diff --git a/x-pack/plugins/entity_manager/server/routes/entities/delete.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/entities/delete.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/entities/delete.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/entities/delete.ts diff --git a/x-pack/plugins/entity_manager/server/routes/entities/get.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/entities/get.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/entities/get.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/entities/get.ts diff --git a/x-pack/plugins/entity_manager/server/routes/entities/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/entities/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/entities/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/entities/index.ts diff --git a/x-pack/plugins/entity_manager/server/routes/entities/reset.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/entities/reset.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/entities/reset.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/entities/reset.ts diff --git a/x-pack/plugins/entity_manager/server/routes/entities/update.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/entities/update.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/entities/update.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/entities/update.ts diff --git a/x-pack/plugins/entity_manager/server/routes/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/index.ts diff --git a/x-pack/plugins/entity_manager/server/routes/types.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/types.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/types.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/types.ts diff --git a/x-pack/plugins/entity_manager/server/routes/v2/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/v2/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/v2/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/v2/index.ts diff --git a/x-pack/plugins/entity_manager/server/routes/v2/search.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/v2/search.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/v2/search.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/v2/search.ts diff --git a/x-pack/plugins/entity_manager/server/routes/v2/source_definition_routes.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/v2/source_definition_routes.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/v2/source_definition_routes.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/v2/source_definition_routes.ts diff --git a/x-pack/plugins/entity_manager/server/routes/v2/type_definition_routes.ts b/x-pack/platform/plugins/shared/entity_manager/server/routes/v2/type_definition_routes.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/routes/v2/type_definition_routes.ts rename to x-pack/platform/plugins/shared/entity_manager/server/routes/v2/type_definition_routes.ts diff --git a/x-pack/plugins/entity_manager/server/saved_objects/entity_definition.ts b/x-pack/platform/plugins/shared/entity_manager/server/saved_objects/entity_definition.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/saved_objects/entity_definition.ts rename to x-pack/platform/plugins/shared/entity_manager/server/saved_objects/entity_definition.ts diff --git a/x-pack/plugins/entity_manager/server/saved_objects/entity_discovery_api_key.ts b/x-pack/platform/plugins/shared/entity_manager/server/saved_objects/entity_discovery_api_key.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/saved_objects/entity_discovery_api_key.ts rename to x-pack/platform/plugins/shared/entity_manager/server/saved_objects/entity_discovery_api_key.ts diff --git a/x-pack/plugins/entity_manager/server/saved_objects/index.ts b/x-pack/platform/plugins/shared/entity_manager/server/saved_objects/index.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/saved_objects/index.ts rename to x-pack/platform/plugins/shared/entity_manager/server/saved_objects/index.ts diff --git a/x-pack/plugins/entity_manager/server/templates/components/base_latest.ts b/x-pack/platform/plugins/shared/entity_manager/server/templates/components/base_latest.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/templates/components/base_latest.ts rename to x-pack/platform/plugins/shared/entity_manager/server/templates/components/base_latest.ts diff --git a/x-pack/plugins/entity_manager/server/templates/components/entity.ts b/x-pack/platform/plugins/shared/entity_manager/server/templates/components/entity.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/templates/components/entity.ts rename to x-pack/platform/plugins/shared/entity_manager/server/templates/components/entity.ts diff --git a/x-pack/plugins/entity_manager/server/templates/components/event.ts b/x-pack/platform/plugins/shared/entity_manager/server/templates/components/event.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/templates/components/event.ts rename to x-pack/platform/plugins/shared/entity_manager/server/templates/components/event.ts diff --git a/x-pack/plugins/entity_manager/server/types.ts b/x-pack/platform/plugins/shared/entity_manager/server/types.ts similarity index 100% rename from x-pack/plugins/entity_manager/server/types.ts rename to x-pack/platform/plugins/shared/entity_manager/server/types.ts diff --git a/x-pack/plugins/entity_manager/tsconfig.json b/x-pack/platform/plugins/shared/entity_manager/tsconfig.json similarity index 91% rename from x-pack/plugins/entity_manager/tsconfig.json rename to x-pack/platform/plugins/shared/entity_manager/tsconfig.json index 4c75ac101f6ad..beb8097502b2b 100644 --- a/x-pack/plugins/entity_manager/tsconfig.json +++ b/x-pack/platform/plugins/shared/entity_manager/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types" }, "include": [ - "../../../typings/**/*", + "../../../../../typings/**/*", "common/**/*", "server/**/*", "public/**/*", diff --git a/x-pack/plugins/observability_solution/entity_manager_app/jest.config.js b/x-pack/plugins/observability_solution/entity_manager_app/jest.config.js deleted file mode 100644 index d8217a43063a2..0000000000000 --- a/x-pack/plugins/observability_solution/entity_manager_app/jest.config.js +++ /dev/null @@ -1,20 +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. - */ - -const path = require('path'); - -module.exports = { - preset: '@kbn/test', - rootDir: path.resolve(__dirname, '../../../..'), - roots: ['/x-pack/plugins/observability_solution/entity_manager_app'], - coverageDirectory: - '/target/kibana-coverage/jest/x-pack/plugins/observability_solution/entity_manager_app', - coverageReporters: ['text', 'html'], - collectCoverageFrom: [ - '/x-pack/plugins/observability_solution/entity_manager_app/{common,public,server}/**/*.{js,ts,tsx}', - ], -}; diff --git a/x-pack/plugins/observability_solution/entities_data_access/README.md b/x-pack/solutions/observability/plugins/observability_solution/entities_data_access/README.md similarity index 100% rename from x-pack/plugins/observability_solution/entities_data_access/README.md rename to x-pack/solutions/observability/plugins/observability_solution/entities_data_access/README.md diff --git a/x-pack/plugins/observability_solution/entities_data_access/jest.config.js b/x-pack/solutions/observability/plugins/observability_solution/entities_data_access/jest.config.js similarity index 65% rename from x-pack/plugins/observability_solution/entities_data_access/jest.config.js rename to x-pack/solutions/observability/plugins/observability_solution/entities_data_access/jest.config.js index 9a813d5ebfee0..2676048c712b2 100644 --- a/x-pack/plugins/observability_solution/entities_data_access/jest.config.js +++ b/x-pack/solutions/observability/plugins/observability_solution/entities_data_access/jest.config.js @@ -9,6 +9,8 @@ const path = require('path'); module.exports = { preset: '@kbn/test', - rootDir: path.resolve(__dirname, '../../../..'), - roots: ['/x-pack/plugins/observability_solution/entities_data_access'], + rootDir: path.resolve(__dirname, '../../../../../..'), + roots: [ + '/x-pack/solutions/observability/plugins/observability_solution/entities_data_access', + ], }; diff --git a/x-pack/plugins/observability_solution/entities_data_access/kibana.jsonc b/x-pack/solutions/observability/plugins/observability_solution/entities_data_access/kibana.jsonc similarity index 100% rename from x-pack/plugins/observability_solution/entities_data_access/kibana.jsonc rename to x-pack/solutions/observability/plugins/observability_solution/entities_data_access/kibana.jsonc diff --git a/x-pack/plugins/observability_solution/entities_data_access/server/index.ts b/x-pack/solutions/observability/plugins/observability_solution/entities_data_access/server/index.ts similarity index 100% rename from x-pack/plugins/observability_solution/entities_data_access/server/index.ts rename to x-pack/solutions/observability/plugins/observability_solution/entities_data_access/server/index.ts diff --git a/x-pack/plugins/observability_solution/entities_data_access/server/plugin.ts b/x-pack/solutions/observability/plugins/observability_solution/entities_data_access/server/plugin.ts similarity index 100% rename from x-pack/plugins/observability_solution/entities_data_access/server/plugin.ts rename to x-pack/solutions/observability/plugins/observability_solution/entities_data_access/server/plugin.ts diff --git a/x-pack/plugins/observability_solution/entities_data_access/server/types.ts b/x-pack/solutions/observability/plugins/observability_solution/entities_data_access/server/types.ts similarity index 100% rename from x-pack/plugins/observability_solution/entities_data_access/server/types.ts rename to x-pack/solutions/observability/plugins/observability_solution/entities_data_access/server/types.ts diff --git a/x-pack/plugins/observability_solution/entities_data_access/tsconfig.json b/x-pack/solutions/observability/plugins/observability_solution/entities_data_access/tsconfig.json similarity index 78% rename from x-pack/plugins/observability_solution/entities_data_access/tsconfig.json rename to x-pack/solutions/observability/plugins/observability_solution/entities_data_access/tsconfig.json index 5475c04618993..a2745070f63ef 100644 --- a/x-pack/plugins/observability_solution/entities_data_access/tsconfig.json +++ b/x-pack/solutions/observability/plugins/observability_solution/entities_data_access/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types" }, diff --git a/x-pack/plugins/observability_solution/entity_manager_app/README.md b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/README.md similarity index 100% rename from x-pack/plugins/observability_solution/entity_manager_app/README.md rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/README.md diff --git a/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/jest.config.js b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/jest.config.js new file mode 100644 index 0000000000000..2b49a755b2c59 --- /dev/null +++ b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/jest.config.js @@ -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. + */ + +const path = require('path'); + +module.exports = { + preset: '@kbn/test', + rootDir: path.resolve(__dirname, '../../../../../..'), + roots: [ + '/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app', + ], + coverageDirectory: + '/target/kibana-coverage/jest/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app', + coverageReporters: ['text', 'html'], + collectCoverageFrom: [ + '/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/{common,public,server}/**/*.{js,ts,tsx}', + ], +}; diff --git a/x-pack/plugins/observability_solution/entity_manager_app/kibana.jsonc b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/kibana.jsonc similarity index 100% rename from x-pack/plugins/observability_solution/entity_manager_app/kibana.jsonc rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/kibana.jsonc diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/application.tsx b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/application.tsx similarity index 100% rename from x-pack/plugins/observability_solution/entity_manager_app/public/application.tsx rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/application.tsx diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/context/plugin_context.ts b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/context/plugin_context.ts similarity index 100% rename from x-pack/plugins/observability_solution/entity_manager_app/public/context/plugin_context.ts rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/context/plugin_context.ts diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/hooks/use_kibana.ts b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/hooks/use_kibana.ts similarity index 100% rename from x-pack/plugins/observability_solution/entity_manager_app/public/hooks/use_kibana.ts rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/hooks/use_kibana.ts diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/hooks/use_plugin_context.ts b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/hooks/use_plugin_context.ts similarity index 100% rename from x-pack/plugins/observability_solution/entity_manager_app/public/hooks/use_plugin_context.ts rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/hooks/use_plugin_context.ts diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/index.ts b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/index.ts similarity index 100% rename from x-pack/plugins/observability_solution/entity_manager_app/public/index.ts rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/index.ts diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx similarity index 100% rename from x-pack/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/pages/overview/index.tsx diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/plugin.ts b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/plugin.ts similarity index 100% rename from x-pack/plugins/observability_solution/entity_manager_app/public/plugin.ts rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/plugin.ts diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/routes.tsx b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/routes.tsx similarity index 100% rename from x-pack/plugins/observability_solution/entity_manager_app/public/routes.tsx rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/routes.tsx diff --git a/x-pack/plugins/observability_solution/entity_manager_app/public/types.ts b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/types.ts similarity index 100% rename from x-pack/plugins/observability_solution/entity_manager_app/public/types.ts rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/public/types.ts diff --git a/x-pack/plugins/observability_solution/entity_manager_app/tsconfig.json b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/tsconfig.json similarity index 88% rename from x-pack/plugins/observability_solution/entity_manager_app/tsconfig.json rename to x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/tsconfig.json index 64c0a293a4e2e..0483de43cb42a 100644 --- a/x-pack/plugins/observability_solution/entity_manager_app/tsconfig.json +++ b/x-pack/solutions/observability/plugins/observability_solution/entity_manager_app/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../../../tsconfig.base.json", + "extends": "../../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types" }, "include": [ - "../../../../typings/**/*", + "../../../../../../typings/**/*", "common/**/*", "public/**/*", "types/**/*" diff --git a/yarn.lock b/yarn.lock index 31b75569d8c6a..7fe1424cda3cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5460,11 +5460,11 @@ version "0.0.0" uid "" -"@kbn/entities-data-access-plugin@link:x-pack/plugins/observability_solution/entities_data_access": +"@kbn/entities-data-access-plugin@link:x-pack/solutions/observability/plugins/observability_solution/entities_data_access": version "0.0.0" uid "" -"@kbn/entities-schema@link:x-pack/packages/kbn-entities-schema": +"@kbn/entities-schema@link:x-pack/platform/packages/shared/kbn-entities-schema": version "0.0.0" uid "" @@ -5472,11 +5472,11 @@ version "0.0.0" uid "" -"@kbn/entityManager-app-plugin@link:x-pack/plugins/observability_solution/entity_manager_app": +"@kbn/entityManager-app-plugin@link:x-pack/solutions/observability/plugins/observability_solution/entity_manager_app": version "0.0.0" uid "" -"@kbn/entityManager-plugin@link:x-pack/plugins/entity_manager": +"@kbn/entityManager-plugin@link:x-pack/platform/plugins/shared/entity_manager": version "0.0.0" uid "" From 5ca6a8ec4b6fd58ff78767472b59983cded53df7 Mon Sep 17 00:00:00 2001 From: Shahzad Date: Fri, 6 Dec 2024 19:59:55 +0100 Subject: [PATCH 133/141] [EuiProvider] Hide unwanted toast until a fix can be done !! (#203244) ## Summary Hiding this until it can be fixed via https://github.com/elastic/kibana/issues/201805 !! image --- .../core-chrome-browser-internal/src/chrome_service.tsx | 4 +++- test/plugin_functional/test_suites/shared_ux/eui_provider.ts | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx index 434639b07efdf..511100fff6d40 100644 --- a/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx +++ b/packages/core/chrome/core-chrome-browser-internal/src/chrome_service.tsx @@ -182,6 +182,7 @@ export class ChromeService { }; // Ensure developers are notified if working in a context that lacks the EUI Provider. + // @ts-expect-error private handleEuiDevProviderWarning = (notifications: NotificationsStart) => { const isDev = this.params.coreContext.env.mode.name === 'development'; if (isDev) { @@ -240,7 +241,8 @@ export class ChromeService { }: StartDeps): Promise { this.initVisibility(application); this.handleEuiFullScreenChanges(); - this.handleEuiDevProviderWarning(notifications); + // commented out until https://github.com/elastic/kibana/issues/201805 can be fixed + // this.handleEuiDevProviderWarning(notifications); const globalHelpExtensionMenuLinks$ = new BehaviorSubject( [] diff --git a/test/plugin_functional/test_suites/shared_ux/eui_provider.ts b/test/plugin_functional/test_suites/shared_ux/eui_provider.ts index fd503db46d27d..b35e25bb9121b 100644 --- a/test/plugin_functional/test_suites/shared_ux/eui_provider.ts +++ b/test/plugin_functional/test_suites/shared_ux/eui_provider.ts @@ -15,7 +15,8 @@ export default function ({ getPageObjects, getService }: PluginFunctionalProvide const testSubjects = getService('testSubjects'); const browser = getService('browser'); - describe('EUI Provider Dev Warning', () => { + // skipped until https://github.com/elastic/kibana/issues/201805 is resolved + describe.skip('EUI Provider Dev Warning', () => { it('shows error toast to developer', async () => { const pageTitle = 'EuiProvider test - Elastic'; From 830952ab7c0d3bd3a9050fff7afb8d3502f2d64b Mon Sep 17 00:00:00 2001 From: seanrathier Date: Fri, 6 Dec 2024 14:20:33 -0500 Subject: [PATCH 134/141] [Cloud Security] Refactoring the limit error message for agentless agent (#203257) --- .../server/services/agents/agentless_agent.ts | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts b/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts index 6d1945fced809..3cd885beba455 100644 --- a/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts +++ b/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts @@ -37,6 +37,15 @@ import { listFleetServerHosts } from '../fleet_server_host'; import type { AgentlessConfig } from '../utils/agentless'; import { prependAgentlessApiBasePathToEndpoint, isAgentlessEnabled } from '../utils/agentless'; +interface AgentlessAgentErrorHandlingMessages { + [key: string]: { + [key: string]: { + log: string; + message: string; + }; + }; +} + class AgentlessAgentService { public async createAgentlessAgent( esClient: ElasticsearchClient, @@ -326,14 +335,12 @@ class AgentlessAgentService { throw this.getAgentlessAgentError(action, error.message, traceId); } - const ERROR_HANDLING_MESSAGES = this.getErrorHandlingMessages(agentlessPolicyId); + const ERROR_HANDLING_MESSAGES: AgentlessAgentErrorHandlingMessages = + this.getErrorHandlingMessages(agentlessPolicyId); if (error.response) { if (error.response.status in ERROR_HANDLING_MESSAGES) { - const handledResponseErrorMessage = - ERROR_HANDLING_MESSAGES[error.response.status as keyof typeof ERROR_HANDLING_MESSAGES][ - action - ]; + const handledResponseErrorMessage = ERROR_HANDLING_MESSAGES[error.response.status][action]; this.handleResponseError( action, error.response, @@ -426,7 +433,7 @@ class AgentlessAgentService { : new AgentlessAgentDeleteError(this.withRequestIdMessage(userMessage, traceId)); } - private getErrorHandlingMessages(agentlessPolicyId: string) { + private getErrorHandlingMessages(agentlessPolicyId: string): AgentlessAgentErrorHandlingMessages { return { 400: { create: { @@ -483,13 +490,7 @@ class AgentlessAgentService { create: { log: '[Agentless API] Creating the agentless agent failed with a status 429 for agentless policy, agentless agent limit has been reached for this deployment or project.', message: - 'the Agentless API could not create the agentless agent, you have reached the limit of agentless agents provisioned for this deployment or project. Consider removing some agentless agents and try again or use agent-based agents for this integration.', - }, - // this is likely to happen when deleting agentless agents, but covering it in case - delete: { - log: '[Agentless API] Deleting the agentless deployment failed with a status 429 for agentless policy, agentless agent limit has been reached for this deployment or project.', - message: - 'the Agentless API could not delete the agentless deployment, you have reached the limit of agentless agents provisioned for this deployment or project. Consider removing some agentless agents and try again or use agent-based agents for this integration.', + 'you have reached the limit for agentless provisioning. Please remove some or switch to agent-based integration.', }, }, 500: { From 94ca34a5bc820528a0ef6c43df60f3348956ed59 Mon Sep 17 00:00:00 2001 From: seanrathier Date: Fri, 6 Dec 2024 14:21:42 -0500 Subject: [PATCH 135/141] [Cloud Security] Added 'x-elastic-internal-origin' to agentless axios request headers for Kibana 9.0 (#203188) --- .../services/agents/agentless_agent.test.ts | 1353 +++++++++-------- .../server/services/agents/agentless_agent.ts | 40 +- 2 files changed, 730 insertions(+), 663 deletions(-) diff --git a/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts b/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts index b278cda4fc278..042f9dce7f772 100644 --- a/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts +++ b/x-pack/plugins/fleet/server/services/agents/agentless_agent.test.ts @@ -88,649 +88,6 @@ describe('Agentless Agent service', () => { jest.resetAllMocks(); }); - it('should throw AgentlessAgentConfigError if agentless policy does not support_agentless', async () => { - const soClient = getAgentPolicyCreateMock(); - // ignore unrelated unique name constraint - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com/api/v1/ess', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - }, - }, - }, - } as any); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: false, - } as AgentPolicy) - ).rejects.toThrowError( - new AgentlessAgentConfigError( - 'Agentless agent policy does not have supports_agentless enabled' - ) - ); - }); - - it('should throw AgentlessAgentConfigError if cloud and serverless is not enabled', async () => { - const soClient = getAgentPolicyCreateMock(); - // ignore unrelated unique name constraint - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest - .spyOn(appContextService, 'getCloud') - .mockReturnValue({ isCloudEnabled: false, isServerlessEnabled: false } as any); - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com/api/v1/ess', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - }, - }, - }, - } as any); - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError( - new AgentlessAgentConfigError( - 'Agentless agents are only supported in cloud deployment and serverless projects' - ) - ); - }); - - it('should throw AgentlessAgentConfigError if agentless configuration is not found', async () => { - const soClient = getAgentPolicyCreateMock(); - // ignore unrelated unique name constraint - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getConfig').mockReturnValue({} as any); - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError( - new AgentlessAgentConfigError('missing Agentless API configuration in Kibana') - ); - }); - - it('should throw AgentlessAgentConfigError if fleet hosts are not found', async () => { - const soClient = getAgentPolicyCreateMock(); - // ignore unrelated unique name constraint - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com/api/v1/ess', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - }, - }, - }, - } as any); - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ items: [] } as any); - mockedListEnrollmentApiKeys.mockResolvedValue({ - items: [ - { - id: 'mocked', - policy_id: 'mocked', - api_key: 'mocked', - }, - ], - } as any); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError(new AgentlessAgentConfigError('missing default Fleet server host')); - }); - - it('should throw AgentlessAgentConfigError if enrollment tokens are not found', async () => { - const soClient = getAgentPolicyCreateMock(); - // ignore unrelated unique name constraint - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com/api/v1/ess', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - }, - }, - }, - } as any); - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ - items: [ - { - id: 'mocked', - host: 'http://fleetserver:8220', - active: true, - is_default: true, - }, - ], - } as any); - mockedListEnrollmentApiKeys.mockResolvedValue({ - items: [], - } as any); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError(new AgentlessAgentConfigError('missing Fleet enrollment token')); - }); - - it('should throw an error and log and error when the Agentless API returns a status not handled and not in the 2xx series', async () => { - const soClient = getAgentPolicyCreateMock(); - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - ca: '/path/to/ca', - }, - }, - }, - } as any); - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-server-id', - host: 'http://fleetserver:8220', - active: true, - is_default: true, - host_urls: ['http://fleetserver:8220'], - }, - ], - } as any); - mockedListEnrollmentApiKeys.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-enrollment-token-id', - policy_id: 'mocked-policy-id', - api_key: 'mocked-api-key', - }, - ], - } as any); - // Force axios to throw an AxiosError to simulate an error response - (axios as jest.MockedFunction).mockRejectedValueOnce({ - response: { - status: 999, - data: { - message: 'This is a fake error status that is never to be handled handled', - }, - }, - } as AxiosError); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked-agentless-agent-policy-id', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError(); - - // Assert that the error is logged - expect(mockedLogger.error).toHaveBeenCalledTimes(1); - }); - - it('should throw an error and log and error when the Agentless API returns status 500', async () => { - const soClient = getAgentPolicyCreateMock(); - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - ca: '/path/to/ca', - }, - }, - }, - } as any); - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-server-id', - host: 'http://fleetserver:8220', - active: true, - is_default: true, - host_urls: ['http://fleetserver:8220'], - }, - ], - } as any); - mockedListEnrollmentApiKeys.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-enrollment-token-id', - policy_id: 'mocked-policy-id', - api_key: 'mocked-api-key', - }, - ], - } as any); - // Force axios to throw an AxiosError to simulate an error response - (axios as jest.MockedFunction).mockRejectedValueOnce({ - response: { - status: 500, - data: { - message: 'Internal Server Error', - }, - }, - } as AxiosError); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked-agentless-agent-policy-id', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError(); - - // Assert that the error is logged - expect(mockedLogger.error).toHaveBeenCalledTimes(1); - }); - - it('should throw an error and log and error when the Agentless API returns status 429', async () => { - const soClient = getAgentPolicyCreateMock(); - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - ca: '/path/to/ca', - }, - }, - }, - } as any); - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-server-id', - host: 'http://fleetserver:8220', - active: true, - is_default: true, - host_urls: ['http://fleetserver:8220'], - }, - ], - } as any); - mockedListEnrollmentApiKeys.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-enrollment-token-id', - policy_id: 'mocked-policy-id', - api_key: 'mocked-api-key', - }, - ], - } as any); - // Force axios to throw an AxiosError to simulate an error response - (axios as jest.MockedFunction).mockRejectedValueOnce({ - response: { - status: 429, - data: { - message: 'Limit exceeded', - }, - }, - } as AxiosError); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked-agentless-agent-policy-id', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError(); - - // Assert that the error is logged - expect(mockedLogger.error).toHaveBeenCalledTimes(1); - }); - - it('should throw an error and log and error when the Agentless API returns status 408', async () => { - const soClient = getAgentPolicyCreateMock(); - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - ca: '/path/to/ca', - }, - }, - }, - } as any); - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-server-id', - host: 'http://fleetserver:8220', - active: true, - is_default: true, - host_urls: ['http://fleetserver:8220'], - }, - ], - } as any); - mockedListEnrollmentApiKeys.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-enrollment-token-id', - policy_id: 'mocked-policy-id', - api_key: 'mocked-api-key', - }, - ], - } as any); - // Force axios to throw an AxiosError to simulate an error response - (axios as jest.MockedFunction).mockRejectedValueOnce({ - response: { - status: 408, - data: { - message: 'Request timed out', - }, - }, - } as AxiosError); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked-agentless-agent-policy-id', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError(); - - // Assert that the error is logged - expect(mockedLogger.error).toBeCalledTimes(1); - }); - - it('should throw an error and log and error when the Agentless API returns status 404', async () => { - const soClient = getAgentPolicyCreateMock(); - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - ca: '/path/to/ca', - }, - }, - }, - } as any); - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-server-id', - host: 'http://fleetserver:8220', - active: true, - is_default: true, - host_urls: ['http://fleetserver:8220'], - }, - ], - } as any); - mockedListEnrollmentApiKeys.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-enrollment-token-id', - policy_id: 'mocked-policy-id', - api_key: 'mocked-api-key', - }, - ], - } as any); - // Force axios to throw an AxiosError to simulate an error response - (axios as jest.MockedFunction).mockRejectedValueOnce({ - response: { - status: 404, - data: { - message: 'Not Found', - }, - }, - } as AxiosError); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked-agentless-agent-policy-id', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError(); - - // Assert that the error is logged - expect(mockedLogger.error).toBeCalledTimes(1); - }); - - it('should throw an error and log and error when the Agentless API returns status 403', async () => { - const soClient = getAgentPolicyCreateMock(); - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - ca: '/path/to/ca', - }, - }, - }, - } as any); - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-server-id', - host: 'http://fleetserver:8220', - active: true, - is_default: true, - host_urls: ['http://fleetserver:8220'], - }, - ], - } as any); - mockedListEnrollmentApiKeys.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-enrollment-token-id', - policy_id: 'mocked-policy-id', - api_key: 'mocked-api-key', - }, - ], - } as any); - // Force axios to throw an AxiosError to simulate an error response - (axios as jest.MockedFunction).mockRejectedValueOnce({ - response: { - status: 403, - data: { - message: 'Forbidden', - }, - }, - } as AxiosError); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked-agentless-agent-policy-id', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError(); - - // Assert that the error is logged - expect(mockedLogger.error).toBeCalledTimes(1); - }); - - it('should throw an error and log and error when the Agentless API returns status 401', async () => { - const soClient = getAgentPolicyCreateMock(); - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - ca: '/path/to/ca', - }, - }, - }, - } as any); - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-server-id', - host: 'http://fleetserver:8220', - active: true, - is_default: true, - host_urls: ['http://fleetserver:8220'], - }, - ], - } as any); - mockedListEnrollmentApiKeys.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-enrollment-token-id', - policy_id: 'mocked-policy-id', - api_key: 'mocked-api-key', - }, - ], - } as any); - // Force axios to throw an AxiosError to simulate an error response - (axios as jest.MockedFunction).mockRejectedValueOnce({ - response: { - status: 401, - data: { - message: 'Unauthorized', - }, - }, - } as AxiosError); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked-agentless-agent-policy-id', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError(); - - // Assert that the error is logged - expect(mockedLogger.error).toBeCalledTimes(1); - }); - - it('should throw an error and log and error when the Agentless API returns status 400', async () => { - const soClient = getAgentPolicyCreateMock(); - const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - jest.spyOn(appContextService, 'getConfig').mockReturnValue({ - agentless: { - enabled: true, - api: { - url: 'http://api.agentless.com', - tls: { - certificate: '/path/to/cert', - key: '/path/to/key', - ca: '/path/to/ca', - }, - }, - }, - } as any); - jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-server-id', - host: 'http://fleetserver:8220', - active: true, - is_default: true, - host_urls: ['http://fleetserver:8220'], - }, - ], - } as any); - mockedListEnrollmentApiKeys.mockResolvedValue({ - items: [ - { - id: 'mocked-fleet-enrollment-token-id', - policy_id: 'mocked-policy-id', - api_key: 'mocked-api-key', - }, - ], - } as any); - // Force axios to throw an AxiosError to simulate an error response - (axios as jest.MockedFunction).mockRejectedValueOnce({ - response: { - status: 400, - data: { - message: 'Bad Request', - }, - }, - } as AxiosError); - - await expect( - agentlessAgentService.createAgentlessAgent(esClient, soClient, { - id: 'mocked-agentless-agent-policy-id', - name: 'agentless agent policy', - namespace: 'default', - supports_agentless: true, - } as AgentPolicy) - ).rejects.toThrowError(); - - // Assert that the error is logged - expect(mockedLogger.error).toBeCalledTimes(1); - }); - it('should create agentless agent for ESS', async () => { const returnValue = { id: 'mocked', @@ -1267,4 +624,714 @@ describe('Agentless Agent service', () => { expect.any(Object) ); }); + + it(`should have x-elastic-internal-origin in the headers when the request is internal`, async () => { + const returnValue = { + id: 'mocked', + regional_id: 'mocked', + }; + + (axios as jest.MockedFunction).mockResolvedValueOnce(returnValue); + const soClient = getAgentPolicyCreateMock(); + // ignore unrelated unique name constraint + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + jest + .spyOn(appContextService, 'getKibanaVersion') + .mockReturnValue('mocked-kibana-version-infinite'); + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-fleet-enrollment-policy-id', + api_key: 'mocked-fleet-enrollment-api-key', + }, + ], + } as any); + + await agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy); + + expect(axios).toHaveBeenCalledTimes(1); + expect(axios).toHaveBeenCalledWith( + expect.objectContaining({ + headers: expect.objectContaining({ + 'x-elastic-internal-origin': 'Kibana', + }), + }) + ); + }); + + describe('error handling', () => { + it('should throw AgentlessAgentConfigError if agentless policy does not support_agentless', async () => { + const soClient = getAgentPolicyCreateMock(); + // ignore unrelated unique name constraint + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com/api/v1/ess', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + }, + }, + }, + } as any); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: false, + } as AgentPolicy) + ).rejects.toThrowError( + new AgentlessAgentConfigError( + 'Agentless agent policy does not have supports_agentless enabled' + ) + ); + }); + + it('should throw AgentlessAgentConfigError if cloud and serverless is not enabled', async () => { + const soClient = getAgentPolicyCreateMock(); + // ignore unrelated unique name constraint + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isCloudEnabled: false, isServerlessEnabled: false } as any); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com/api/v1/ess', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + }, + }, + }, + } as any); + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError( + new AgentlessAgentConfigError( + 'Agentless agents are only supported in cloud deployment and serverless projects' + ) + ); + }); + + it('should throw AgentlessAgentConfigError if agentless configuration is not found', async () => { + const soClient = getAgentPolicyCreateMock(); + // ignore unrelated unique name constraint + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({} as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError( + new AgentlessAgentConfigError('missing Agentless API configuration in Kibana') + ); + }); + + it('should throw AgentlessAgentConfigError if fleet hosts are not found', async () => { + const soClient = getAgentPolicyCreateMock(); + // ignore unrelated unique name constraint + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com/api/v1/ess', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + mockedListFleetServerHosts.mockResolvedValue({ items: [] } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked', + policy_id: 'mocked', + api_key: 'mocked', + }, + ], + } as any); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(new AgentlessAgentConfigError('missing default Fleet server host')); + }); + + it('should throw AgentlessAgentConfigError if enrollment tokens are not found', async () => { + const soClient = getAgentPolicyCreateMock(); + // ignore unrelated unique name constraint + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com/api/v1/ess', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + }, + ], + } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [], + } as any); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(new AgentlessAgentConfigError('missing Fleet enrollment token')); + }); + + it('should throw an error and log and error when the Agentless API returns a status not handled and not in the 2xx series', async () => { + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-policy-id', + api_key: 'mocked-api-key', + }, + ], + } as any); + // Force axios to throw an AxiosError to simulate an error response + (axios as jest.MockedFunction).mockRejectedValueOnce({ + response: { + status: 999, + data: { + message: 'This is a fake error status that is never to be handled handled', + }, + }, + } as AxiosError); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(); + + // Assert that the error is logged + expect(mockedLogger.error).toHaveBeenCalledTimes(1); + }); + + it('should throw an error and log and error when the Agentless API returns status 500', async () => { + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-policy-id', + api_key: 'mocked-api-key', + }, + ], + } as any); + // Force axios to throw an AxiosError to simulate an error response + (axios as jest.MockedFunction).mockRejectedValueOnce({ + response: { + status: 500, + data: { + message: 'Internal Server Error', + }, + }, + } as AxiosError); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(); + + // Assert that the error is logged + expect(mockedLogger.error).toHaveBeenCalledTimes(1); + }); + + it('should throw an error and log and error when the Agentless API returns status 429', async () => { + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-policy-id', + api_key: 'mocked-api-key', + }, + ], + } as any); + // Force axios to throw an AxiosError to simulate an error response + (axios as jest.MockedFunction).mockRejectedValueOnce({ + response: { + status: 429, + data: { + message: 'Limit exceeded', + }, + }, + } as AxiosError); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(); + + // Assert that the error is logged + expect(mockedLogger.error).toHaveBeenCalledTimes(1); + }); + + it('should throw an error and log and error when the Agentless API returns status 408', async () => { + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-policy-id', + api_key: 'mocked-api-key', + }, + ], + } as any); + // Force axios to throw an AxiosError to simulate an error response + (axios as jest.MockedFunction).mockRejectedValueOnce({ + response: { + status: 408, + data: { + message: 'Request timed out', + }, + }, + } as AxiosError); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(); + + // Assert that the error is logged + expect(mockedLogger.error).toBeCalledTimes(1); + }); + + it('should throw an error and log and error when the Agentless API returns status 404', async () => { + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-policy-id', + api_key: 'mocked-api-key', + }, + ], + } as any); + // Force axios to throw an AxiosError to simulate an error response + (axios as jest.MockedFunction).mockRejectedValueOnce({ + response: { + status: 404, + data: { + message: 'Not Found', + }, + }, + } as AxiosError); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(); + + // Assert that the error is logged + expect(mockedLogger.error).toBeCalledTimes(1); + }); + + it('should throw an error and log and error when the Agentless API returns status 403', async () => { + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-policy-id', + api_key: 'mocked-api-key', + }, + ], + } as any); + // Force axios to throw an AxiosError to simulate an error response + (axios as jest.MockedFunction).mockRejectedValueOnce({ + response: { + status: 403, + data: { + message: 'Forbidden', + }, + }, + } as AxiosError); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(); + + // Assert that the error is logged + expect(mockedLogger.error).toBeCalledTimes(1); + }); + + it('should throw an error and log and error when the Agentless API returns status 401', async () => { + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-policy-id', + api_key: 'mocked-api-key', + }, + ], + } as any); + // Force axios to throw an AxiosError to simulate an error response + (axios as jest.MockedFunction).mockRejectedValueOnce({ + response: { + status: 401, + data: { + message: 'Unauthorized', + }, + }, + } as AxiosError); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(); + + // Assert that the error is logged + expect(mockedLogger.error).toBeCalledTimes(1); + }); + + it('should throw an error and log and error when the Agentless API returns status 400', async () => { + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + mockedListFleetServerHosts.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-server-id', + host: 'http://fleetserver:8220', + active: true, + is_default: true, + host_urls: ['http://fleetserver:8220'], + }, + ], + } as any); + mockedListEnrollmentApiKeys.mockResolvedValue({ + items: [ + { + id: 'mocked-fleet-enrollment-token-id', + policy_id: 'mocked-policy-id', + api_key: 'mocked-api-key', + }, + ], + } as any); + // Force axios to throw an AxiosError to simulate an error response + (axios as jest.MockedFunction).mockRejectedValueOnce({ + response: { + status: 400, + data: { + message: 'Bad Request', + }, + }, + } as AxiosError); + + await expect( + agentlessAgentService.createAgentlessAgent(esClient, soClient, { + id: 'mocked-agentless-agent-policy-id', + name: 'agentless agent policy', + namespace: 'default', + supports_agentless: true, + } as AgentPolicy) + ).rejects.toThrowError(); + + // Assert that the error is logged + expect(mockedLogger.error).toBeCalledTimes(1); + }); + }); }); diff --git a/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts b/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts index 3cd885beba455..3d6c8bba563ab 100644 --- a/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts +++ b/x-pack/plugins/fleet/server/services/agents/agentless_agent.ts @@ -113,16 +113,7 @@ class AgentlessAgentService { labels, }, method: 'POST', - headers: { - 'Content-type': 'application/json', - 'X-Request-ID': traceId, - }, - httpsAgent: new https.Agent({ - rejectUnauthorized: tlsConfig.rejectUnauthorized, - cert: tlsConfig.certificate, - key: tlsConfig.key, - ca: tlsConfig.certificateAuthorities, - }), + ...this.getHeaders(tlsConfig, traceId), }; const cloudSetup = appContextService.getCloud(); @@ -157,6 +148,7 @@ class AgentlessAgentService { public async deleteAgentlessAgent(agentlessPolicyId: string) { const logger = appContextService.getLogger(); + const traceId = apm.currentTransaction?.traceparent; const agentlessConfig = appContextService.getConfig()?.agentless; const tlsConfig = this.createTlsConfig(agentlessConfig); const requestConfig = { @@ -165,17 +157,9 @@ class AgentlessAgentService { `/deployments/${agentlessPolicyId}` ), method: 'DELETE', - headers: { - 'Content-type': 'application/json', - }, - httpsAgent: new https.Agent({ - rejectUnauthorized: tlsConfig.rejectUnauthorized, - cert: tlsConfig.certificate, - key: tlsConfig.key, - ca: tlsConfig.certificateAuthorities, - }), + ...this.getHeaders(tlsConfig, traceId), }; - const traceId = apm.currentTransaction?.traceparent; + const errorMetadata: LogMeta = { trace: { id: traceId, @@ -220,6 +204,22 @@ class AgentlessAgentService { return response; } + private getHeaders(tlsConfig: SslConfig, traceId: string | undefined) { + return { + headers: { + 'Content-type': 'application/json', + 'X-Request-ID': traceId, + 'x-elastic-internal-origin': 'Kibana', + }, + httpsAgent: new https.Agent({ + rejectUnauthorized: tlsConfig.rejectUnauthorized, + cert: tlsConfig.certificate, + key: tlsConfig.key, + ca: tlsConfig.certificateAuthorities, + }), + }; + } + private getAgentlessTags(agentlessAgentPolicy: AgentPolicy) { if (!agentlessAgentPolicy.global_data_tags) { return undefined; From 0b9512c1904c44607809d5562aaee16539fab281 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Fri, 6 Dec 2024 15:06:59 -0700 Subject: [PATCH 136/141] [KibanaRootContextProvider] destructure the params to KibanaEuiProvider (#203303) ## Summary Addresses: https://github.com/elastic/kibana/pull/202606#discussion_r1871947907 This discards the > unused portions of core, before adding them to the context value, but still allow people to pass the entire construct if we were to need something else cc @clintandrewhall ---- ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. **none** ### Identify risks Does this PR introduce any risks? For example, consider risks like hard to test bugs, performance regression, potential of data loss. Describe the risk, its severity, and mitigation for each identified risk. Invite stakeholders and evaluate how to proceed before merging. **none** --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- packages/react/kibana_context/render/render_provider.tsx | 8 ++++++-- packages/react/kibana_context/root/root_provider.test.tsx | 6 ------ packages/react/kibana_context/root/root_provider.tsx | 3 ++- packages/react/kibana_context/root/tsconfig.json | 1 - 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/react/kibana_context/render/render_provider.tsx b/packages/react/kibana_context/render/render_provider.tsx index a597311c0e17a..233abb42834b9 100644 --- a/packages/react/kibana_context/render/render_provider.tsx +++ b/packages/react/kibana_context/render/render_provider.tsx @@ -25,9 +25,13 @@ export type KibanaRenderContextProviderProps = Omit > = ({ children, ...props }) => { + const { analytics, i18n, theme, userProfile, colorMode, modify } = props; return ( - - + + {children} diff --git a/packages/react/kibana_context/root/root_provider.test.tsx b/packages/react/kibana_context/root/root_provider.test.tsx index 312b366797a36..405823a9b823c 100644 --- a/packages/react/kibana_context/root/root_provider.test.tsx +++ b/packages/react/kibana_context/root/root_provider.test.tsx @@ -15,8 +15,6 @@ import { useEuiTheme } from '@elastic/eui'; import type { UseEuiTheme } from '@elastic/eui'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import type { KibanaTheme } from '@kbn/react-kibana-context-common'; -import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; -import { analyticsServiceMock } from '@kbn/core-analytics-browser-mocks'; import { i18nServiceMock } from '@kbn/core-i18n-browser-mocks'; import { I18nStart } from '@kbn/core-i18n-browser'; import type { UserProfileService } from '@kbn/core-user-profile-browser'; @@ -26,12 +24,10 @@ import { KibanaRootContextProvider } from './root_provider'; describe('KibanaRootContextProvider', () => { let euiTheme: UseEuiTheme | undefined; let i18nMock: I18nStart; - let analytics: AnalyticsServiceStart; let userProfile: UserProfileService; beforeEach(() => { euiTheme = undefined; - analytics = analyticsServiceMock.createAnalyticsServiceStart(); i18nMock = i18nServiceMock.createStartContract(); userProfile = userProfileServiceMock.createStart(); }); @@ -66,7 +62,6 @@ describe('KibanaRootContextProvider', () => { const wrapper = mountWithIntl( { const wrapper = mountWithIntl( {children}; } else { + const { theme, userProfile, globalStyles, colorMode, modify } = props; return ( - + {children} ); diff --git a/packages/react/kibana_context/root/tsconfig.json b/packages/react/kibana_context/root/tsconfig.json index 6c67c97861c11..a7606025552b8 100644 --- a/packages/react/kibana_context/root/tsconfig.json +++ b/packages/react/kibana_context/root/tsconfig.json @@ -22,7 +22,6 @@ "@kbn/core-i18n-browser", "@kbn/core-base-common", "@kbn/core-analytics-browser", - "@kbn/core-analytics-browser-mocks", "@kbn/core-user-profile-browser", "@kbn/core-user-profile-browser-mocks", ] From 138aaccabd98c3971ad7e86f2c722a02b967946e Mon Sep 17 00:00:00 2001 From: Brad White Date: Fri, 6 Dec 2024 17:52:17 -0700 Subject: [PATCH 137/141] [Ops] Combine some Renovate groups. Disable webpack, ts (#203350) ## Summary Combine some Renovate groups. Disable TS group. Closes #189415. Disable Webpack group until #191106 is finished. --- renovate.json | 89 +++++---------------------------------------------- 1 file changed, 8 insertions(+), 81 deletions(-) diff --git a/renovate.json b/renovate.json index 71f80e1b67e11..69a390b5b1127 100644 --- a/renovate.json +++ b/renovate.json @@ -790,7 +790,7 @@ "release_note:skip" ], "minimumReleaseAge": "7 days", - "enabled": true + "enabled": false }, { "groupName": "json-stable-stringify", @@ -852,26 +852,6 @@ "minimumReleaseAge": "7 days", "enabled": true }, - { - "groupName": "loader-utils", - "matchDepNames": [ - "loader-utils", - "@types/loader-utils" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip", - "backport:all-open" - ], - "minimumReleaseAge": "7 days", - "enabled": true - }, { "groupName": "micromatch/minimatch", "matchDepNames": [ @@ -1122,25 +1102,6 @@ "minimumReleaseAge": "7 days", "enabled": true }, - { - "groupName": "@statoscope/webpack-plugin", - "matchDepNames": [ - "@statoscope/webpack-plugin" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "backport:all-open", - "release_note:skip" - ], - "minimumReleaseAge": "7 days", - "enabled": true - }, { "groupName": "mocha", "matchDepNames": [ @@ -1355,6 +1316,7 @@ "clean-webpack-plugin", "css-loader", "file-loader", + "loader-utils", "mini-css-extract-plugin", "postcss-loader", "raw-loader", @@ -1369,6 +1331,8 @@ "webpack-merge", "webpack-sources", "webpack-visualizer-plugin2", + "@statoscope/webpack-plugin", + "@types/loader-utils", "@types/webpack", "@types/webpack-bundle-analyzer", "@types/webpack-env", @@ -1387,7 +1351,7 @@ "release_note:skip" ], "minimumReleaseAge": "7 days", - "enabled": true + "enabled": false }, { "groupName": "yargs", @@ -1435,7 +1399,8 @@ "groupName": "package.json/yarn.lock utils", "matchDepNames": [ "@yarnpkg/lockfile", - "sort-package-json" + "sort-package-json", + "yarn-deduplicate" ], "reviewers": [ "team:kibana-operations" @@ -1566,25 +1531,6 @@ "minimumReleaseAge": "7 days", "enabled": true }, - { - "groupName": "expect", - "matchDepNames": [ - "expect" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "backport:all-open", - "release_note:skip" - ], - "minimumReleaseAge": "7 days", - "enabled": true - }, { "groupName": "expiry-js", "matchDepNames": [ @@ -1851,25 +1797,6 @@ "minimumReleaseAge": "7 days", "enabled": true }, - { - "groupName": "yarn-deduplicate", - "matchDepNames": [ - "yarn-deduplicate" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "backport:all-open", - "release_note:skip" - ], - "minimumReleaseAge": "7 days", - "enabled": true - }, { "groupName": "http2", "matchDepNames": [ @@ -2527,4 +2454,4 @@ "datasourceTemplate": "docker" } ] -} \ No newline at end of file +} From 076f04960e7147f772c89cce2137104ef3bf480a Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Sat, 7 Dec 2024 03:33:53 +0000 Subject: [PATCH 138/141] skip flaky suite (#203346) --- .../fleet_api_integration/apis/agent_policy/agent_policy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts index d3a808a3cd4bd..30ac197db781f 100644 --- a/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts +++ b/x-pack/test/fleet_api_integration/apis/agent_policy/agent_policy.ts @@ -160,7 +160,8 @@ export default function (providerContext: FtrProviderContext) { }); }); - describe('POST /api/fleet/agent_policies', () => { + // FLAKY: https://github.com/elastic/kibana/issues/203346 + describe.skip('POST /api/fleet/agent_policies', () => { let systemPkgVersion: string; before(async () => { await esArchiver.load('x-pack/test/functional/es_archives/fleet/empty_fleet_server'); From f60b6fbb39e9a66a042c7887fd12cdae3ef58879 Mon Sep 17 00:00:00 2001 From: Matthew Kime Date: Sat, 7 Dec 2024 23:48:30 -0600 Subject: [PATCH 139/141] [index management] Remove unfreeze index test since the api is deprecated and freezing is unavailable (#198746) ## Summary Remove the `unfreeze` test since the api is deprecated and its essentially a noop. More info - https://www.elastic.co/guide/en/elasticsearch/reference/current/unfreeze-index-api.html --- .../apis/management/index_management/indices.ts | 15 --------------- .../index_management/lib/indices.api.ts | 3 --- 2 files changed, 18 deletions(-) diff --git a/x-pack/test/api_integration/apis/management/index_management/indices.ts b/x-pack/test/api_integration/apis/management/index_management/indices.ts index aa2ff5966c4df..8ab8396b8d46b 100644 --- a/x-pack/test/api_integration/apis/management/index_management/indices.ts +++ b/x-pack/test/api_integration/apis/management/index_management/indices.ts @@ -22,7 +22,6 @@ export default function ({ getService }: FtrProviderContext) { flushIndex, refreshIndex, forceMerge, - unfreeze, list, reload, clearCache, @@ -151,20 +150,6 @@ export default function ({ getService }: FtrProviderContext) { }); }); - describe('unfreeze', () => { - it('should unfreeze an index', async () => { - const index = await createIndex(); - - // Even if the index is already unfrozen, calling the unfreeze api - // will have no effect on it and will return a 200. - await unfreeze(index).expect(200); - const { - body: [cat2], - } = await catIndex(index, 'sth'); - expect(cat2.sth).to.be('false'); - }); - }); - describe('list', function () { it('should list all the indices with the expected properties and data enrichers', async function () { // Create an index that we can assert against diff --git a/x-pack/test/api_integration/apis/management/index_management/lib/indices.api.ts b/x-pack/test/api_integration/apis/management/index_management/lib/indices.api.ts index d75d3ec0527b6..321c7d4902cde 100644 --- a/x-pack/test/api_integration/apis/management/index_management/lib/indices.api.ts +++ b/x-pack/test/api_integration/apis/management/index_management/lib/indices.api.ts @@ -40,8 +40,6 @@ export function indicesApi(getService: FtrProviderContext['getService']) { const forceMerge = (index: string, args?: { maxNumSegments: number }) => executeActionOnIndices({ index, urlParam: 'forcemerge', args }); - const unfreeze = (index: string) => executeActionOnIndices({ index, urlParam: 'unfreeze' }); - const clearCache = (index: string) => executeActionOnIndices({ index, urlParam: 'clear_cache' }); const list = () => supertest.get(`${API_BASE_PATH}/indices`); @@ -56,7 +54,6 @@ export function indicesApi(getService: FtrProviderContext['getService']) { flushIndex, refreshIndex, forceMerge, - unfreeze, list, reload, clearCache, From ee91b88e424cf0722b1325433a6f43a527b43bb9 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Sun, 8 Dec 2024 18:09:22 +1100 Subject: [PATCH 140/141] [api-docs] 2024-12-08 Daily api_docs build (#203356) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/915 --- api_docs/actions.mdx | 2 +- api_docs/advanced_settings.mdx | 2 +- .../ai_assistant_management_selection.mdx | 2 +- api_docs/aiops.mdx | 2 +- api_docs/alerting.mdx | 2 +- api_docs/apm.mdx | 2 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_inventory.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.devdocs.json | 4 +- api_docs/data.mdx | 2 +- api_docs/data_quality.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_usage.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 2 +- api_docs/deprecations_by_plugin.mdx | 4 +- api_docs/deprecations_by_team.mdx | 2 +- api_docs/dev_tools.mdx | 2 +- api_docs/discover.mdx | 2 +- api_docs/discover_enhanced.mdx | 2 +- api_docs/discover_shared.mdx | 2 +- api_docs/ecs_data_quality_dashboard.mdx | 2 +- api_docs/elastic_assistant.mdx | 2 +- api_docs/embeddable.mdx | 2 +- api_docs/embeddable_enhanced.mdx | 2 +- api_docs/encrypted_saved_objects.mdx | 2 +- api_docs/enterprise_search.mdx | 2 +- api_docs/entities_data_access.devdocs.json | 2 +- api_docs/entities_data_access.mdx | 2 +- api_docs/entity_manager.devdocs.json | 80 +- api_docs/entity_manager.mdx | 2 +- api_docs/es_ui_shared.mdx | 2 +- api_docs/esql.mdx | 2 +- api_docs/esql_data_grid.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/fields_metadata.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/inference.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/integration_assistant.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/inventory.mdx | 2 +- api_docs/investigate.mdx | 2 +- api_docs/investigate_app.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_ai_assistant.mdx | 2 +- api_docs/kbn_ai_assistant_common.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_log_pattern_analysis.mdx | 2 +- api_docs/kbn_aiops_log_rate_analysis.mdx | 2 +- .../kbn_alerting_api_integration_helpers.mdx | 2 +- api_docs/kbn_alerting_comparators.mdx | 2 +- api_docs/kbn_alerting_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_grouping.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.mdx | 2 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_types.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_avc_banner.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cbor.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_cloud_security_posture.mdx | 2 +- .../kbn_cloud_security_posture_common.mdx | 2 +- api_docs/kbn_cloud_security_posture_graph.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...ement_content_insights_public.devdocs.json | 31 +- ...ent_management_content_insights_public.mdx | 4 +- ...ent_management_content_insights_server.mdx | 2 +- ...bn_content_management_favorites_common.mdx | 2 +- ...bn_content_management_favorites_public.mdx | 2 +- ...bn_content_management_favorites_server.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...agement_table_list_view_table.devdocs.json | 16 + ...ntent_management_table_list_view_table.mdx | 4 +- ...tent_management_user_profiles.devdocs.json | 60 +- .../kbn_content_management_user_profiles.mdx | 4 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_browser.mdx | 2 +- ...bn_core_feature_flags_browser_internal.mdx | 2 +- .../kbn_core_feature_flags_browser_mocks.mdx | 2 +- api_docs/kbn_core_feature_flags_server.mdx | 2 +- ...kbn_core_feature_flags_server_internal.mdx | 2 +- .../kbn_core_feature_flags_server_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server_utils.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.mdx | 2 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- .../kbn_discover_contextual_components.mdx | 2 +- api_docs/kbn_discover_utils.devdocs.json | 15 - api_docs/kbn_discover_utils.mdx | 4 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_entities_schema.devdocs.json | 102 +- api_docs/kbn_entities_schema.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.devdocs.json | 10848 +--------------- api_docs/kbn_esql_ast.mdx | 4 +- api_docs/kbn_esql_editor.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- ..._esql_validation_autocomplete.devdocs.json | 12 + api_docs/kbn_esql_validation_autocomplete.mdx | 2 +- api_docs/kbn_event_annotation_common.mdx | 2 +- api_docs/kbn_event_annotation_components.mdx | 2 +- api_docs/kbn_expandable_flyout.mdx | 2 +- api_docs/kbn_field_types.mdx | 2 +- api_docs/kbn_field_utils.mdx | 2 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_gen_ai_functional_testing.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_grid_layout.mdx | 2 +- api_docs/kbn_grouping.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_adapter.mdx | 2 +- ...dex_lifecycle_management_common_shared.mdx | 2 +- .../kbn_index_management_shared_types.mdx | 2 +- api_docs/kbn_inference_common.mdx | 2 +- api_docs/kbn_inference_integration_flyout.mdx | 2 +- api_docs/kbn_infra_forge.mdx | 2 +- api_docs/kbn_interpreter.mdx | 2 +- api_docs/kbn_investigation_shared.mdx | 2 +- api_docs/kbn_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_item_buffer.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_json_schemas.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- api_docs/kbn_language_documentation.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- ...nagement_settings_application.devdocs.json | 4 +- .../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 +- .../kbn_management_settings_ids.devdocs.json | 15 - api_docs/kbn_management_settings_ids.mdx | 4 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_manifest.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_field_stats_flyout.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_parse_interval.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_time_buckets.mdx | 2 +- api_docs/kbn_ml_trained_models_utils.mdx | 2 +- api_docs/kbn_ml_ui_actions.mdx | 2 +- api_docs/kbn_ml_url_state.mdx | 2 +- api_docs/kbn_ml_validators.mdx | 2 +- api_docs/kbn_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- api_docs/kbn_object_versioning_utils.mdx | 2 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_rule_utils.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_observability_logs_overview.mdx | 2 +- ...kbn_observability_synthetics_test_data.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_product_doc_artifact_builder.mdx | 2 +- api_docs/kbn_product_doc_common.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_hooks.mdx | 2 +- api_docs/kbn_react_kibana_context_common.mdx | 2 +- api_docs/kbn_react_kibana_context_render.mdx | 2 +- api_docs/kbn_react_kibana_context_root.mdx | 2 +- api_docs/kbn_react_kibana_context_styled.mdx | 2 +- api_docs/kbn_react_kibana_context_theme.mdx | 2 +- api_docs/kbn_react_kibana_mount.mdx | 2 +- api_docs/kbn_recently_accessed.mdx | 2 +- api_docs/kbn_repo_file_maps.mdx | 2 +- api_docs/kbn_repo_linter.mdx | 2 +- api_docs/kbn_repo_path.mdx | 2 +- api_docs/kbn_repo_source_classifier.mdx | 2 +- api_docs/kbn_reporting_common.mdx | 2 +- api_docs/kbn_reporting_csv_share_panel.mdx | 2 +- api_docs/kbn_reporting_export_types_csv.mdx | 2 +- .../kbn_reporting_export_types_csv_common.mdx | 2 +- api_docs/kbn_reporting_export_types_pdf.mdx | 2 +- .../kbn_reporting_export_types_pdf_common.mdx | 2 +- api_docs/kbn_reporting_export_types_png.mdx | 2 +- .../kbn_reporting_export_types_png_common.mdx | 2 +- api_docs/kbn_reporting_mocks_server.mdx | 2 +- api_docs/kbn_reporting_public.mdx | 2 +- api_docs/kbn_reporting_server.mdx | 2 +- api_docs/kbn_resizable_layout.mdx | 2 +- .../kbn_response_ops_feature_flag_service.mdx | 2 +- api_docs/kbn_response_ops_rule_form.mdx | 2 +- api_docs/kbn_response_ops_rule_params.mdx | 2 +- api_docs/kbn_rison.mdx | 2 +- api_docs/kbn_rollup.mdx | 2 +- api_docs/kbn_router_to_openapispec.mdx | 2 +- api_docs/kbn_router_utils.mdx | 2 +- api_docs/kbn_rrule.mdx | 2 +- api_docs/kbn_rule_data_utils.mdx | 2 +- api_docs/kbn_saved_objects_settings.mdx | 2 +- api_docs/kbn_saved_search_component.mdx | 2 +- api_docs/kbn_scout.mdx | 2 +- api_docs/kbn_screenshotting_server.mdx | 2 +- api_docs/kbn_search_api_keys_components.mdx | 2 +- api_docs/kbn_search_api_keys_server.mdx | 2 +- api_docs/kbn_search_api_panels.mdx | 2 +- api_docs/kbn_search_connectors.mdx | 2 +- api_docs/kbn_search_errors.mdx | 2 +- api_docs/kbn_search_index_documents.mdx | 2 +- api_docs/kbn_search_response_warnings.mdx | 2 +- api_docs/kbn_search_shared_ui.mdx | 2 +- api_docs/kbn_search_types.mdx | 2 +- api_docs/kbn_security_api_key_management.mdx | 2 +- api_docs/kbn_security_authorization_core.mdx | 2 +- ...kbn_security_authorization_core_common.mdx | 2 +- api_docs/kbn_security_form_components.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- ..._security_plugin_types_server.devdocs.json | 10 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- .../kbn_security_role_management_model.mdx | 2 +- ...kbn_security_solution_distribution_bar.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- api_docs/kbn_security_ui_components.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- .../kbn_server_route_repository_client.mdx | 2 +- .../kbn_server_route_repository_utils.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_table_persist.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_sse_utils.mdx | 2 +- api_docs/kbn_sse_utils_client.mdx | 2 +- api_docs/kbn_sse_utils_server.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_synthetics_e2e.mdx | 2 +- api_docs/kbn_synthetics_private_location.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_transpose_utils.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_try_in_console.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.devdocs.json | 32 +- api_docs/kbn_unified_data_table.mdx | 4 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_unsaved_changes_prompt.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/llm_tasks.mdx | 2 +- api_docs/logs_data_access.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.mdx | 2 +- api_docs/maps_ems.mdx | 2 +- api_docs/metrics_data_access.mdx | 2 +- api_docs/ml.mdx | 2 +- api_docs/mock_idp_plugin.mdx | 2 +- api_docs/monitoring.mdx | 2 +- api_docs/monitoring_collection.mdx | 2 +- api_docs/navigation.mdx | 2 +- api_docs/newsfeed.mdx | 2 +- api_docs/no_data_page.mdx | 2 +- api_docs/notifications.mdx | 2 +- api_docs/observability.mdx | 2 +- api_docs/observability_a_i_assistant.mdx | 2 +- api_docs/observability_a_i_assistant_app.mdx | 2 +- .../observability_ai_assistant_management.mdx | 2 +- api_docs/observability_logs_explorer.mdx | 2 +- api_docs/observability_onboarding.mdx | 2 +- api_docs/observability_shared.mdx | 2 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 18 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/product_doc_base.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.mdx | 2 +- api_docs/runtime_fields.mdx | 2 +- api_docs/saved_objects.mdx | 2 +- api_docs/saved_objects_finder.mdx | 2 +- api_docs/saved_objects_management.mdx | 2 +- api_docs/saved_objects_tagging.mdx | 2 +- api_docs/saved_objects_tagging_oss.mdx | 2 +- api_docs/saved_search.mdx | 2 +- api_docs/screenshot_mode.mdx | 2 +- api_docs/screenshotting.mdx | 2 +- api_docs/search_assistant.mdx | 2 +- api_docs/search_connectors.mdx | 2 +- api_docs/search_homepage.mdx | 2 +- api_docs/search_indices.mdx | 2 +- api_docs/search_inference_endpoints.mdx | 2 +- api_docs/search_navigation.mdx | 2 +- api_docs/search_notebooks.mdx | 2 +- api_docs/search_playground.mdx | 2 +- api_docs/security.devdocs.json | 10 +- api_docs/security.mdx | 2 +- api_docs/security_solution.mdx | 2 +- api_docs/security_solution_ess.mdx | 2 +- api_docs/security_solution_serverless.mdx | 2 +- api_docs/serverless.mdx | 2 +- api_docs/serverless_observability.mdx | 2 +- api_docs/serverless_search.mdx | 2 +- api_docs/session_view.mdx | 2 +- api_docs/share.mdx | 2 +- api_docs/slo.mdx | 2 +- api_docs/snapshot_restore.mdx | 2 +- api_docs/spaces.mdx | 2 +- api_docs/stack_alerts.mdx | 2 +- api_docs/stack_connectors.mdx | 2 +- api_docs/streams.mdx | 2 +- api_docs/streams_app.mdx | 2 +- api_docs/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.devdocs.json | 4 +- 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 +- 788 files changed, 1021 insertions(+), 11800 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 38898cd0f2342..3f7481af84f12 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 9042b942226e0..ee6c77672e326 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index c6f1f9830fc47..73181a3ed5d69 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-12-06 +date: 2024-12-08 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 411375f8423b6..a5cadb9af25ee 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2024-12-06 +date: 2024-12-08 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 89014179c53ec..9558dc77a13f7 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2024-12-06 +date: 2024-12-08 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 a07f102645adc..f7f749aae8885 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2024-12-06 +date: 2024-12-08 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 5d432f4600637..c5aaaa585b48f 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_inventory.mdx b/api_docs/asset_inventory.mdx index b7e7385f57e1d..afed5e1bb072a 100644 --- a/api_docs/asset_inventory.mdx +++ b/api_docs/asset_inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetInventory title: "assetInventory" image: https://source.unsplash.com/400x175/?github description: API docs for the assetInventory plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetInventory'] --- import assetInventoryObj from './asset_inventory.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 70fa0bae84cb2..6cd7348b32ea5 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2024-12-06 +date: 2024-12-08 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 486b4b2b35884..f2866e2af2778 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-12-06 +date: 2024-12-08 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 48e2afaf769c3..7d254adef8d54 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2024-12-06 +date: 2024-12-08 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 57c2be12acc3e..b25b4a3880531 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2024-12-06 +date: 2024-12-08 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 7f94bdf3cdbf0..17127d241de67 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2024-12-06 +date: 2024-12-08 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 b16cfba059b8c..a22f96691d3fe 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2024-12-06 +date: 2024-12-08 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 e7ac94de405f0..8a2301bccad1f 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2024-12-06 +date: 2024-12-08 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 b36c79dd8d5d0..e831994269a70 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 2e50e049d4ced..09e84a2d3b7c1 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2024-12-06 +date: 2024-12-08 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 3be4072f9c939..5cd06f2f0477e 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2024-12-06 +date: 2024-12-08 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 0c8ee77152773..ae92cbd502192 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-12-06 +date: 2024-12-08 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 813552ae30e3a..aed42d679c101 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2024-12-06 +date: 2024-12-08 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 067b3bbb6b3b9..5091c7c6faad1 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index da44b997606df..08c0aa8c762f9 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2024-12-06 +date: 2024-12-08 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 1afd294d10477..db12aa3b81dde 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index 7d1f8ed4dc732..23287ba6c9691 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -2726,7 +2726,7 @@ "section": "def-public.DataPublicPluginStart", "text": "DataPublicPluginStart" }, - ">, { bfetch, expressions, uiActions, usageCollection, inspector, fieldFormats, management, }: ", + ">, { expressions, uiActions, usageCollection, inspector, fieldFormats, management, }: ", "DataSetupDependencies", ") => ", { @@ -2778,7 +2778,7 @@ "id": "def-public.DataPublicPlugin.setup.$2", "type": "Object", "tags": [], - "label": "{\n bfetch,\n expressions,\n uiActions,\n usageCollection,\n inspector,\n fieldFormats,\n management,\n }", + "label": "{\n expressions,\n uiActions,\n usageCollection,\n inspector,\n fieldFormats,\n management,\n }", "description": [], "signature": [ "DataSetupDependencies" diff --git a/api_docs/data.mdx b/api_docs/data.mdx index 9c73daaf79d44..e6904c7c5de2a 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 0fa43c2a0fc4c..57ba7e25af2b8 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 9a56270a72be5..3cbab1704dd53 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2024-12-06 +date: 2024-12-08 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 2490d814b8f88..609470acbbe3b 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index cbda7b2f49134..4cdfc67920b40 100644 --- a/api_docs/data_usage.mdx +++ b/api_docs/data_usage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataUsage title: "dataUsage" image: https://source.unsplash.com/400x175/?github description: API docs for the dataUsage plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataUsage'] --- import dataUsageObj from './data_usage.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 43e1206db6b3d..cc7a051bc69b1 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2024-12-06 +date: 2024-12-08 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 55fa073e6baa0..ef42e057a090e 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2024-12-06 +date: 2024-12-08 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 7f3c2d7e228f7..ba649b6a4718d 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2024-12-06 +date: 2024-12-08 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 52a3b22dad93f..ace7849ec1462 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-12-06 +date: 2024-12-08 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 d2302868ee1c1..1d865968318df 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-12-06 +date: 2024-12-08 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 59f173109cf03..a4d28ee81ee74 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-12-06 +date: 2024-12-08 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 07a2f008d4a09..5005393c40baf 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index ee9ec20cfbbcc..e3e4621101a5d 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -802,7 +802,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [enable.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/entity_manager/server/routes/enablement/enable.ts#:~:text=authc), [disable.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/entity_manager/server/routes/enablement/disable.ts#:~:text=authc), [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [enable.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/entity_manager/server/routes/enablement/enable.ts#:~:text=authc), [disable.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/entity_manager/server/routes/enablement/disable.ts#:~:text=authc) | - | +| | [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [enable.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/enable.ts#:~:text=authc), [disable.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/disable.ts#:~:text=authc), [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [api_key.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts#:~:text=authc), [enable.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/enable.ts#:~:text=authc), [disable.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/disable.ts#:~:text=authc) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 4f83a5a2eb961..4cac449227ff4 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 02a38018942c0..a3d2152a9c484 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2024-12-06 +date: 2024-12-08 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 6a199fffcf7e3..2433fb089d56a 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2024-12-06 +date: 2024-12-08 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 858c28084de4c..5324c4656a1b4 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 3f88887bd8be2..6dc8e971e6adc 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index fa27948b97003..50b5aee73a8ce 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-12-06 +date: 2024-12-08 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 eec6618a2433c..023faf8657902 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-12-06 +date: 2024-12-08 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 3dbd1a8a2225f..49dbd6169352e 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2024-12-06 +date: 2024-12-08 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 445a3ba3206be..aa3d5f30bdedc 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2024-12-06 +date: 2024-12-08 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 60381fa29a8ba..3b07e09d28037 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2024-12-06 +date: 2024-12-08 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 26040eaaf8e47..18ed29a3510a6 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.devdocs.json b/api_docs/entities_data_access.devdocs.json index 26fd0abf8e82b..3e307a3de60b5 100644 --- a/api_docs/entities_data_access.devdocs.json +++ b/api_docs/entities_data_access.devdocs.json @@ -25,7 +25,7 @@ "signature": [ "void" ], - "path": "x-pack/plugins/observability_solution/entities_data_access/server/plugin.ts", + "path": "x-pack/solutions/observability/plugins/observability_solution/entities_data_access/server/plugin.ts", "deprecated": false, "trackAdoption": false, "lifecycle": "start", diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index 5018793959c74..099ae5c27ddfe 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.devdocs.json b/api_docs/entity_manager.devdocs.json index e08d74b938581..9359e3ca7c1d7 100644 --- a/api_docs/entity_manager.devdocs.json +++ b/api_docs/entity_manager.devdocs.json @@ -9,7 +9,7 @@ "tags": [], "label": "EntityClient", "description": [], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -855,7 +855,7 @@ }, " | undefined; }; }, TEndpoint>>" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "returnComment": [], @@ -949,7 +949,7 @@ "signature": [ "any" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -978,7 +978,7 @@ }, "" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -996,7 +996,7 @@ "signature": [ "() => Promise<{ enabled: boolean; reason: string; }>" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -1012,7 +1012,7 @@ "signature": [ "(query?: { installOnly?: boolean | \"true\" | \"false\" | undefined; } | undefined) => Promise<{ success: boolean; reason: string; message: string; }>" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1026,7 +1026,7 @@ "signature": [ "{ installOnly?: boolean | \"true\" | \"false\" | undefined; } | undefined" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -1044,7 +1044,7 @@ "signature": [ "(query?: { deleteData?: boolean | \"true\" | \"false\" | undefined; } | undefined) => Promise<{ success: boolean; reason: string; message: string; }>" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1058,7 +1058,7 @@ "signature": [ "{ deleteData?: boolean | \"true\" | \"false\" | undefined; } | undefined" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "isRequired": false @@ -1086,7 +1086,7 @@ "EntityDefinitionWithState", "[]; }>" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1100,7 +1100,7 @@ "signature": [ "string" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1118,7 +1118,7 @@ "signature": [ "(entityInstance: { entity: Pick<{ id: string; type: string; schema_version: string; identity_fields: string | string[]; display_name: string; definition_version: string; definition_id: string; last_seen_timestamp: string; metrics?: Record | undefined; }, \"identity_fields\">; } & Required) => string" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1132,7 +1132,7 @@ "signature": [ "{ entity: Pick<{ id: string; type: string; schema_version: string; identity_fields: string | string[]; display_name: string; definition_version: string; definition_id: string; last_seen_timestamp: string; metrics?: Record | undefined; }, \"identity_fields\">; } & Required" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1150,7 +1150,7 @@ "signature": [ "(entityInstance: { entity: Pick<{ id: string; type: string; schema_version: string; identity_fields: string | string[]; display_name: string; definition_version: string; definition_id: string; last_seen_timestamp: string; metrics?: Record | undefined; }, \"identity_fields\">; } & Required) => Record" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1164,7 +1164,7 @@ "signature": [ "{ entity: Pick<{ id: string; type: string; schema_version: string; identity_fields: string | string[]; display_name: string; definition_version: string; definition_id: string; last_seen_timestamp: string; metrics?: Record | undefined; }, \"identity_fields\">; } & Required" ], - "path": "x-pack/plugins/entity_manager/public/lib/entity_client.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/entity_client.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1192,7 +1192,7 @@ }, " extends Error" ], - "path": "x-pack/plugins/entity_manager/public/lib/errors.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/errors.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1206,7 +1206,7 @@ "signature": [ "any" ], - "path": "x-pack/plugins/entity_manager/public/lib/errors.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/errors.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1220,7 +1220,7 @@ "signature": [ "string" ], - "path": "x-pack/plugins/entity_manager/public/lib/errors.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/lib/errors.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -1246,7 +1246,7 @@ "signature": [ "\"entityManager\"" ], - "path": "x-pack/plugins/entity_manager/public/index.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/index.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1261,7 +1261,7 @@ "signature": [ "\"api_key_not_found\"" ], - "path": "x-pack/plugins/entity_manager/common/errors.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/common/errors.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1276,7 +1276,7 @@ "signature": [ "\"api_key_not_valid\"" ], - "path": "x-pack/plugins/entity_manager/common/errors.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/common/errors.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1291,7 +1291,7 @@ "signature": [ "\"api_key_service_disabled\"" ], - "path": "x-pack/plugins/entity_manager/common/errors.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/common/errors.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1306,7 +1306,7 @@ "signature": [ "\"error_definition_stopped\"" ], - "path": "x-pack/plugins/entity_manager/common/errors.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/common/errors.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1321,7 +1321,7 @@ "signature": [ "\"partial_builtin_installation\"" ], - "path": "x-pack/plugins/entity_manager/common/errors.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/common/errors.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1335,7 +1335,7 @@ "tags": [], "label": "EntityManagerPublicPluginSetup", "description": [], - "path": "x-pack/plugins/entity_manager/public/types.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1355,7 +1355,7 @@ "text": "EntityClient" } ], - "path": "x-pack/plugins/entity_manager/public/types.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/types.ts", "deprecated": false, "trackAdoption": false } @@ -1370,7 +1370,7 @@ "tags": [], "label": "EntityManagerPublicPluginStart", "description": [], - "path": "x-pack/plugins/entity_manager/public/types.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/types.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1390,7 +1390,7 @@ "text": "EntityClient" } ], - "path": "x-pack/plugins/entity_manager/public/types.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/public/types.ts", "deprecated": false, "trackAdoption": false } @@ -1415,7 +1415,7 @@ "signature": [ "\"create_entity_source_definition\"" ], - "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/server/lib/v2/constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1430,7 +1430,7 @@ "signature": [ "\"create_entity_type_definition\"" ], - "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/server/lib/v2/constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1445,7 +1445,7 @@ "signature": [ "{}" ], - "path": "x-pack/plugins/entity_manager/common/config.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/common/config.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1864,7 +1864,7 @@ }, " | undefined; }; }" ], - "path": "x-pack/plugins/entity_manager/server/routes/index.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/server/routes/index.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1879,7 +1879,7 @@ "signature": [ "\"read_entities\"" ], - "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/server/lib/v2/constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1894,7 +1894,7 @@ "signature": [ "\"read_entity_source_definition\"" ], - "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/server/lib/v2/constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1909,7 +1909,7 @@ "signature": [ "\"read_entity_type_definition\"" ], - "path": "x-pack/plugins/entity_manager/server/lib/v2/constants.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/server/lib/v2/constants.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1923,7 +1923,7 @@ "tags": [], "label": "EntityManagerServerPluginSetup", "description": [], - "path": "x-pack/plugins/entity_manager/server/plugin.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/server/plugin.ts", "deprecated": false, "trackAdoption": false, "children": [], @@ -1937,7 +1937,7 @@ "tags": [], "label": "EntityManagerServerPluginStart", "description": [], - "path": "x-pack/plugins/entity_manager/server/plugin.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/server/plugin.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1961,7 +1961,7 @@ "EntityClient", ">" ], - "path": "x-pack/plugins/entity_manager/server/plugin.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/server/plugin.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1972,7 +1972,7 @@ "tags": [], "label": "options", "description": [], - "path": "x-pack/plugins/entity_manager/server/plugin.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/server/plugin.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -1993,7 +1993,7 @@ }, "" ], - "path": "x-pack/plugins/entity_manager/server/plugin.ts", + "path": "x-pack/platform/plugins/shared/entity_manager/server/plugin.ts", "deprecated": false, "trackAdoption": false } diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 3e0486821f7b7..d17ab19b080d0 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 64e453acf94f5..d8a1e23530893 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index f8fa69ffd2c9e..d1cdce6bc00b8 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index d84b316478bcb..821e5eb6fae67 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 12da0698e7074..1e23b61d6a601 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2024-12-06 +date: 2024-12-08 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 310cd6caacc0a..88a3d35bffbce 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-12-06 +date: 2024-12-08 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 66d19461575fa..f966f9fb0cbf3 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index ac73f4b061dea..413668784f761 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-12-06 +date: 2024-12-08 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 b0adcd0f1d958..8ffceabfd0b6b 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2024-12-06 +date: 2024-12-08 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 e546c2fe7c896..612245dde9db7 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2024-12-06 +date: 2024-12-08 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 bd0ddb02d212e..8e898fd91f454 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2024-12-06 +date: 2024-12-08 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 2abbc691c0d34..8f3a9862d8270 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2024-12-06 +date: 2024-12-08 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 24576b4e17ee4..335d50e101ad5 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2024-12-06 +date: 2024-12-08 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 8c236e2fe1b91..092f3bdac5f1a 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2024-12-06 +date: 2024-12-08 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 b4e2c6a6d6429..ae1443a3b7678 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2024-12-06 +date: 2024-12-08 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 4134cce11b9b6..efb0c27d46fdc 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2024-12-06 +date: 2024-12-08 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 2d7116f4830ba..436786d78b2ba 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2024-12-06 +date: 2024-12-08 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 87ed8386920ef..e04ba6f8b1bfa 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2024-12-06 +date: 2024-12-08 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 da7f1b165b089..21f3c68c8a82b 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2024-12-06 +date: 2024-12-08 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 3b78492c578ff..d95ec50428213 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2024-12-06 +date: 2024-12-08 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 4eab544bfe8ad..9e8c4c9bca482 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2024-12-06 +date: 2024-12-08 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 965caad3de0bc..22d4013b2e2c9 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2024-12-06 +date: 2024-12-08 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 12b96d68cac9a..1d8d98ce5d09c 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2024-12-06 +date: 2024-12-08 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 26d2d1bb7c121..58e6abcb07de8 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 8db4f1dc494f1..0dac616c652c4 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 4b9bb3432d8fd..6fc07e4b2b78c 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2024-12-06 +date: 2024-12-08 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 51af544ffba71..8152bfb10a167 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2024-12-06 +date: 2024-12-08 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 d59497a7d797c..84a1a71ea9c32 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2024-12-06 +date: 2024-12-08 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 1c3f5a427a7bd..512e7404a8309 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2024-12-06 +date: 2024-12-08 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 730802a55c8a0..d58e44536d400 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2024-12-06 +date: 2024-12-08 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 0f285b6ce19b8..8aa278b4a1e03 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2024-12-06 +date: 2024-12-08 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 cfbb87ee8fe5a..4e79db24d5e09 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2024-12-06 +date: 2024-12-08 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 a92e3a94ec092..fa9f4cd52df5f 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2024-12-06 +date: 2024-12-08 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 18e62158fd876..907a2d275fd85 100644 --- a/api_docs/index_lifecycle_management.mdx +++ b/api_docs/index_lifecycle_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexLifecycleManagement title: "indexLifecycleManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexLifecycleManagement plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 85d3fd175be20..21f093749048e 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index dd83af03e1035..e2b49b5462859 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index b7f21d300a092..ac70d42adae80 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2024-12-06 +date: 2024-12-08 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 c89c05c4519d3..1ce3773d0ef7e 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-12-06 +date: 2024-12-08 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 9a0b2aaa3e938..f70fab43a7191 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/integration_assistant.mdx b/api_docs/integration_assistant.mdx index 44c5487cf9eb8..0dc55b2c8b63b 100644 --- a/api_docs/integration_assistant.mdx +++ b/api_docs/integration_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/integrationAssistant title: "integrationAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the integrationAssistant plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'integrationAssistant'] --- import integrationAssistantObj from './integration_assistant.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 8286c05585d9b..902792800f391 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/inventory.mdx b/api_docs/inventory.mdx index f224d9ed82c1c..756df048bf8d9 100644 --- a/api_docs/inventory.mdx +++ b/api_docs/inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inventory title: "inventory" image: https://source.unsplash.com/400x175/?github description: API docs for the inventory plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inventory'] --- import inventoryObj from './inventory.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 63f3eb9b8088d..20dd8fa6cd53e 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index 1443fcdef5edb..8ad0cbed264b9 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index e4afa44b4e9f1..ab8fe98d821bf 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant.mdx b/api_docs/kbn_ai_assistant.mdx index 279a5ddfcb658..33ef58ac4cb6e 100644 --- a/api_docs/kbn_ai_assistant.mdx +++ b/api_docs/kbn_ai_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant title: "@kbn/ai-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant'] --- import kbnAiAssistantObj from './kbn_ai_assistant.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant_common.mdx b/api_docs/kbn_ai_assistant_common.mdx index 6bab1ec5076db..fc86d646478e3 100644 --- a/api_docs/kbn_ai_assistant_common.mdx +++ b/api_docs/kbn_ai_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant-common title: "@kbn/ai-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant-common plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-common'] --- import kbnAiAssistantCommonObj from './kbn_ai_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 34f7f34d06613..3da6cbfb4130a 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 05dbbde89343c..5e6b76ae6f782 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 13a36e29cb6c2..951c96c15bcee 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index ea9938823ca6e..be6a7cc61a83e 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index ae35eb28c653a..57ecde56c8938 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 2c2b2d110f03d..57dda7ba07f6c 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-12-06 +date: 2024-12-08 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 4bf7e3b3a75a0..fa2d5bb75c49c 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-12-06 +date: 2024-12-08 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 e24ff6865370a..4d71b1a977373 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 246421c1177e4..a8a0000cc5f32 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 8bd78a8558332..43d585279d0e5 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-12-06 +date: 2024-12-08 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 c3c482e9d381d..6914c6b49a4c2 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 76acd572a9d76..b44f97f228131 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index e6982ee568828..964e085cb4a89 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 1e4f7eed67e07..6f5b62298e061 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 9a76e2464ae39..8a7a87f46c90d 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2024-12-06 +date: 2024-12-08 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 d30438bcbbee9..81790c677d89a 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index 71a434402d8fb..72f12a223efc9 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index d883a2eae5827..8f31856dce8e4 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index f7b61d8f03157..182ed64cf7695 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 60c28fdaafa7d..94e6512a04311 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2024-12-06 +date: 2024-12-08 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 2a5b0c8e09526..d3f091d16d1d9 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-12-06 +date: 2024-12-08 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 18a57104a56e9..a42edf9b0abb0 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-12-06 +date: 2024-12-08 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 585dda7d943ab..a5153f65241d9 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-12-06 +date: 2024-12-08 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 15cca1a085425..aede1dbc18f6c 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index dc9f92a293af9..e42d7c344160a 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 5abd73d532ac1..2211f95dee3ef 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2024-12-06 +date: 2024-12-08 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 3e8800d8f41c6..3e875c321cd02 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-12-06 +date: 2024-12-08 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 64589d343e7fb..5ec805e003502 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2024-12-06 +date: 2024-12-08 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 1d3005c6326f6..1b03cf337f06f 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2024-12-06 +date: 2024-12-08 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 4c1f60fd13c1e..9256e83acc540 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2024-12-06 +date: 2024-12-08 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 93e6889204136..8967d6e5b55ce 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2024-12-06 +date: 2024-12-08 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 87d2dd36a06a0..7599db76101f9 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 30846c9594ab0..f956f050f554e 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index 85ee93a5d9b91..a3d4384f8d301 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_graph.mdx b/api_docs/kbn_cloud_security_posture_graph.mdx index 56661f8e523c4..73d220f48f7ed 100644 --- a/api_docs/kbn_cloud_security_posture_graph.mdx +++ b/api_docs/kbn_cloud_security_posture_graph.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-graph title: "@kbn/cloud-security-posture-graph" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-graph plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-graph'] --- import kbnCloudSecurityPostureGraphObj from './kbn_cloud_security_posture_graph.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 5a243940d2f8e..12b3f77259df9 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-12-06 +date: 2024-12-08 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 2434acb034227..bfcf7b50dd61c 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-12-06 +date: 2024-12-08 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 a1c3a51ef2412..b234bd6f61604 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-12-06 +date: 2024-12-08 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 a74ad9582fe0f..3ef117dfce4c1 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2024-12-06 +date: 2024-12-08 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 74f9d5d466ba7..0a79de6c65a01 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2024-12-06 +date: 2024-12-08 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 7b9a56096c4b8..52de739d7398b 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 bb945d709d0d1..233a3d1de9a0f 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2024-12-06 +date: 2024-12-08 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 75a1799fc1799..7cffaae059519 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.devdocs.json b/api_docs/kbn_content_management_content_insights_public.devdocs.json index 815d122e119e7..67a3cd13854e8 100644 --- a/api_docs/kbn_content_management_content_insights_public.devdocs.json +++ b/api_docs/kbn_content_management_content_insights_public.devdocs.json @@ -221,7 +221,7 @@ "label": "ActivityView", "description": [], "signature": [ - "({ item }: ", + "({ item, entityNamePlural }: ", { "pluginId": "@kbn/content-management-content-insights-public", "scope": "public", @@ -240,7 +240,7 @@ "id": "def-public.ActivityView.$1", "type": "Object", "tags": [], - "label": "{ item }", + "label": "{ item, entityNamePlural }", "description": [], "signature": [ { @@ -421,6 +421,20 @@ "path": "packages/content-management/content_insights/content_insights_public/src/components/activity_view.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ActivityViewProps.entityNamePlural", + "type": "string", + "tags": [], + "label": "entityNamePlural", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/content-management/content_insights/content_insights_public/src/components/activity_view.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -575,6 +589,19 @@ "path": "packages/content-management/content_insights/content_insights_public/src/services.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-content-insights-public", + "id": "def-public.ContentInsightsServices.isKibanaVersioningEnabled", + "type": "boolean", + "tags": [], + "label": "isKibanaVersioningEnabled", + "description": [ + "\nWhether versioning is enabled for the current kibana instance. (aka is Serverless)\nThis is used to determine if we should show the version mentions in the help text." + ], + "path": "packages/content-management/content_insights/content_insights_public/src/services.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index 0bebcefb6f6d7..071d01245f7d4 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 32 | 0 | 28 | 0 | +| 34 | 0 | 29 | 0 | ## Client diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index 0897acf0fc366..44e2e8873f2e6 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_common.mdx b/api_docs/kbn_content_management_favorites_common.mdx index 5d9ccdc5b9c2b..dd8e4ca42e633 100644 --- a/api_docs/kbn_content_management_favorites_common.mdx +++ b/api_docs/kbn_content_management_favorites_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-common title: "@kbn/content-management-favorites-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-common plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-common'] --- import kbnContentManagementFavoritesCommonObj from './kbn_content_management_favorites_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 72d8823d7a0fe..308cf3dc209e9 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index 61ac01279b33c..a62866086e2fd 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 492ff1b58682a..b5dbe73a5b68c 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-12-06 +date: 2024-12-08 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 8d7a2cb9a1307..15f61526fcc01 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-12-06 +date: 2024-12-08 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 69d2b9a5aa172..f94dea39e8d47 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-12-06 +date: 2024-12-08 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.devdocs.json b/api_docs/kbn_content_management_table_list_view_table.devdocs.json index 21b06f453b89c..ec4985c0f513c 100644 --- a/api_docs/kbn_content_management_table_list_view_table.devdocs.json +++ b/api_docs/kbn_content_management_table_list_view_table.devdocs.json @@ -371,6 +371,22 @@ "path": "packages/content-management/table_list_view_table/src/services.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-table-list-view-table", + "id": "def-public.TableListViewKibanaDependencies.isKibanaVersioningEnabled", + "type": "CompoundType", + "tags": [], + "label": "isKibanaVersioningEnabled", + "description": [ + "\nFlag to indicate if Kibana versioning is enabled. (aka not Serverless)\nUsed to determine if we should show the version mentions in the help text." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/content-management/table_list_view_table/src/services.tsx", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false 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 5e7a5f078eeac..9f4fccb71c9cd 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 51 | 0 | 33 | 3 | +| 52 | 0 | 33 | 3 | ## Client diff --git a/api_docs/kbn_content_management_user_profiles.devdocs.json b/api_docs/kbn_content_management_user_profiles.devdocs.json index 8173f84b73568..5aeaee0910d8a 100644 --- a/api_docs/kbn_content_management_user_profiles.devdocs.json +++ b/api_docs/kbn_content_management_user_profiles.devdocs.json @@ -58,7 +58,7 @@ "signature": [ "(props: { iconType?: ", "IconType", - " | undefined; }) => React.JSX.Element" + " | undefined; includeVersionTip?: boolean | undefined; entityNamePlural?: string | undefined; }) => React.JSX.Element" ], "path": "packages/content-management/user_profiles/src/components/user_missing_tip.tsx", "deprecated": false, @@ -89,6 +89,34 @@ "path": "packages/content-management/user_profiles/src/components/user_missing_tip.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-user-profiles", + "id": "def-public.NoCreatorTip.$1.includeVersionTip", + "type": "CompoundType", + "tags": [], + "label": "includeVersionTip", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/content-management/user_profiles/src/components/user_missing_tip.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-user-profiles", + "id": "def-public.NoCreatorTip.$1.entityNamePlural", + "type": "string", + "tags": [], + "label": "entityNamePlural", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/content-management/user_profiles/src/components/user_missing_tip.tsx", + "deprecated": false, + "trackAdoption": false } ] } @@ -104,7 +132,7 @@ "label": "NoUpdaterTip", "description": [], "signature": [ - "(props: { iconType?: string | undefined; }) => React.JSX.Element" + "(props: { iconType?: string | undefined; includeVersionTip?: boolean | undefined; entityNamePlural?: string | undefined; }) => React.JSX.Element" ], "path": "packages/content-management/user_profiles/src/components/user_missing_tip.tsx", "deprecated": false, @@ -134,6 +162,34 @@ "path": "packages/content-management/user_profiles/src/components/user_missing_tip.tsx", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-user-profiles", + "id": "def-public.NoUpdaterTip.$1.includeVersionTip", + "type": "CompoundType", + "tags": [], + "label": "includeVersionTip", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/content-management/user_profiles/src/components/user_missing_tip.tsx", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/content-management-user-profiles", + "id": "def-public.NoUpdaterTip.$1.entityNamePlural", + "type": "string", + "tags": [], + "label": "entityNamePlural", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/content-management/user_profiles/src/components/user_missing_tip.tsx", + "deprecated": false, + "trackAdoption": false } ] } diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index 0a82e24956f61..650281072fb02 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 30 | 0 | 30 | 0 | +| 34 | 0 | 34 | 0 | ## Client diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 46404ef200306..a264ab81d8ce2 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 6a4c0cb00be67..fa0259a16259c 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 02008f7e7247e..28f30bdf43038 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 2a5d4a41364aa..1f7cdcef1b03e 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 6872bb5a21951..2983ea59ae5c4 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2024-12-06 +date: 2024-12-08 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 51cdbce4c3946..a4ddef2e49bf9 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 962b52d2ed105..0fc85585b3a30 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 36fdbd3f48bbc..fae73a4baf36f 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 e090d06131591..9519c0cb6117f 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 839164df37597..f766af22d62ba 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 6bd0e81a034b2..4a54f62a22f5b 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2024-12-06 +date: 2024-12-08 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 ed35b9828609d..057c060087c7f 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 40d7843426253..fae83adf4b13f 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 beeda8706b747..a2bc06c0c4e55 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 1e43c00c289a4..f9fab55935a01 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 6d9da022c3a73..8a47fa9c83319 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2024-12-06 +date: 2024-12-08 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 121cdb4e362f0..9c94b566511c1 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 37071a03c4746..f2e897e07ac98 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 79a3fa77bb9af..d77d324b0f083 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 7d111c4f6cafe..01b6220b4de15 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2024-12-06 +date: 2024-12-08 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 a34bdda58520f..3fe0adf3ff78d 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2024-12-06 +date: 2024-12-08 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 f29d3c76dc9e1..b9018c3aaeb50 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 4d4c613adb41b..6efdc355ca882 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 8e81caa429718..116472e89de95 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 66f12af03a367..65b5548ed3639 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 79322ec1da4f8..bc17a1c252a29 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 03e864fcccebd..6485bd1ea0559 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 9a7b7d1382191..a9a546bad8002 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 d4a00e08013cc..0439e34279245 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2024-12-06 +date: 2024-12-08 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 f1ee7cb659e2e..934883712767f 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2024-12-06 +date: 2024-12-08 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 065a7bb164afd..72614ce2cbb7c 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 1a66199f5b780..1a1ea0f0fc868 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 75eed113b3c0a..3920a7170c85e 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 fbfdc9ef49e3c..549c7b4966163 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 1c71369127609..cfc091ece2767 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 853fe70c65e83..99783d3aad9c0 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2024-12-06 +date: 2024-12-08 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 01f892f972c08..8cd6554fd14e6 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2024-12-06 +date: 2024-12-08 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 b8ce816d39238..4847a2e2507f7 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 5b26f159a9891..010022c80f186 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 dd5d3ef884a12..7c1581d88f1a7 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 6ad71580ad5f5..8e528e6c16938 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 09a5117b3ef63..aa9960cfad5c3 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2024-12-06 +date: 2024-12-08 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 aa52d64a1c96d..8ae705daf613a 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 bc695898f5cc9..51da5d653fc71 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 271eaf3542264..1523181e04d6c 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 d182efb1a345c..9876063969d20 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2024-12-06 +date: 2024-12-08 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 9e6c080de2bce..3eebdfc162514 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 ce9a2bd344560..cb36059ec3810 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 3fb114a234418..c078e0cbde2b9 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 012d40a57257c..20f6b3fa40b9f 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 6bff148f6a8d8..b7f61f11521e8 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 a48ea46d9229a..e2e4ae686784c 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 de05967cf8084..b4223fdee29b8 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 b7e08385c4d55..cf9c6463bf38a 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2024-12-06 +date: 2024-12-08 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 ecb690bd6b057..09d40796c7a17 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2024-12-06 +date: 2024-12-08 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 91164aaa85e09..847d7c47cdbf4 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 38faf3d6b6bb9..72404d5c109ad 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 2cc95bc5dd106..f7a02ed0b9cf6 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 b9c4b0e1efee4..e8949d453ae8f 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser.mdx b/api_docs/kbn_core_feature_flags_browser.mdx index 1ec477c513b69..0b691e5b2ab80 100644 --- a/api_docs/kbn_core_feature_flags_browser.mdx +++ b/api_docs/kbn_core_feature_flags_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser title: "@kbn/core-feature-flags-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser'] --- import kbnCoreFeatureFlagsBrowserObj from './kbn_core_feature_flags_browser.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_internal.mdx b/api_docs/kbn_core_feature_flags_browser_internal.mdx index 45840458a7519..b9139efc378f7 100644 --- a/api_docs/kbn_core_feature_flags_browser_internal.mdx +++ b/api_docs/kbn_core_feature_flags_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-internal title: "@kbn/core-feature-flags-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-internal'] --- import kbnCoreFeatureFlagsBrowserInternalObj from './kbn_core_feature_flags_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_mocks.mdx b/api_docs/kbn_core_feature_flags_browser_mocks.mdx index ebcd424af5e4d..d2a5970ae04ca 100644 --- a/api_docs/kbn_core_feature_flags_browser_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-mocks title: "@kbn/core-feature-flags-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-mocks'] --- import kbnCoreFeatureFlagsBrowserMocksObj from './kbn_core_feature_flags_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server.mdx b/api_docs/kbn_core_feature_flags_server.mdx index 8c0d008a25a1e..3dec914a81a38 100644 --- a/api_docs/kbn_core_feature_flags_server.mdx +++ b/api_docs/kbn_core_feature_flags_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server title: "@kbn/core-feature-flags-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server'] --- import kbnCoreFeatureFlagsServerObj from './kbn_core_feature_flags_server.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_internal.mdx b/api_docs/kbn_core_feature_flags_server_internal.mdx index 6dc661b644a26..3df34cfbf0a29 100644 --- a/api_docs/kbn_core_feature_flags_server_internal.mdx +++ b/api_docs/kbn_core_feature_flags_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-internal title: "@kbn/core-feature-flags-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-internal'] --- import kbnCoreFeatureFlagsServerInternalObj from './kbn_core_feature_flags_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_mocks.mdx b/api_docs/kbn_core_feature_flags_server_mocks.mdx index deebd591d2e0c..2de19468613e4 100644 --- a/api_docs/kbn_core_feature_flags_server_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-mocks title: "@kbn/core-feature-flags-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-mocks'] --- import kbnCoreFeatureFlagsServerMocksObj from './kbn_core_feature_flags_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 086eeed5e86ac..126d5071aff97 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 b096e4b532445..a67da50b44b33 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 2625dd00f32fe..5707533b948c6 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 48d0583e1d741..c0db0e1d2d8df 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2024-12-06 +date: 2024-12-08 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 d70b9783b1cda..7218abc08e8bb 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 beea6b193618f..b19701593644d 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2024-12-06 +date: 2024-12-08 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 99bc84ea7867b..233e27d3614be 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2024-12-06 +date: 2024-12-08 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 3ae8f1d85b70c..c1c95f5e82119 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 29c17f230efa1..7d0d621f5eb37 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 ed17137294d4f..65c921a2ad9ff 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 843d4f0811e14..d66a406219449 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index c0359a6d9c549..df48f5df7d5c4 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2024-12-06 +date: 2024-12-08 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 44741b3bb74ba..32afb0831307c 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 aa71827ffbf16..9969b9110ccfe 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_utils.mdx b/api_docs/kbn_core_http_server_utils.mdx index 7f252527462ba..52445c465116b 100644 --- a/api_docs/kbn_core_http_server_utils.mdx +++ b/api_docs/kbn_core_http_server_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-utils title: "@kbn/core-http-server-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-utils'] --- import kbnCoreHttpServerUtilsObj from './kbn_core_http_server_utils.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index b1382123b70f2..5ba2f4dcbe701 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 7d3b55a255bf3..da3cd9e2510c2 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 f5d3881f1ae05..44235a76d20b9 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2024-12-06 +date: 2024-12-08 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 9c60535ff0985..dbfb008f15edf 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 c7a73613ed672..302d26b9bc23c 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 50fe0fe010841..4c941bb38f098 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 bceed51eb2fc9..af7e9720c04f4 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 46822f3eb6d58..f96ea419b3e6c 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 64404b9a4954d..9c552cc9e76bf 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 3667e422664eb..d76fcd167591f 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 dd9a2531fa5b5..04ab948c0ab81 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2024-12-06 +date: 2024-12-08 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 b39f4320ba254..eb2f95e273763 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 0cb685b7e66fb..a567d7a508e54 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 82fcfa0257a7f..291caf3a7db02 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 511ddedf0c87c..8db7d7fce6783 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2024-12-06 +date: 2024-12-08 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 c36f0cf287962..90fdc04d6aa78 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 1138806de35d7..2c0ee822324ef 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 8583413cde690..ed2594af9443f 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 21df0a6422218..7c584bc43137f 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 ca8b2027ba345..806eabf78fcac 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2024-12-06 +date: 2024-12-08 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 0c16bd9ec0e22..1b04fd7229ebb 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 2cbe948cfb2c4..3268eaa4024b0 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 e489bbc5e576d..c55f0aa811a5f 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 7d36145505eae..d2c01f535de63 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2024-12-06 +date: 2024-12-08 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 c7dca3168d578..6eaa01070f17a 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 b460591e808db..3f5d3b48718bb 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 9577641032bf9..7f834ad28713e 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 b88561ecc568a..065e5a3a3c5af 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 09615036ab1dd..93a6a4cda29bd 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 aa7ca03818451..53515044e8cef 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 768522477d586..9e1c979a1e8e5 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 8e70c3b8feea5..a9a577ca3cc7b 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 3d245a5fb5f40..325503dfb772b 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 1502d22591f58..cd276a67e2ed9 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 4ddc607b640b3..bd1f575c691b9 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 0973fc347a1a0..df1119f18907f 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-12-06 +date: 2024-12-08 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 efaf9b34fd5d2..bc87511b3db47 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2024-12-06 +date: 2024-12-08 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 c370b8b213d86..a20bb6d336d3f 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 ea7c6c2ff1015..c6b8ee5f5a879 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2024-12-06 +date: 2024-12-08 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 093e98427474a..aa61ca85b1390 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser.mdx b/api_docs/kbn_core_rendering_browser.mdx index d8a4eddac60b8..ba17249c773db 100644 --- a/api_docs/kbn_core_rendering_browser.mdx +++ b/api_docs/kbn_core_rendering_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser title: "@kbn/core-rendering-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser'] --- import kbnCoreRenderingBrowserObj from './kbn_core_rendering_browser.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index e9f4b08efcca4..33cd854e21a2a 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 42804b0391c7e..d8cf2c4305e8f 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 d2cfa5fbc0a05..76aca27d0e143 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 e7888be44888b..3553dcaf35dda 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 bc5087efe15bf..7714dbc7623e6 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 3617346d57e98..78738fb06725f 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2024-12-06 +date: 2024-12-08 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 035f273dc1d51..f9a38a873a689 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 603b1435467b4..c2e6d6ed9d52e 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 ca1e27cb9e6d2..74f78523a2beb 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 ce33907923295..3c4fe15f2663c 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 bf8768060123f..2d7778119dede 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 345a7c3e33a8b..f82d2044d580e 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 cd7e6d1a3ecb8..c91e5768f0239 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2024-12-06 +date: 2024-12-08 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 d96305bf2c176..d1322a2f90992 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 95978057643b7..ef60bcb741187 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 f27a5f3d95c15..662fd38d2f002 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 1d3f7db561e41..9693720910dc7 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 249ac180f56a2..2d8324dcf9366 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2024-12-06 +date: 2024-12-08 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 528a909a1b4ca..135a8b6df453f 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 fef48cdddd95e..da57a4b2bc697 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 c4cf0d406f207..746da0738aebb 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 739c5b4addde4..afb3844c7088a 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 87631473d521c..affb054738fa7 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 942872c584cf7..ee74ef38da489 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index edda096c7aa52..0cdb36750bea3 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index 469b762b583e6..37a7b0ff8b14a 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 3deadd05d9016..603c13858d2a1 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index 1f7fd72f6e6e4..05ef6f82e11e0 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index ec94f415e22e3..0df930f891eee 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 74d90c74ca11a..3342c7a30d92a 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2024-12-06 +date: 2024-12-08 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 dd804d7137cb6..b9da9ee2cb3e7 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 876bc7ee18cad..b392c672ad157 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 23979de09354f..2a3680f78180e 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2024-12-06 +date: 2024-12-08 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 0697cd6c4acc1..14ac768280588 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 b114b8d3b01ba..7376a63193649 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2024-12-06 +date: 2024-12-08 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 f2c860cbada26..8426bcba03675 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-12-06 +date: 2024-12-08 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 3105c1d20b319..9b574adfdb3aa 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2024-12-06 +date: 2024-12-08 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 0231283ae4ae8..a86310df09ea3 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 5f52f908f2f73..8668f1ea56e22 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 5be2861a86885..bf644e79f8e01 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 4ed1619f0ba7d..96d33615122d2 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 6b8fa0a78ed2e..72d8b2b14659d 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 ebcdc723d413a..9ca6b11d4f611 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 6445c1a20906b..f91cd5ea53d29 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2024-12-06 +date: 2024-12-08 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 266f76e6a7a0b..c8c83282edc21 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2024-12-06 +date: 2024-12-08 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 92431a9cad8cf..4fd7d536a49dd 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 e39b2aeb8d0cb..abefbfddd4a3e 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 f893aab9474f8..e2907844ac5a5 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2024-12-06 +date: 2024-12-08 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 c2e517e80f633..ca2062bf70383 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 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 a60937c527624..f7562d24e580f 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index a8315237734b4..246b1a7d05720 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 51e2722fbce50..ce57ff135b6d9 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 776891e576cf0..1742aee9fb3f4 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 6a7bf97a3b96d..2c25046106b10 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index fa122afffc518..56cd0ceae3188 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index bbc93cf5b7c42..1060830f277c4 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index cd4a48ed1bf92..ccb57e52b8930 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 399c73764f3dd..ccada67b6f473 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 9cf7f3029e5c6..0f3cd95dc6666 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 79c5aad064a76..a99bf00ba6e4d 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2024-12-06 +date: 2024-12-08 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 42697a33a335c..5efb160a23c6d 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 03e3a8b0b131f..c64b6eac69931 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-12-06 +date: 2024-12-08 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 fceb5fc766a23..5388c40cfe830 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-12-06 +date: 2024-12-08 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 dbde923ff8e99..e43dc2764ea46 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2024-12-06 +date: 2024-12-08 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 8659f31b0b00d..2b1da94f03936 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-12-06 +date: 2024-12-08 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 ae797c2c5dc07..6e79ccc5c152b 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-12-06 +date: 2024-12-08 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 3d1f161ccb137..5d9a4d43e277d 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-12-06 +date: 2024-12-08 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 b2a0edf5f1c30..b7208d1f444bd 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 048164869428f..36213acf192ef 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2024-12-06 +date: 2024-12-08 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 4c6944d753aec..331e3b6f2e22c 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-12-06 +date: 2024-12-08 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 830f427690fac..0c3a06f25884e 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index c44639b431e8d..b6896c397f76a 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 2d914e3a36c7e..03e7caf5d5db6 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-12-06 +date: 2024-12-08 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 26c704a3beaf4..ffa69a4f4e7fa 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-12-06 +date: 2024-12-08 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 01186ffc34fd5..d5cd27f38a69a 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-12-06 +date: 2024-12-08 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 ce84e5b22de3c..838b33af7415f 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 1b63acdc45fc3..ee4b76a1a9739 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 788f80c818b1a..94b36e9ca011c 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 1389f742d9300..c323059909b68 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-12-06 +date: 2024-12-08 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 85bfe3573cec5..85d811996f75d 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-12-06 +date: 2024-12-08 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 c338264750511..374f4868feb66 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-12-06 +date: 2024-12-08 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 9c02a24259cf3..422879a3fee74 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-12-06 +date: 2024-12-08 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 0429492780a59..27724d76b0630 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2024-12-06 +date: 2024-12-08 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 66aacae98cc47..741766539ad83 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2024-12-06 +date: 2024-12-08 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 7b608ef141666..7abd93c43d6ac 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2024-12-06 +date: 2024-12-08 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 d725eef2c1ace..a8064f0da46e3 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_contextual_components.mdx b/api_docs/kbn_discover_contextual_components.mdx index 80a4fbe2eaf92..fcf0baca43f6d 100644 --- a/api_docs/kbn_discover_contextual_components.mdx +++ b/api_docs/kbn_discover_contextual_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-contextual-components title: "@kbn/discover-contextual-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-contextual-components plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-contextual-components'] --- import kbnDiscoverContextualComponentsObj from './kbn_discover_contextual_components.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.devdocs.json b/api_docs/kbn_discover_utils.devdocs.json index e16d23d1e7c14..9bba66acba184 100644 --- a/api_docs/kbn_discover_utils.devdocs.json +++ b/api_docs/kbn_discover_utils.devdocs.json @@ -5094,21 +5094,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/discover-utils", - "id": "def-common.SEARCH_FIELDS_FROM_SOURCE", - "type": "string", - "tags": [], - "label": "SEARCH_FIELDS_FROM_SOURCE", - "description": [], - "signature": [ - "\"discover:searchFieldsFromSource\"" - ], - "path": "packages/kbn-discover-utils/src/constants.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/discover-utils", "id": "def-common.SEARCH_ON_PAGE_LOAD_SETTING", diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index e88a1b9c6f6cd..fb0c16892206f 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 277 | 0 | 227 | 4 | +| 276 | 0 | 226 | 4 | ## Common diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 6c8d3d356be26..2b5ba8d1bf904 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2024-12-06 +date: 2024-12-08 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 53d2e26839a2e..3469c946af919 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 720c78f7033e2..9cc77f57d2621 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-12-06 +date: 2024-12-08 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 7238c12e1e08d..ebae2ad023bc1 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2024-12-06 +date: 2024-12-08 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 a8093e71ebc5f..0e6f3f1cd25bb 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-12-06 +date: 2024-12-08 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 d1bd6f203002f..428ed3d6bf0c0 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 f9e54b320ef99..95b06158bccfd 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-12-06 +date: 2024-12-08 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 934b188822636..f41a0d59bbf47 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.devdocs.json b/api_docs/kbn_entities_schema.devdocs.json index 0269efb5711d8..a5b3bfffd5b6f 100644 --- a/api_docs/kbn_entities_schema.devdocs.json +++ b/api_docs/kbn_entities_schema.devdocs.json @@ -29,7 +29,7 @@ "signature": [ "(minimumMinutes: number) => Zod.ZodEffects" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -43,7 +43,7 @@ "signature": [ "number" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -62,7 +62,7 @@ "signature": [ "({\n type,\n dataset,\n}: AliasPatternOptions) => `entities-${string}-${TDataset}`" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/patterns.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -76,7 +76,7 @@ "signature": [ "AliasPatternOptions" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/patterns.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -95,7 +95,7 @@ "signature": [ "({\n schemaVersion,\n dataset,\n definitionId,\n}: IndexPatternOptions) => `.entities.v${number}.${TDataset}.${string}`" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/patterns.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -109,7 +109,7 @@ "signature": [ "IndexPatternOptions" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/patterns.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.ts", "deprecated": false, "trackAdoption": false, "isRequired": true @@ -127,7 +127,7 @@ "tags": [], "label": "EntityV2", "description": [], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -138,7 +138,7 @@ "tags": [], "label": "'entity.id'", "description": [], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false }, @@ -149,7 +149,7 @@ "tags": [], "label": "'entity.type'", "description": [], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false }, @@ -160,7 +160,7 @@ "tags": [], "label": "'entity.display_name'", "description": [], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false }, @@ -174,7 +174,7 @@ "signature": [ "string | undefined" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false }, @@ -188,7 +188,7 @@ "signature": [ "[metadata: string]: any" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false } @@ -202,7 +202,7 @@ "tags": [], "label": "MetadataRecord", "description": [], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false, "children": [ @@ -223,7 +223,7 @@ "text": "MetadataRecord" } ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false } @@ -239,7 +239,7 @@ "tags": [], "label": "BasicAggregations", "description": [], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -256,7 +256,7 @@ "signature": [ "\"entities\"" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/patterns.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -271,7 +271,7 @@ "signature": [ "\"history\"" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/patterns.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -286,7 +286,7 @@ "signature": [ "\"latest\"" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/patterns.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -301,7 +301,7 @@ "signature": [ "\"v1\"" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/patterns.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/patterns.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -324,7 +324,7 @@ }, "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }[] | undefined; metadata?: ({ destination: string; source: string; aggregation: { type: \"terms\"; limit: number; lookbackPeriod?: string | undefined; } | { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; }; } | { destination: string; source: string; aggregation: { type: \"terms\"; limit: number; lookbackPeriod: undefined; }; })[] | undefined; staticFields?: Record | undefined; installStatus?: \"failed\" | \"installing\" | \"upgrading\" | \"installed\" | undefined; installStartedAt?: string | undefined; installedComponents?: { id: string; type: \"transform\" | \"template\" | \"ingest_pipeline\"; }[] | undefined; }" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity_definition.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -347,7 +347,7 @@ }, "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }[] | undefined; indexPatterns?: string[] | undefined; metadata?: ({ destination: string; source: string; aggregation: { type: \"terms\"; limit: number; lookbackPeriod?: string | undefined; } | { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; }; } | { destination: string; source: string; aggregation: { type: \"terms\"; limit: number; lookbackPeriod: undefined; }; })[] | undefined; identityFields?: ({ field: string; optional: false; } | { field: string; optional: boolean; })[] | undefined; displayNameTemplate?: string | undefined; staticFields?: Record | undefined; latest?: { settings?: { frequency?: string | undefined; syncField?: string | undefined; syncDelay?: string | undefined; } | undefined; lookbackPeriod?: string | undefined; timestampField?: string | undefined; } | undefined; installedComponents?: { id: string; type: \"transform\" | \"template\" | \"ingest_pipeline\"; }[] | undefined; }" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity_definition.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -362,7 +362,7 @@ "signature": [ "{ entity: { id: string; type: string; schema_version: string; identity_fields: string | string[]; display_name: string; definition_version: string; definition_id: string; last_seen_timestamp: string; metrics?: Record | undefined; }; } & Metadata" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -377,7 +377,7 @@ "signature": [ "Metadata" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -392,7 +392,7 @@ "signature": [ "{ includeState: boolean; page?: number | undefined; perPage?: number | undefined; }" ], - "path": "x-pack/packages/kbn-entities-schema/src/rest_spec/get.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/get.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -415,7 +415,7 @@ }, "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -430,7 +430,7 @@ "signature": [ "{ destination: string; source: string; aggregation: { type: \"terms\"; limit: number; lookbackPeriod?: string | undefined; } | { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; }; } | { destination: string; source: string; aggregation: { type: \"terms\"; limit: number; lookbackPeriod: undefined; }; }" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -453,7 +453,7 @@ }, "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -470,7 +470,7 @@ "signature": [ "Zod.ZodArray" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -493,7 +493,7 @@ }, ">" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -532,7 +532,7 @@ }, "; filter?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -547,7 +547,7 @@ "signature": [ "Zod.ZodObject<{ installOnly: Zod.ZodDefault, Zod.ZodBoolean]>, boolean, boolean | \"true\" | \"false\">>>; }, \"strip\", Zod.ZodTypeAny, { installOnly: boolean; }, { installOnly?: boolean | \"true\" | \"false\" | undefined; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/rest_spec/create.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/create.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -562,7 +562,7 @@ "signature": [ "Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/rest_spec/delete.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/delete.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -577,7 +577,7 @@ "signature": [ "Zod.ZodObject<{ deleteData: Zod.ZodDefault, Zod.ZodBoolean]>, boolean, boolean | \"true\" | \"false\">>>; }, \"strip\", Zod.ZodTypeAny, { deleteData: boolean; }, { deleteData?: boolean | \"true\" | \"false\" | undefined; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/rest_spec/delete.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/delete.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -592,7 +592,7 @@ "signature": [ "Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"doc_count\">; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -607,7 +607,7 @@ "signature": [ "Zod.ZodString" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -622,7 +622,7 @@ "signature": [ "Zod.ZodObject<{ id: Zod.ZodString; type: Zod.ZodString; identity_fields: Zod.ZodUnion<[Zod.ZodArray, Zod.ZodString]>; display_name: Zod.ZodString; metrics: Zod.ZodOptional>; definition_version: Zod.ZodString; schema_version: Zod.ZodString; definition_id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; type: string; schema_version: string; identity_fields: string | string[]; display_name: string; definition_version: string; definition_id: string; metrics?: Record | undefined; }, { id: string; type: string; schema_version: string; identity_fields: string | string[]; display_name: string; definition_version: string; definition_id: string; metrics?: Record | undefined; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -693,7 +693,7 @@ }, "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }[] | undefined; managed?: boolean | undefined; metadata?: (string | { source: string; destination?: string | undefined; aggregation?: { type: \"terms\"; limit?: number | undefined; lookbackPeriod?: string | undefined; } | { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; } | undefined; })[] | undefined; staticFields?: Record | undefined; installStatus?: \"failed\" | \"installing\" | \"upgrading\" | \"installed\" | undefined; installStartedAt?: string | undefined; installedComponents?: { id: string; type: \"transform\" | \"template\" | \"ingest_pipeline\"; }[] | undefined; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity_definition.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -764,7 +764,7 @@ }, "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }[] | undefined; indexPatterns?: string[] | undefined; metadata?: (string | { source: string; destination?: string | undefined; aggregation?: { type: \"terms\"; limit?: number | undefined; lookbackPeriod?: string | undefined; } | { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; } | undefined; })[] | undefined; identityFields?: (string | { field: string; optional: false; })[] | undefined; displayNameTemplate?: string | undefined; staticFields?: Record | undefined; latest?: { settings?: { frequency?: string | undefined; syncField?: string | undefined; syncDelay?: string | undefined; } | undefined; lookbackPeriod?: string | undefined; timestampField?: string | undefined; } | undefined; installedComponents?: { id: string; type: \"transform\" | \"template\" | \"ingest_pipeline\"; }[] | undefined; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity_definition.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity_definition.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -779,7 +779,7 @@ "signature": [ "Zod.ZodIntersection, Zod.ZodString]>; display_name: Zod.ZodString; metrics: Zod.ZodOptional>; definition_version: Zod.ZodString; schema_version: Zod.ZodString; definition_id: Zod.ZodString; }, { last_seen_timestamp: Zod.ZodString; }>, \"strip\", Zod.ZodTypeAny, { id: string; type: string; schema_version: string; identity_fields: string | string[]; display_name: string; definition_version: string; definition_id: string; last_seen_timestamp: string; metrics?: Record | undefined; }, { id: string; type: string; schema_version: string; identity_fields: string | string[]; display_name: string; definition_version: string; definition_id: string; last_seen_timestamp: string; metrics?: Record | undefined; }>; }, \"strip\", Zod.ZodTypeAny, { entity: { id: string; type: string; schema_version: string; identity_fields: string | string[]; display_name: string; definition_version: string; definition_id: string; last_seen_timestamp: string; metrics?: Record | undefined; }; }, { entity: { id: string; type: string; schema_version: string; identity_fields: string | string[]; display_name: string; definition_version: string; definition_id: string; last_seen_timestamp: string; metrics?: Record | undefined; }; }>, Zod.ZodType>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -794,7 +794,7 @@ "signature": [ "Zod.ZodType" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/entity.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/entity.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -809,7 +809,7 @@ "signature": [ "Zod.ZodOptional" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -824,7 +824,7 @@ "signature": [ "Zod.ZodObject<{ page: Zod.ZodOptional; perPage: Zod.ZodOptional; includeState: Zod.ZodDefault, Zod.ZodBoolean]>, boolean, boolean | \"true\" | \"false\">>>; }, \"strip\", Zod.ZodTypeAny, { includeState: boolean; page?: number | undefined; perPage?: number | undefined; }, { page?: number | undefined; perPage?: number | undefined; includeState?: boolean | \"true\" | \"false\" | undefined; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/rest_spec/get.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/get.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -839,7 +839,7 @@ "signature": [ "Zod.ZodEffects; syncDelay: Zod.ZodOptional; lookbackPeriod: Zod.ZodDefault>; frequency: Zod.ZodOptional; backfillSyncDelay: Zod.ZodOptional; backfillLookbackPeriod: Zod.ZodOptional; backfillFrequency: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { lookbackPeriod: string; frequency?: string | undefined; syncField?: string | undefined; syncDelay?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }, { frequency?: string | undefined; lookbackPeriod?: string | undefined; syncField?: string | undefined; syncDelay?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }>>, { lookbackPeriod: string; frequency?: string | undefined; syncField?: string | undefined; syncDelay?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; }, { frequency?: string | undefined; lookbackPeriod?: string | undefined; syncField?: string | undefined; syncDelay?: string | undefined; backfillSyncDelay?: string | undefined; backfillLookbackPeriod?: string | undefined; backfillFrequency?: string | undefined; } | undefined>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -854,7 +854,7 @@ "signature": [ "Zod.ZodUnion<[Zod.ZodObject<{ field: Zod.ZodString; optional: Zod.ZodLiteral; }, \"strip\", Zod.ZodTypeAny, { field: string; optional: false; }, { field: string; optional: false; }>, Zod.ZodEffects]>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -909,7 +909,7 @@ }, "; filter?: string | undefined; } | { name: string; aggregation: \"doc_count\"; filter?: string | undefined; } | { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; })[]; equation: string; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -924,7 +924,7 @@ "signature": [ "Zod.ZodUnion<[Zod.ZodObject<{ type: Zod.ZodLiteral<\"terms\">; limit: Zod.ZodDefault; lookbackPeriod: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"terms\"; limit: number; lookbackPeriod?: string | undefined; }, { type: \"terms\"; limit?: number | undefined; lookbackPeriod?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"top_value\">; sort: Zod.ZodRecord, Zod.ZodLiteral<\"desc\">]>>; lookbackPeriod: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; }, { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; }>]>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -939,7 +939,7 @@ "signature": [ "Zod.ZodEffects; aggregation: Zod.ZodDefault; limit: Zod.ZodDefault; lookbackPeriod: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"terms\"; limit: number; lookbackPeriod?: string | undefined; }, { type: \"terms\"; limit?: number | undefined; lookbackPeriod?: string | undefined; }>, Zod.ZodObject<{ type: Zod.ZodLiteral<\"top_value\">; sort: Zod.ZodRecord, Zod.ZodLiteral<\"desc\">]>>; lookbackPeriod: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; }, { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; }>]>>>; }, \"strip\", Zod.ZodTypeAny, { source: string; aggregation: { type: \"terms\"; limit: number; lookbackPeriod?: string | undefined; } | { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; }; destination?: string | undefined; }, { source: string; destination?: string | undefined; aggregation?: { type: \"terms\"; limit?: number | undefined; lookbackPeriod?: string | undefined; } | { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; } | undefined; }>, Zod.ZodEffects]>, { destination: string; source: string; aggregation: { type: \"terms\"; limit: number; lookbackPeriod?: string | undefined; } | { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; }; } | { destination: string; source: string; aggregation: { type: \"terms\"; limit: number; lookbackPeriod: undefined; }; }, string | { source: string; destination?: string | undefined; aggregation?: { type: \"terms\"; limit?: number | undefined; lookbackPeriod?: string | undefined; } | { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; } | undefined; }>, { destination: string; source: string; aggregation: { type: \"terms\"; limit: number; lookbackPeriod?: string | undefined; } | { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; }; } | { destination: string; source: string; aggregation: { type: \"terms\"; limit: number; lookbackPeriod: undefined; }; }, string | { source: string; destination?: string | undefined; aggregation?: { type: \"terms\"; limit?: number | undefined; lookbackPeriod?: string | undefined; } | { type: \"top_value\"; sort: Record; lookbackPeriod?: string | undefined; } | undefined; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -978,7 +978,7 @@ }, "; filter?: string | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"doc_count\">; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }, { name: string; aggregation: \"doc_count\"; filter?: string | undefined; }>, Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"percentile\">; field: Zod.ZodString; percentile: Zod.ZodNumber; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }>]>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -993,7 +993,7 @@ "signature": [ "Zod.ZodObject<{ name: Zod.ZodString; aggregation: Zod.ZodLiteral<\"percentile\">; field: Zod.ZodString; percentile: Zod.ZodNumber; filter: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }, { name: string; field: string; percentile: number; aggregation: \"percentile\"; filter?: string | undefined; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1008,7 +1008,7 @@ "signature": [ "Zod.ZodObject<{ id: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { id: string; }, { id: string; }>" ], - "path": "x-pack/packages/kbn-entities-schema/src/rest_spec/reset.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/rest_spec/reset.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false @@ -1023,7 +1023,7 @@ "signature": [ "Zod.ZodEffects" ], - "path": "x-pack/packages/kbn-entities-schema/src/schema/common.ts", + "path": "x-pack/platform/packages/shared/kbn-entities-schema/src/schema/common.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index c019c482807b1..67353de3614ad 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 34c7f68ade0c8..72b80dc9503f6 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2024-12-06 +date: 2024-12-08 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 7df03bd9ec2c5..e4c0822387c05 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2024-12-06 +date: 2024-12-08 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 536ffdcd685ce..9f91de2293f4c 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2024-12-06 +date: 2024-12-08 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 456f6c8c6b9ab..30e61b162710a 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2024-12-06 +date: 2024-12-08 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 6e828e953cb41..1299ddad819bb 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2024-12-06 +date: 2024-12-08 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 05c85e39ada9e..47e0c7d069b01 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.devdocs.json b/api_docs/kbn_esql_ast.devdocs.json index 3a850ab7e31f6..7f84ea5cbd325 100644 --- a/api_docs/kbn_esql_ast.devdocs.json +++ b/api_docs/kbn_esql_ast.devdocs.json @@ -2623,10848 +2623,8 @@ "description": [], "signature": [ "Visitor", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", - "RenameExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitListLiteralExpression: (ctx: ", - "ListLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", - "RenameExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - "ESQLList", - ">, inp: Input) => Output; } & { visitFunctionCallExpression: (ctx: ", - "FunctionCallExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", - "RenameExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitListLiteralExpression: (ctx: ", - "ListLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", - "RenameExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - "ESQLList", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitCommandOption: (ctx: ", - "CommandOptionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", - "RenameExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitListLiteralExpression: (ctx: ", - "ListLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", - "RenameExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - "ESQLList", - ">, inp: Input) => Output; } & { visitFunctionCallExpression: (ctx: ", - "FunctionCallExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", - "RenameExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitListLiteralExpression: (ctx: ", - "ListLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", - "RenameExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - "ESQLList", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitCommand: (ctx: ", - "CommandVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitRenameExpression: (ctx: ", - "RenameExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitInlineCastExpression: (ctx: ", - "InlineCastExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitLiteralExpression: (ctx: ", - "LiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { visitColumnExpression: (ctx: ", - "ColumnExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLLiteral", - "text": "ESQLLiteral" - }, - ">, inp: Input) => Output; } & { visitTimeIntervalLiteralExpression: (ctx: ", - "TimeIntervalLiteralExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; } & { visitSourceExpression: (ctx: ", - "SourceExpressionVisitorContext", - "<", - "VisitorMethods", - " & { visitExpression: (ctx: ", - "ExpressionVisitorContext", - "<", - "VisitorMethods", - ", ", - "SharedData", - ", ", - "ESQLAstExpression", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { ...; } & { ...; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; }, ", - "SharedData", - ">, inp: Input) => Output; } & { ...; } & { ...; } & { ...; }, ", - "SharedData", - ", ", - { - "pluginId": "@kbn/esql-ast", - "scope": "common", - "docId": "kibKbnEsqlAstPluginApi", - "section": "def-common.ESQLAstCommand", - "text": "ESQLAstCommand" - }, - ">, inp: Input) => Output; } & { ...; }, ", - "SharedData", ">" ], "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", @@ -13487,7 +2647,7 @@ "section": "def-common.ESQLAstQueryExpression", "text": "ESQLAstQueryExpression" }, - ") => string" + ") => any" ], "path": "packages/kbn-esql-ast/src/pretty_print/wrapping_pretty_printer.ts", "deprecated": false, @@ -16156,7 +5316,9 @@ "docId": "kibKbnEsqlAstPluginApi", "section": "def-common.ESQLAstMetricsCommand", "text": "ESQLAstMetricsCommand" - } + }, + " | ", + "ESQLAstJoinCommand" ], "path": "packages/kbn-esql-ast/src/types.ts", "deprecated": false, @@ -16219,6 +5381,8 @@ "text": "ESQLAstMetricsCommand" }, " | ", + "ESQLAstJoinCommand", + " | ", { "pluginId": "@kbn/esql-ast", "scope": "common", diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 8aa0141581109..463a564c7baec 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 285 | 1 | 223 | 36 | +| 285 | 1 | 223 | 25 | ## Common diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx index 022af3b8a0da8..2c1bd43482cce 100644 --- a/api_docs/kbn_esql_editor.mdx +++ b/api_docs/kbn_esql_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-editor title: "@kbn/esql-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-editor plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-editor'] --- import kbnEsqlEditorObj from './kbn_esql_editor.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index b7bbdf7f7ae26..e73a893c2ffd4 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.devdocs.json b/api_docs/kbn_esql_validation_autocomplete.devdocs.json index f35814c5b2e30..837fc82d6a35b 100644 --- a/api_docs/kbn_esql_validation_autocomplete.devdocs.json +++ b/api_docs/kbn_esql_validation_autocomplete.devdocs.json @@ -496,6 +496,8 @@ "section": "def-common.ESQLAstMetricsCommand", "text": "ESQLAstMetricsCommand" }, + " | ", + "ESQLAstJoinCommand", "; node: ", "ESQLStringLiteral", "; option: ", @@ -530,6 +532,8 @@ "section": "def-common.ESQLAstMetricsCommand", "text": "ESQLAstMetricsCommand" }, + " | ", + "ESQLAstJoinCommand", "; node: ", { "pluginId": "@kbn/esql-ast", @@ -572,6 +576,8 @@ "section": "def-common.ESQLAstMetricsCommand", "text": "ESQLAstMetricsCommand" }, + " | ", + "ESQLAstJoinCommand", "; node: ", { "pluginId": "@kbn/esql-ast", @@ -614,6 +620,8 @@ "section": "def-common.ESQLAstMetricsCommand", "text": "ESQLAstMetricsCommand" }, + " | ", + "ESQLAstJoinCommand", "; node: ", { "pluginId": "@kbn/esql-ast", @@ -754,6 +762,8 @@ "section": "def-common.ESQLAstMetricsCommand", "text": "ESQLAstMetricsCommand" }, + " | ", + "ESQLAstJoinCommand", "; node: ", { "pluginId": "@kbn/esql-ast", @@ -870,6 +880,8 @@ "section": "def-common.ESQLAstMetricsCommand", "text": "ESQLAstMetricsCommand" }, + " | ", + "ESQLAstJoinCommand", "; option: ", { "pluginId": "@kbn/esql-ast", diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 4f981e42aa068..3bf17b3c34754 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 6c93900b63f50..671b21cbfa0a1 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-12-06 +date: 2024-12-08 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 f0a71cb04f293..9d985d20bb771 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-12-06 +date: 2024-12-08 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 bc85793555482..d8b0408faf6e4 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-12-06 +date: 2024-12-08 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 7f9bd3bfda87e..fbcd51692aa34 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2024-12-06 +date: 2024-12-08 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 2436b61711a16..bd3a39bf18d89 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 25d9ce03ccd48..8159d6972487e 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2024-12-06 +date: 2024-12-08 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 94fc7190e9e97..0f2af18133972 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-12-06 +date: 2024-12-08 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 9d1553f52a1ee..e2de0a89cd1bf 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2024-12-06 +date: 2024-12-08 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 9a847762781aa..335cb06ffaa46 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_gen_ai_functional_testing.mdx b/api_docs/kbn_gen_ai_functional_testing.mdx index 0ddb9d75eaca9..33e71e69f8679 100644 --- a/api_docs/kbn_gen_ai_functional_testing.mdx +++ b/api_docs/kbn_gen_ai_functional_testing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-gen-ai-functional-testing title: "@kbn/gen-ai-functional-testing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/gen-ai-functional-testing plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/gen-ai-functional-testing'] --- import kbnGenAiFunctionalTestingObj from './kbn_gen_ai_functional_testing.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 9b5ba49703ae8..385360046777e 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2024-12-06 +date: 2024-12-08 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 de52646511b71..932d13da30cf7 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-12-06 +date: 2024-12-08 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 6386b08e4f418..a721c8d5ba523 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index 39c93b550d01f..03d2ddc9309e9 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index d470cd9a5188f..5d726eceffc72 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index daa0bfbd88804..c77d340f417c8 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2024-12-06 +date: 2024-12-08 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 9f1ae12090990..df0c705dd63f4 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2024-12-06 +date: 2024-12-08 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 da459f236bada..7f22d94080cb7 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 81fbd2ab1922e..ca5689a02994b 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2024-12-06 +date: 2024-12-08 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 c487b13553df3..f2c28323ea386 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2024-12-06 +date: 2024-12-08 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 1aed1df9124f1..0df08e839ec3a 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2024-12-06 +date: 2024-12-08 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 27bf16e6b0194..eb2ba03eb133f 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2024-12-06 +date: 2024-12-08 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 1fd8c6d2acfcb..9b7a67b6ae154 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2024-12-06 +date: 2024-12-08 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 b5dcd30aeb118..39a50d92589b1 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_adapter.mdx b/api_docs/kbn_index_adapter.mdx index 1dd4c216335f4..7ae8c3d4b7421 100644 --- a/api_docs/kbn_index_adapter.mdx +++ b/api_docs/kbn_index_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-adapter title: "@kbn/index-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-adapter plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-adapter'] --- import kbnIndexAdapterObj from './kbn_index_adapter.devdocs.json'; diff --git a/api_docs/kbn_index_lifecycle_management_common_shared.mdx b/api_docs/kbn_index_lifecycle_management_common_shared.mdx index 376d13f2d0dca..74a95171e8d88 100644 --- a/api_docs/kbn_index_lifecycle_management_common_shared.mdx +++ b/api_docs/kbn_index_lifecycle_management_common_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-lifecycle-management-common-shared title: "@kbn/index-lifecycle-management-common-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-lifecycle-management-common-shared plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-lifecycle-management-common-shared'] --- import kbnIndexLifecycleManagementCommonSharedObj from './kbn_index_lifecycle_management_common_shared.devdocs.json'; diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx index 2ea0a26299753..26b931622b0d1 100644 --- a/api_docs/kbn_index_management_shared_types.mdx +++ b/api_docs/kbn_index_management_shared_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management-shared-types title: "@kbn/index-management-shared-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management-shared-types plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management-shared-types'] --- import kbnIndexManagementSharedTypesObj from './kbn_index_management_shared_types.devdocs.json'; diff --git a/api_docs/kbn_inference_common.mdx b/api_docs/kbn_inference_common.mdx index 2982ec2d8b672..c1ab2ab60cfd6 100644 --- a/api_docs/kbn_inference_common.mdx +++ b/api_docs/kbn_inference_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference-common title: "@kbn/inference-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference-common plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-common'] --- import kbnInferenceCommonObj from './kbn_inference_common.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 08b13a8907a1e..13e1c22c38f64 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index de22cf3786ba7..fcad510e1f762 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-12-06 +date: 2024-12-08 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 2f278c45cd440..46e84a40bf7f8 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index 8a01100837bd7..eaa08d527ec11 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 61d2e8701365a..ec6f39f46cacc 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 160d94c71243a..79ac1e2620e93 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_item_buffer.mdx b/api_docs/kbn_item_buffer.mdx index 4e72db4900a01..0cf2a86a379ea 100644 --- a/api_docs/kbn_item_buffer.mdx +++ b/api_docs/kbn_item_buffer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-item-buffer title: "@kbn/item-buffer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/item-buffer plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/item-buffer'] --- import kbnItemBufferObj from './kbn_item_buffer.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 55d3f4b52fb12..7817286a036ab 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2024-12-06 +date: 2024-12-08 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 8b3898b7ba370..db2876feef882 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2024-12-06 +date: 2024-12-08 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 ac2e812de6e47..853344235ce9e 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 5b891793a1aa4..be844e5dd0b76 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index fdfed8e0efa0f..907297767bcd1 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation.mdx b/api_docs/kbn_language_documentation.mdx index 85a8189936c48..763b5f164d8fa 100644 --- a/api_docs/kbn_language_documentation.mdx +++ b/api_docs/kbn_language_documentation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation title: "@kbn/language-documentation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation'] --- import kbnLanguageDocumentationObj from './kbn_language_documentation.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 0a673b0fec690..6020fd79fd2f5 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 c3e5a2e1825be..1fbaa90bd326f 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-12-06 +date: 2024-12-08 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 7c1234ecfdebf..6883e1d1dca42 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2024-12-06 +date: 2024-12-08 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 4025437d81046..82e819e8c710a 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 71a313fe97bf7..6c6502340cf90 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-12-06 +date: 2024-12-08 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 3a53be0e4d63c..e2c540a3cec8f 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2024-12-06 +date: 2024-12-08 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 96408fe3f3ed0..39ae693ced7ed 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-12-06 +date: 2024-12-08 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.devdocs.json b/api_docs/kbn_management_settings_application.devdocs.json index 12a0227cdc241..c88cf83be225b 100644 --- a/api_docs/kbn_management_settings_application.devdocs.json +++ b/api_docs/kbn_management_settings_application.devdocs.json @@ -11,7 +11,7 @@ "label": "KibanaSettingsApplication", "description": [], "signature": [ - "({ docLinks, i18n, notifications, settings, theme, history, sectionRegistry, application, chrome, }: ", + "({ docLinks, i18n, notifications, settings, userProfile, theme, history, sectionRegistry, application, chrome, }: ", { "pluginId": "@kbn/management-settings-application", "scope": "public", @@ -30,7 +30,7 @@ "id": "def-public.KibanaSettingsApplication.$1", "type": "CompoundType", "tags": [], - "label": "{\n docLinks,\n i18n,\n notifications,\n settings,\n theme,\n history,\n sectionRegistry,\n application,\n chrome,\n}", + "label": "{\n docLinks,\n i18n,\n notifications,\n settings,\n userProfile,\n theme,\n history,\n sectionRegistry,\n application,\n chrome,\n}", "description": [], "signature": [ { diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index 6bf57b442d016..fefefe4c8e1cf 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-12-06 +date: 2024-12-08 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 9e176adad9d62..a7d2050d15a4d 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-12-06 +date: 2024-12-08 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 10930b46862bf..638a6cc9e2523 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-12-06 +date: 2024-12-08 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 ff29464ee3309..903e3b65fd8fc 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-12-06 +date: 2024-12-08 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 2066747a64401..4055adebdd8a3 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-12-06 +date: 2024-12-08 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 68699f3eb09c2..b01b1b5458cd9 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-12-06 +date: 2024-12-08 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.devdocs.json b/api_docs/kbn_management_settings_ids.devdocs.json index 5e248ad3ff958..a9745d04f0356 100644 --- a/api_docs/kbn_management_settings_ids.devdocs.json +++ b/api_docs/kbn_management_settings_ids.devdocs.json @@ -487,21 +487,6 @@ "trackAdoption": false, "initialIsOpen": false }, - { - "parentPluginId": "@kbn/management-settings-ids", - "id": "def-common.DISCOVER_SEARCH_FIELDS_FROM_SOURCE_ID", - "type": "string", - "tags": [], - "label": "DISCOVER_SEARCH_FIELDS_FROM_SOURCE_ID", - "description": [], - "signature": [ - "\"discover:searchFieldsFromSource\"" - ], - "path": "packages/kbn-management/settings/setting_ids/index.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, { "parentPluginId": "@kbn/management-settings-ids", "id": "def-common.DISCOVER_SEARCH_ON_PAGE_LOAD_ID", diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 5d9599d078865..921360662339f 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 138 | 0 | 137 | 0 | +| 137 | 0 | 136 | 0 | ## Common diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index e4d435a6ec5c7..60ff882f3a953 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-12-06 +date: 2024-12-08 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 79b4adb449686..909350353b2c9 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-12-06 +date: 2024-12-08 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 e1b2b634c1ce6..530e405f64c37 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-12-06 +date: 2024-12-08 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 4e3dafd617265..d95db1f3995d4 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_manifest.mdx b/api_docs/kbn_manifest.mdx index 61cd62345a5a6..0bd7950c25e11 100644 --- a/api_docs/kbn_manifest.mdx +++ b/api_docs/kbn_manifest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-manifest title: "@kbn/manifest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/manifest plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/manifest'] --- import kbnManifestObj from './kbn_manifest.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 34def0111cdcc..0c3726dea5743 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2024-12-06 +date: 2024-12-08 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 a5c5976a81fc3..f140aa071e3a6 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 51531482b83f7..db6fb1841b56b 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 e80cb90f5d946..1e1c9a6434285 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 47f405f966337..6ab3d1cbc0505 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-12-06 +date: 2024-12-08 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 2cc423a0815b6..9254930ffca25 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-12-06 +date: 2024-12-08 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 8bf4242f61f4c..133915f875ab9 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-12-06 +date: 2024-12-08 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 15d62f80b8b26..6439f3f35f132 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 1423a8220abc9..0d290df831643 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-12-06 +date: 2024-12-08 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 eb0e84fe47e06..3ff14ea53e6fe 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2024-12-06 +date: 2024-12-08 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 33ac1175dbf7f..4ea4ffb4b3aab 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 d35777148b2c0..9556c8e0d7988 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_field_stats_flyout.mdx b/api_docs/kbn_ml_field_stats_flyout.mdx index 9ab971b922b00..349d59992fe87 100644 --- a/api_docs/kbn_ml_field_stats_flyout.mdx +++ b/api_docs/kbn_ml_field_stats_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-field-stats-flyout title: "@kbn/ml-field-stats-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-field-stats-flyout plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-field-stats-flyout'] --- import kbnMlFieldStatsFlyoutObj from './kbn_ml_field_stats_flyout.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index cfd9a4e3ead2d..668afa622c871 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-12-06 +date: 2024-12-08 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 ef753e0ebf716..56bcdce48e470 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2024-12-06 +date: 2024-12-08 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 1a18815fe78a7..21170c907f5c5 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2024-12-06 +date: 2024-12-08 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 30b705060dbb1..3de236ae8c4ef 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-12-06 +date: 2024-12-08 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 9e3c1254d1865..ed4c83658c968 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2024-12-06 +date: 2024-12-08 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 865856b1a06ba..c8dc46cedde2e 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2024-12-06 +date: 2024-12-08 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 b45d2760ede95..d94778912183a 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_parse_interval.mdx b/api_docs/kbn_ml_parse_interval.mdx index 8440a021d2ab6..2ba180a8bbf90 100644 --- a/api_docs/kbn_ml_parse_interval.mdx +++ b/api_docs/kbn_ml_parse_interval.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-parse-interval title: "@kbn/ml-parse-interval" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-parse-interval plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-parse-interval'] --- import kbnMlParseIntervalObj from './kbn_ml_parse_interval.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index e68e36ead45dc..ef520802f826f 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 054c89a5cf798..e618befbbf1ec 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 fb3077b8b4643..7b1c80ad74db7 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 b4554a01f3d5a..640565c3d610b 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 21ac48ba3ef18..c0a6996f1a0c1 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 4dc4593b0cf7e..e4074560b5da0 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 894e133b66232..e2ff281706aaf 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 baccfe70487c8..1c03049df0fdb 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-12-06 +date: 2024-12-08 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 d7b28a1ea278c..c53c8cb1664fe 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_ml_validators.mdx b/api_docs/kbn_ml_validators.mdx index c946f0aee1149..1b3c9e4a492d7 100644 --- a/api_docs/kbn_ml_validators.mdx +++ b/api_docs/kbn_ml_validators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-validators title: "@kbn/ml-validators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-validators plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-validators'] --- import kbnMlValidatorsObj from './kbn_ml_validators.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index b9c776d8e6d18..b98b41e38c79e 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 017672be1aa13..73ad695231248 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2024-12-06 +date: 2024-12-08 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 33862fa6b2260..6cfdc4f77c47c 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index c8279932da0d5..a2640170665d6 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 7f6dd3c9163f1..8d1c8135c7387 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_rule_utils.mdx b/api_docs/kbn_observability_alerting_rule_utils.mdx index 0a38c0934dcfd..b8ad353e1d446 100644 --- a/api_docs/kbn_observability_alerting_rule_utils.mdx +++ b/api_docs/kbn_observability_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-rule-utils title: "@kbn/observability-alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-rule-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-rule-utils'] --- import kbnObservabilityAlertingRuleUtilsObj from './kbn_observability_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index d037d467cdad3..c2bc82c710fc0 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-12-06 +date: 2024-12-08 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 9cfefefcd8c1c..decdca8201c68 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_observability_logs_overview.mdx b/api_docs/kbn_observability_logs_overview.mdx index fa264d6f7bbe9..8fb17eed98b28 100644 --- a/api_docs/kbn_observability_logs_overview.mdx +++ b/api_docs/kbn_observability_logs_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-logs-overview title: "@kbn/observability-logs-overview" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-logs-overview plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-logs-overview'] --- import kbnObservabilityLogsOverviewObj from './kbn_observability_logs_overview.devdocs.json'; diff --git a/api_docs/kbn_observability_synthetics_test_data.mdx b/api_docs/kbn_observability_synthetics_test_data.mdx index 402213b3a0ab7..0894f83212771 100644 --- a/api_docs/kbn_observability_synthetics_test_data.mdx +++ b/api_docs/kbn_observability_synthetics_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-synthetics-test-data title: "@kbn/observability-synthetics-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-synthetics-test-data plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-synthetics-test-data'] --- import kbnObservabilitySyntheticsTestDataObj from './kbn_observability_synthetics_test_data.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 69e73fb5da2b9..47776abaaf11e 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-12-06 +date: 2024-12-08 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 723efa53e02c2..597b377014ddf 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-12-06 +date: 2024-12-08 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 3a8369053fcd3..bfa45c75094b8 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2024-12-06 +date: 2024-12-08 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 eb955ba0c7b49..a68d3bc4556d9 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2024-12-06 +date: 2024-12-08 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 cf3b5abd89ddb..1731e4939d8ed 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2024-12-06 +date: 2024-12-08 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 ce2ac00d178e1..0a00c2a0d7f8c 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-12-06 +date: 2024-12-08 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 57c80d4f31ff0..cae4528ff02bc 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2024-12-06 +date: 2024-12-08 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 50023026d4caf..63a61adda1be8 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-12-06 +date: 2024-12-08 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 83c9627ae06c2..0155c9cf789ff 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2024-12-06 +date: 2024-12-08 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 528647f2c74ee..8207fd6fa3471 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2024-12-06 +date: 2024-12-08 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 2b20a77fbf34e..731daffabdb33 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 65e2bbc2c1a2e..0c4395d41bac2 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_product_doc_artifact_builder.mdx b/api_docs/kbn_product_doc_artifact_builder.mdx index 661c5cd553c04..0adcc08296025 100644 --- a/api_docs/kbn_product_doc_artifact_builder.mdx +++ b/api_docs/kbn_product_doc_artifact_builder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-artifact-builder title: "@kbn/product-doc-artifact-builder" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-artifact-builder plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-artifact-builder'] --- import kbnProductDocArtifactBuilderObj from './kbn_product_doc_artifact_builder.devdocs.json'; diff --git a/api_docs/kbn_product_doc_common.mdx b/api_docs/kbn_product_doc_common.mdx index 5996b8c170c98..3a09cf3a07604 100644 --- a/api_docs/kbn_product_doc_common.mdx +++ b/api_docs/kbn_product_doc_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-common title: "@kbn/product-doc-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-common plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-common'] --- import kbnProductDocCommonObj from './kbn_product_doc_common.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index c95c4c0b5ca65..499ed85ff8989 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 9e79aa2e877d5..d2ef079e5ed31 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-12-06 +date: 2024-12-08 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 0ffcaa5da86fc..4e72583f09413 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 7d995c3c43621..77cfde23d7c82 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index a25f724a37c27..c0459bddf8b5e 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-12-06 +date: 2024-12-08 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 5ece35b4f228d..fe5ae226bd20d 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-12-06 +date: 2024-12-08 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 a592e4244e47e..0faaa93d45832 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-12-06 +date: 2024-12-08 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 9b72db91e9e3d..62dffb3241381 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-12-06 +date: 2024-12-08 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 535878fc2085b..52028663e3c53 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-12-06 +date: 2024-12-08 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 4488663a74e73..8d873a6f0114a 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index cecd666ce59d2..7650a73fadb44 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 679fec5e26388..6479106494587 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2024-12-06 +date: 2024-12-08 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 8cd83d345b345..f5dba539c9277 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2024-12-06 +date: 2024-12-08 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 52b655fee878e..5b685744fb24c 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2024-12-06 +date: 2024-12-08 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 5f81f144b7570..62adc07dd34c1 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2024-12-06 +date: 2024-12-08 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 3e97f5612464b..3b619e74db9fd 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index f1d05c260380c..d6e6218ec0a96 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index 2f99ca09ce63c..1afa85a6e464a 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-12-06 +date: 2024-12-08 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 432f79269fd0b..5c07301747222 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-12-06 +date: 2024-12-08 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 73c8b6acb4b51..3b88f50cdabd5 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-12-06 +date: 2024-12-08 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 bf77fab755460..24306e0d4137a 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-12-06 +date: 2024-12-08 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 3726502e5b6ce..3b12623500ef3 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-12-06 +date: 2024-12-08 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 c55be86aa3c15..f948b46ee59dc 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-12-06 +date: 2024-12-08 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 3e49180c4e4ff..9e81dc73fb003 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-12-06 +date: 2024-12-08 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 2e27fed77542c..4397969cd250d 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-12-06 +date: 2024-12-08 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 5c5346b618296..d6db703f11ef4 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-12-06 +date: 2024-12-08 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 09f244533b8c0..d40e362f2bf25 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_feature_flag_service.mdx b/api_docs/kbn_response_ops_feature_flag_service.mdx index 290d6e7599c18..bf6426d023133 100644 --- a/api_docs/kbn_response_ops_feature_flag_service.mdx +++ b/api_docs/kbn_response_ops_feature_flag_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-feature-flag-service title: "@kbn/response-ops-feature-flag-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-feature-flag-service plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-feature-flag-service'] --- import kbnResponseOpsFeatureFlagServiceObj from './kbn_response_ops_feature_flag_service.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_form.mdx b/api_docs/kbn_response_ops_rule_form.mdx index 0f3fb18657837..1e15947867eae 100644 --- a/api_docs/kbn_response_ops_rule_form.mdx +++ b/api_docs/kbn_response_ops_rule_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-form title: "@kbn/response-ops-rule-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-form plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-form'] --- import kbnResponseOpsRuleFormObj from './kbn_response_ops_rule_form.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_params.mdx b/api_docs/kbn_response_ops_rule_params.mdx index c391dffaa7e39..260185a1a4670 100644 --- a/api_docs/kbn_response_ops_rule_params.mdx +++ b/api_docs/kbn_response_ops_rule_params.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-params title: "@kbn/response-ops-rule-params" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-params plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-params'] --- import kbnResponseOpsRuleParamsObj from './kbn_response_ops_rule_params.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 0612c5ee453a1..8c8d6887fb7c0 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 4e809f3cfb37b..05a93d079043b 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index 68b4ef870baaa..97c78729dda35 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 880728e94388e..ad87e883999fb 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 d50a91d2e20c9..7e3046a04893d 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-12-06 +date: 2024-12-08 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 8b02482f6845c..d41aa154bd0d1 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 c57d9b37a78a7..29d1661a9869d 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_saved_search_component.mdx b/api_docs/kbn_saved_search_component.mdx index 41864970a19d2..82baa72c17cfd 100644 --- a/api_docs/kbn_saved_search_component.mdx +++ b/api_docs/kbn_saved_search_component.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-search-component title: "@kbn/saved-search-component" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-search-component plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-search-component'] --- import kbnSavedSearchComponentObj from './kbn_saved_search_component.devdocs.json'; diff --git a/api_docs/kbn_scout.mdx b/api_docs/kbn_scout.mdx index a90a01e466597..ef0afbf3e7153 100644 --- a/api_docs/kbn_scout.mdx +++ b/api_docs/kbn_scout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout title: "@kbn/scout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout'] --- import kbnScoutObj from './kbn_scout.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index 2157309622a32..a9c94365eddf3 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_components.mdx b/api_docs/kbn_search_api_keys_components.mdx index 853ae31aaed90..66cb7dbe9abf7 100644 --- a/api_docs/kbn_search_api_keys_components.mdx +++ b/api_docs/kbn_search_api_keys_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-components title: "@kbn/search-api-keys-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-components plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-components'] --- import kbnSearchApiKeysComponentsObj from './kbn_search_api_keys_components.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_server.mdx b/api_docs/kbn_search_api_keys_server.mdx index 0cfc221b88982..a90ceec93df04 100644 --- a/api_docs/kbn_search_api_keys_server.mdx +++ b/api_docs/kbn_search_api_keys_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-server title: "@kbn/search-api-keys-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-server plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-server'] --- import kbnSearchApiKeysServerObj from './kbn_search_api_keys_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index ea555e3faf6e0..1c9b421cad59f 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-12-06 +date: 2024-12-08 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 70aef3fb9a684..0c4a44da5d667 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-12-06 +date: 2024-12-08 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 53046f040310c..3f3b506b96f67 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-12-06 +date: 2024-12-08 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 6b30127f9de07..6cf7e74f0ac9f 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-12-06 +date: 2024-12-08 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 1a7b198a5209b..4d366205fd18b 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_shared_ui.mdx b/api_docs/kbn_search_shared_ui.mdx index ca0058e6a7e65..f8a8d9b511797 100644 --- a/api_docs/kbn_search_shared_ui.mdx +++ b/api_docs/kbn_search_shared_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-shared-ui title: "@kbn/search-shared-ui" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-shared-ui plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-shared-ui'] --- import kbnSearchSharedUiObj from './kbn_search_shared_ui.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 6ec2daa549a97..65a85a103bbbc 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index b62fd90cb74cb..b7addc04ae90b 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index 15450d29e4b0b..7afb119975218 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core_common.mdx b/api_docs/kbn_security_authorization_core_common.mdx index 1c4b3d0efb2cb..3e82afcc6548a 100644 --- a/api_docs/kbn_security_authorization_core_common.mdx +++ b/api_docs/kbn_security_authorization_core_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core-common title: "@kbn/security-authorization-core-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core-common plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core-common'] --- import kbnSecurityAuthorizationCoreCommonObj from './kbn_security_authorization_core_common.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 1cec292edfc60..89c542075f19e 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 55bb80ce1f209..d81eb10e69423 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-12-06 +date: 2024-12-08 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 13a7091dc6477..f526311795c7b 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-12-06 +date: 2024-12-08 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 d2f68985da7a7..3c25cd3a16df2 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-12-06 +date: 2024-12-08 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.devdocs.json b/api_docs/kbn_security_plugin_types_server.devdocs.json index 3594642ab41a3..b066cbead7eaf 100644 --- a/api_docs/kbn_security_plugin_types_server.devdocs.json +++ b/api_docs/kbn_security_plugin_types_server.devdocs.json @@ -4875,23 +4875,23 @@ }, { "plugin": "entityManager", - "path": "x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts" + "path": "x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts" }, { "plugin": "entityManager", - "path": "x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts" + "path": "x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts" }, { "plugin": "entityManager", - "path": "x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts" + "path": "x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts" }, { "plugin": "entityManager", - "path": "x-pack/plugins/entity_manager/server/routes/enablement/enable.ts" + "path": "x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/enable.ts" }, { "plugin": "entityManager", - "path": "x-pack/plugins/entity_manager/server/routes/enablement/disable.ts" + "path": "x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/disable.ts" }, { "plugin": "apm", diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 141a59ca43657..deab25afe7652 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index 32e52970ce1ed..70cc895ec666a 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index e72a52cd12d9c..11d88409e098a 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index db1c7cba7b35d..c2c2114ad0193 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-12-06 +date: 2024-12-08 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 f29bc0be8658f..359b80c11454b 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-12-06 +date: 2024-12-08 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 455f8f49cc103..99a55df0639a1 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-12-06 +date: 2024-12-08 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 00a1d93dba05c..aff9c39b67c4f 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index 7e3d38a759401..930b7a74f50bf 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index a1babe133bddc..86c35ac5ea83f 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2024-12-06 +date: 2024-12-08 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 9616e84c796c4..6fb4d430f9f7b 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-12-06 +date: 2024-12-08 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 e1139afe1d5c8..95d3f04331a95 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2024-12-06 +date: 2024-12-08 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 761783c8ac887..b0ac3ab72c50c 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 be495c2b2f9ee..a18079cacec1f 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 60e4bb630d6cd..67d09777d4df5 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 70df756507e3b..8255c7ae7e235 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2024-12-06 +date: 2024-12-08 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 6303587680963..394665ffe4dd1 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2024-12-06 +date: 2024-12-08 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 e3462430c7eab..c3193f06b7d92 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2024-12-06 +date: 2024-12-08 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 cf959794b4bb4..09b7de0f592b8 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 3a13819e3a173..d9a92b672b2d7 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2024-12-06 +date: 2024-12-08 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 14677e50673da..a2c9a505f1b9a 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2024-12-06 +date: 2024-12-08 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 795e9d47e4efa..a0f5721f99660 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2024-12-06 +date: 2024-12-08 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 8816b89a73e78..aa03f2b7cb73f 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 5888a2f75a3df..53c236ba812ae 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2024-12-06 +date: 2024-12-08 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 c7be7b88e4fb6..b85416de518f6 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2024-12-06 +date: 2024-12-08 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 cfd489ebead9d..438e43ad81cf8 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 a13c6663a52b6..185bf71e61b75 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2024-12-06 +date: 2024-12-08 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 87681c860122c..c6e0bca53dba8 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index 9d59d8ad72997..d28ed5d04280b 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index bbec68eaa0f8d..8739a6dc0addd 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index f10392c989063..9655a6afedb3b 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-12-06 +date: 2024-12-08 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 2f96d276d389e..a43f4e27ce56b 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-12-06 +date: 2024-12-08 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 8ee62126d76ab..5d3033d56d563 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-12-06 +date: 2024-12-08 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 7513689806085..7d4afcec96af3 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-12-06 +date: 2024-12-08 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 503d8f279b5de..670031fdb2609 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-12-06 +date: 2024-12-08 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 244301d6805de..843ea3fd02e77 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-12-06 +date: 2024-12-08 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 896a0247008d1..f28463e32218d 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2024-12-06 +date: 2024-12-08 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 6795588d15cbc..23ddb3688ae47 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2024-12-06 +date: 2024-12-08 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 82aa50186c35d..e9c51c3d0d65b 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2024-12-06 +date: 2024-12-08 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 7bbc0c00d9c9f..840eb469a3853 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2024-12-06 +date: 2024-12-08 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 434a2fc5af5cf..e2d2e9d4c4c48 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2024-12-06 +date: 2024-12-08 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 d524e23835a0a..595ca70e888a0 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 5a264b32f6f00..d2fd20d6d72d7 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-12-06 +date: 2024-12-08 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 e46308d5b985f..70e428afa23a1 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-12-06 +date: 2024-12-08 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 e4282c75db3bb..5b0462fd2c6eb 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2024-12-06 +date: 2024-12-08 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 c6d0d726147b2..075fb613cd1f2 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2024-12-06 +date: 2024-12-08 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 7157b33825a89..35d09676f85b7 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 8b681edf6a467..e0a42081fb0ae 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 30beb96b27f11..36136ee6bc21f 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2024-12-06 +date: 2024-12-08 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 6acb294e4ac53..d83b29307f7b2 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-12-06 +date: 2024-12-08 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 57982ce5b7ab1..25f9aa482b8ba 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2024-12-06 +date: 2024-12-08 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 fd08ea1d7acf7..5680ed994f064 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2024-12-06 +date: 2024-12-08 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 e52c69f393fb7..3d10f635bf425 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2024-12-06 +date: 2024-12-08 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 66a06759daa64..1673b1c4af8ea 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 d63b533473610..e5aed6399e471 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2024-12-06 +date: 2024-12-08 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 270e9ef3fd1a4..8d02fe0be10b1 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 cc8bb4d395b8a..6fd00462e3bf2 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2024-12-06 +date: 2024-12-08 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 af9d5878245d6..2f7e0817771b9 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 fbc82b1195531..069dfcb9fbaec 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2024-12-06 +date: 2024-12-08 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 764bef19531ae..d528ffafd4da5 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 40864d34f632f..55ac71143836e 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2024-12-06 +date: 2024-12-08 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 a163bdefa87aa..42ac104b0c211 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 f4bae211b54de..cb691cf4d7b9a 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2024-12-06 +date: 2024-12-08 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 76e10d48ab656..a790e78d121a5 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2024-12-06 +date: 2024-12-08 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 191786097af8e..bd281432706ea 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 c39517ab4c21b..73ebee8e29eb3 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 8ae7a30d93fb6..865add3b07ef6 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2024-12-06 +date: 2024-12-08 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 774a73cd21405..e4d710217ccbe 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2024-12-06 +date: 2024-12-08 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 3a07e4446f388..83dc4791ae154 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 a7f0a006d4359..8aa01e3acf25e 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2024-12-06 +date: 2024-12-08 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 d61b05c1b2c77..4ff2029daa23c 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2024-12-06 +date: 2024-12-08 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 a7bc1371cb900..7db5fa82847c8 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2024-12-06 +date: 2024-12-08 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 8fef17c858306..de5a46d70a443 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2024-12-06 +date: 2024-12-08 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 1653a99cdce71..b4f31672ebbd1 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 1977c552c18ac..a9e2d67a05887 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index af862bf19ec0d..5bf22d3826d56 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index d57105039543b..28963fdd249cd 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2024-12-06 +date: 2024-12-08 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 8ea257edf7cdd..94e741e17d659 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2024-12-06 +date: 2024-12-08 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 939cc9fa829d1..9006f72a90c57 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2024-12-06 +date: 2024-12-08 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 a2354c1502ae6..28faae1ba3889 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_sse_utils.mdx b/api_docs/kbn_sse_utils.mdx index 5b712987bf8e2..9440d87e8a46b 100644 --- a/api_docs/kbn_sse_utils.mdx +++ b/api_docs/kbn_sse_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils title: "@kbn/sse-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils'] --- import kbnSseUtilsObj from './kbn_sse_utils.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_client.mdx b/api_docs/kbn_sse_utils_client.mdx index 8a826f05b98bc..ecc41aece679e 100644 --- a/api_docs/kbn_sse_utils_client.mdx +++ b/api_docs/kbn_sse_utils_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-client title: "@kbn/sse-utils-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-client plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-client'] --- import kbnSseUtilsClientObj from './kbn_sse_utils_client.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index 5638fa8a975e3..78e9155eec9b5 100644 --- a/api_docs/kbn_sse_utils_server.mdx +++ b/api_docs/kbn_sse_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-server title: "@kbn/sse-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-server plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index af8e1829fa288..d485778c4a39d 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2024-12-06 +date: 2024-12-08 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 966009240ba38..4fdf351787b34 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2024-12-06 +date: 2024-12-08 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 aa626941b3bd6..10b34c0c1bdc2 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 0fd0fa14e20b3..641af0cc50205 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index 11d3d99593dcd..17045e59ccd21 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index c0eaed2931e65..a17beea8efb04 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2024-12-06 +date: 2024-12-08 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 1efad9614ef39..96e905f052287 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2024-12-06 +date: 2024-12-08 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 a00308f3ff0b2..64681737e5467 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-12-06 +date: 2024-12-08 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 ea6c59932d79e..72162df584c31 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2024-12-06 +date: 2024-12-08 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 01fb22998c870..c3cd84fec7652 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 0afc5aa229231..1faa4f0a42b44 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-12-06 +date: 2024-12-08 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 9cf0bf23b2a4b..b7d2cca603f20 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_transpose_utils.mdx b/api_docs/kbn_transpose_utils.mdx index 80b495301259c..fb308448162ff 100644 --- a/api_docs/kbn_transpose_utils.mdx +++ b/api_docs/kbn_transpose_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-transpose-utils title: "@kbn/transpose-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/transpose-utils plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/transpose-utils'] --- import kbnTransposeUtilsObj from './kbn_transpose_utils.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 47589a04765ec..68466de99e352 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 2dbb021396338..63490e157f56c 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 6498c5feee1fd..16409c3e23822 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2024-12-06 +date: 2024-12-08 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 939fb741cdd11..4bc505cdd98ef 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2024-12-06 +date: 2024-12-08 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 47ffe97f738ea..ccb1a264175b1 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2024-12-06 +date: 2024-12-08 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 96f2096596e9e..fa1f25e1e319c 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2024-12-06 +date: 2024-12-08 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 0f615cc088a56..3272ba2b16226 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2024-12-06 +date: 2024-12-08 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.devdocs.json b/api_docs/kbn_unified_data_table.devdocs.json index 0a59133908c68..e3125eeb4e0b6 100644 --- a/api_docs/kbn_unified_data_table.devdocs.json +++ b/api_docs/kbn_unified_data_table.devdocs.json @@ -823,7 +823,7 @@ "label": "UnifiedDataTable", "description": [], "signature": [ - "({ ariaLabelledBy, columns, columnsMeta, showColumnTokens, canDragAndDropColumns, configHeaderRowHeight, headerRowHeightState, onUpdateHeaderRowHeight, controlColumnIds, rowAdditionalLeadingControls, dataView, loadingState, onFilter, onResize, onSetColumns, onSort, rows, searchDescription, searchTitle, settings, showTimeCol, showFullScreenButton, sort, useNewFieldsApi, isSortEnabled, isPaginationEnabled, cellActionsTriggerId, cellActionsMetadata, cellActionsHandling, visibleCellActions, className, rowHeightState, onUpdateRowHeight, maxAllowedSampleSize, sampleSizeState, onUpdateSampleSize, isPlainRecord, rowsPerPageState, onUpdateRowsPerPage, onFieldEdited, services, renderCustomGridBody, renderCustomToolbar, externalControlColumns, trailingControlColumns, totalHits, onFetchMoreRecords, renderDocumentView, setExpandedDoc, expandedDoc, configRowHeight, showMultiFields, maxDocFieldsDisplayed, externalAdditionalControls, rowsPerPageOptions, externalCustomRenderers, additionalFieldGroups, consumer, componentsTourSteps, gridStyleOverride, rowLineHeightOverride, customGridColumnsConfiguration, enableComparisonMode, cellContext, renderCellPopover, getRowIndicator, dataGridDensityState, onUpdateDataGridDensity, onUpdatePageIndex, }: ", + "({ ariaLabelledBy, columns, columnsMeta, showColumnTokens, canDragAndDropColumns, configHeaderRowHeight, headerRowHeightState, onUpdateHeaderRowHeight, controlColumnIds, rowAdditionalLeadingControls, dataView, loadingState, onFilter, onResize, onSetColumns, onSort, rows, searchDescription, searchTitle, settings, showTimeCol, showFullScreenButton, sort, isSortEnabled, isPaginationEnabled, cellActionsTriggerId, cellActionsMetadata, cellActionsHandling, visibleCellActions, className, rowHeightState, onUpdateRowHeight, maxAllowedSampleSize, sampleSizeState, onUpdateSampleSize, isPlainRecord, rowsPerPageState, onUpdateRowsPerPage, onFieldEdited, services, renderCustomGridBody, renderCustomToolbar, externalControlColumns, trailingControlColumns, totalHits, onFetchMoreRecords, renderDocumentView, setExpandedDoc, expandedDoc, configRowHeight, showMultiFields, maxDocFieldsDisplayed, externalAdditionalControls, rowsPerPageOptions, externalCustomRenderers, additionalFieldGroups, consumer, componentsTourSteps, gridStyleOverride, rowLineHeightOverride, customGridColumnsConfiguration, enableComparisonMode, cellContext, renderCellPopover, getRowIndicator, dataGridDensityState, onUpdateDataGridDensity, onUpdatePageIndex, }: ", { "pluginId": "@kbn/unified-data-table", "scope": "public", @@ -842,7 +842,7 @@ "id": "def-public.UnifiedDataTable.$1", "type": "Object", "tags": [], - "label": "{\n ariaLabelledBy,\n columns,\n columnsMeta,\n showColumnTokens,\n canDragAndDropColumns,\n configHeaderRowHeight,\n headerRowHeightState,\n onUpdateHeaderRowHeight,\n controlColumnIds = CONTROL_COLUMN_IDS_DEFAULT,\n rowAdditionalLeadingControls,\n dataView,\n loadingState,\n onFilter,\n onResize,\n onSetColumns,\n onSort,\n rows,\n searchDescription,\n searchTitle,\n settings,\n showTimeCol,\n showFullScreenButton = true,\n sort,\n useNewFieldsApi,\n isSortEnabled = true,\n isPaginationEnabled = true,\n cellActionsTriggerId,\n cellActionsMetadata,\n cellActionsHandling = 'replace',\n visibleCellActions,\n className,\n rowHeightState,\n onUpdateRowHeight,\n maxAllowedSampleSize,\n sampleSizeState,\n onUpdateSampleSize,\n isPlainRecord = false,\n rowsPerPageState,\n onUpdateRowsPerPage,\n onFieldEdited,\n services,\n renderCustomGridBody,\n renderCustomToolbar,\n externalControlColumns, // TODO: deprecate in favor of rowAdditionalLeadingControls\n trailingControlColumns, // TODO: deprecate in favor of rowAdditionalLeadingControls\n totalHits,\n onFetchMoreRecords,\n renderDocumentView,\n setExpandedDoc,\n expandedDoc,\n configRowHeight,\n showMultiFields = true,\n maxDocFieldsDisplayed = 50,\n externalAdditionalControls,\n rowsPerPageOptions,\n externalCustomRenderers,\n additionalFieldGroups,\n consumer = 'discover',\n componentsTourSteps,\n gridStyleOverride,\n rowLineHeightOverride,\n customGridColumnsConfiguration,\n enableComparisonMode,\n cellContext,\n renderCellPopover,\n getRowIndicator,\n dataGridDensityState,\n onUpdateDataGridDensity,\n onUpdatePageIndex,\n}", + "label": "{\n ariaLabelledBy,\n columns,\n columnsMeta,\n showColumnTokens,\n canDragAndDropColumns,\n configHeaderRowHeight,\n headerRowHeightState,\n onUpdateHeaderRowHeight,\n controlColumnIds = CONTROL_COLUMN_IDS_DEFAULT,\n rowAdditionalLeadingControls,\n dataView,\n loadingState,\n onFilter,\n onResize,\n onSetColumns,\n onSort,\n rows,\n searchDescription,\n searchTitle,\n settings,\n showTimeCol,\n showFullScreenButton = true,\n sort,\n isSortEnabled = true,\n isPaginationEnabled = true,\n cellActionsTriggerId,\n cellActionsMetadata,\n cellActionsHandling = 'replace',\n visibleCellActions,\n className,\n rowHeightState,\n onUpdateRowHeight,\n maxAllowedSampleSize,\n sampleSizeState,\n onUpdateSampleSize,\n isPlainRecord = false,\n rowsPerPageState,\n onUpdateRowsPerPage,\n onFieldEdited,\n services,\n renderCustomGridBody,\n renderCustomToolbar,\n externalControlColumns, // TODO: deprecate in favor of rowAdditionalLeadingControls\n trailingControlColumns, // TODO: deprecate in favor of rowAdditionalLeadingControls\n totalHits,\n onFetchMoreRecords,\n renderDocumentView,\n setExpandedDoc,\n expandedDoc,\n configRowHeight,\n showMultiFields = true,\n maxDocFieldsDisplayed = 50,\n externalAdditionalControls,\n rowsPerPageOptions,\n externalCustomRenderers,\n additionalFieldGroups,\n consumer = 'discover',\n componentsTourSteps,\n gridStyleOverride,\n rowLineHeightOverride,\n customGridColumnsConfiguration,\n enableComparisonMode,\n cellContext,\n renderCellPopover,\n getRowIndicator,\n dataGridDensityState,\n onUpdateDataGridDensity,\n onUpdatePageIndex,\n}", "description": [], "signature": [ { @@ -870,7 +870,7 @@ "label": "useColumns", "description": [], "signature": [ - "({ capabilities, dataView, dataViews, setAppState, useNewFieldsApi, columns, sort, defaultOrder, settings, }: ", + "({ capabilities, dataView, dataViews, setAppState, columns, sort, defaultOrder, settings, }: ", { "pluginId": "@kbn/unified-data-table", "scope": "public", @@ -889,7 +889,7 @@ "id": "def-public.useColumns.$1", "type": "Object", "tags": [], - "label": "{\n capabilities,\n dataView,\n dataViews,\n setAppState,\n useNewFieldsApi,\n columns,\n sort,\n defaultOrder = 'desc',\n settings,\n}", + "label": "{\n capabilities,\n dataView,\n dataViews,\n setAppState,\n columns,\n sort,\n defaultOrder = 'desc',\n settings,\n}", "description": [], "signature": [ { @@ -1714,19 +1714,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.UnifiedDataTableProps.useNewFieldsApi", - "type": "boolean", - "tags": [], - "label": "useNewFieldsApi", - "description": [ - "\nHow the data is fetched" - ], - "path": "packages/kbn-unified-data-table/src/components/data_table.tsx", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-public.UnifiedDataTableProps.isPaginationEnabled", @@ -2978,17 +2965,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "@kbn/unified-data-table", - "id": "def-public.UseColumnsProps.useNewFieldsApi", - "type": "boolean", - "tags": [], - "label": "useNewFieldsApi", - "description": [], - "path": "packages/kbn-unified-data-table/src/hooks/use_data_grid_columns.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "@kbn/unified-data-table", "id": "def-public.UseColumnsProps.setAppState", diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index c498fb0e171f3..c3131a5f9f5ee 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 186 | 0 | 109 | 1 | +| 184 | 0 | 108 | 1 | ## Client diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index 98108a63dba3f..6f6da12d6c133 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-12-06 +date: 2024-12-08 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 e6ff76488e9f2..2c61ebffaf511 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-12-06 +date: 2024-12-08 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 64f64dcfc5cd2..e1be6e933dc43 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index e9ccb41aa9c40..3a99d7e1303b7 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 305148f2a5854..b248472540f72 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-12-06 +date: 2024-12-08 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 ede628fd2d911..553ad9d7b09ae 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2024-12-06 +date: 2024-12-08 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 7c0c4d213d7e4..7fd54ecb498a8 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2024-12-06 +date: 2024-12-08 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 9fc98f3429532..feb9caabfe11b 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2024-12-06 +date: 2024-12-08 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 759c57179e199..85975194a95ff 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2024-12-06 +date: 2024-12-08 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 87711d7671299..82d247342ffc8 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-12-06 +date: 2024-12-08 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 4241d08d0715b..51e438970b975 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 5fd6048c204ad..f3cad21bacbdf 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-12-06 +date: 2024-12-08 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 76bd80d875eff..d7245b98ea4f8 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index 8ede4291962d3..da5ea1dfc6bae 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 719b3cd5184c8..a752c55ddc132 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-12-06 +date: 2024-12-08 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 49b6b7b1503a6..c68307b29dc4f 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2024-12-06 +date: 2024-12-08 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 ed77397a79c09..07a8a3a767f73 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2024-12-06 +date: 2024-12-08 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 1443ffbb19977..2eb2821a93259 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2024-12-06 +date: 2024-12-08 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 92af2bed4e382..8dd69b939c367 100644 --- a/api_docs/kubernetes_security.mdx +++ b/api_docs/kubernetes_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kubernetesSecurity title: "kubernetesSecurity" image: https://source.unsplash.com/400x175/?github description: API docs for the kubernetesSecurity plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 0a90017cea645..8d4fd3da7943f 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2024-12-06 +date: 2024-12-08 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 55ddad38e8d5b..b1ffc9acd51d6 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2024-12-06 +date: 2024-12-08 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 8d12c88c48fbf..3083de68055f7 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2024-12-06 +date: 2024-12-08 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 f6159135da045..b04e8cf06df2a 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2024-12-06 +date: 2024-12-08 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 5d8d5a8d31731..1dee83eef373a 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-12-06 +date: 2024-12-08 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 781715045282a..c32a868b4514a 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/llm_tasks.mdx b/api_docs/llm_tasks.mdx index 8a50fffc3780f..b6b6e620eabd1 100644 --- a/api_docs/llm_tasks.mdx +++ b/api_docs/llm_tasks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/llmTasks title: "llmTasks" image: https://source.unsplash.com/400x175/?github description: API docs for the llmTasks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'llmTasks'] --- import llmTasksObj from './llm_tasks.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index d8bc94c7dbcdc..79bba12fc13dd 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 1e726cdbf0fd6..3b58b1eaddec4 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 7e67824b5ebfa..85afe3d43e4e1 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-12-06 +date: 2024-12-08 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 3b28a29d9186f..90011f8ae29e7 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 2e7c6bf2e29a3..aeef24dfcd9a5 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index b381a1fcb5e98..0bf35b95bbfd5 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2024-12-06 +date: 2024-12-08 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 5870c6eafb186..fb826bdeb961d 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-12-06 +date: 2024-12-08 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 6f75bf364267e..5a8942adba924 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2024-12-06 +date: 2024-12-08 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 c78ebd6904b77..0c0c49bf1e417 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-12-06 +date: 2024-12-08 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 8ed90a30a6942..2cee11a246db2 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2024-12-06 +date: 2024-12-08 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 74650535d624e..c8491c0521324 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2024-12-06 +date: 2024-12-08 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 a8d6afc078126..fd85a0831cfad 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2024-12-06 +date: 2024-12-08 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 1486f831c7cc9..215db70f3378f 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2024-12-06 +date: 2024-12-08 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 b19c331617c33..7ad04ffd66795 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-12-06 +date: 2024-12-08 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 f6eed356a303d..65849375b304d 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 4dc201e169ac8..fc80b200eadc5 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 60945c4ccdca0..f0c47eda762b8 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 40e2e3bb6b7fd..67f15ea754257 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index 5b6a6c9918a8b..6633eedc78444 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index aa87b9d800e15..72970e9eef0b9 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-12-06 +date: 2024-12-08 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 3c6aef3178a03..558269ec46097 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-12-06 +date: 2024-12-08 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 c7bce4c2bf710..5a4dcff470879 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-12-06 +date: 2024-12-08 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 13fde6f41b6a5..9747ed154a8e2 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2024-12-06 +date: 2024-12-08 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 f3e5e5468e1fd..4f77a739e1689 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-12-06 +date: 2024-12-08 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 531f632843807..1fb71c7427236 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 54979 | 240 | 41354 | 2039 | +| 54982 | 240 | 41356 | 2028 | ## Plugin Directory @@ -295,7 +295,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 24 | 0 | 24 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 149 | 2 | 143 | 20 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 10 | 0 | 8 | 4 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 32 | 0 | 28 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 34 | 0 | 29 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 9 | 0 | 6 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 1 | 0 | 1 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 43 | 0 | 42 | 1 | @@ -303,8 +303,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 8 | 0 | 8 | 0 | | | [@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) | - | 10 | 0 | 10 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 51 | 0 | 33 | 3 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 30 | 0 | 30 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 52 | 0 | 33 | 3 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 34 | 0 | 34 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 195 | 1 | 128 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 100 | 0 | 0 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 7 | 1 | @@ -513,7 +513,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 15 | 0 | 9 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 38 | 2 | 33 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 37 | 0 | 34 | 2 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 277 | 0 | 227 | 4 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 276 | 0 | 226 | 4 | | | [@elastic/docs](https://github.com/orgs/elastic/teams/docs) | - | 80 | 0 | 80 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 5 | 0 | 5 | 1 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 57 | 0 | 30 | 6 | @@ -529,7 +529,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 271 | 1 | 210 | 14 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 30 | 0 | 30 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 285 | 1 | 223 | 36 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 285 | 1 | 223 | 25 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 29 | 0 | 12 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 83 | 0 | 74 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 205 | 0 | 193 | 12 | @@ -587,7 +587,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 23 | 0 | 7 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 8 | 0 | 2 | 3 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 45 | 0 | 0 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 138 | 0 | 137 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 137 | 0 | 136 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 20 | 0 | 11 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 88 | 0 | 10 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 56 | 0 | 6 | 0 | @@ -806,7 +806,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 42 | 0 | 28 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 61 | 0 | 52 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 9 | 0 | 8 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 186 | 0 | 109 | 1 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the unified data table which can be integrated into apps | 184 | 0 | 108 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 18 | 0 | 17 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Contains functionality for the field list and field stats which can be integrated into apps | 317 | 0 | 288 | 8 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 13 | 0 | 9 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 4892998a10183..1521bdc2902c8 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-12-06 +date: 2024-12-08 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 23b9071b90781..31035379b014e 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/product_doc_base.mdx b/api_docs/product_doc_base.mdx index 04a0f4ca404af..2651c38873223 100644 --- a/api_docs/product_doc_base.mdx +++ b/api_docs/product_doc_base.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/productDocBase title: "productDocBase" image: https://source.unsplash.com/400x175/?github description: API docs for the productDocBase plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'productDocBase'] --- import productDocBaseObj from './product_doc_base.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index aa6832574b6a7..1d69e13ba338b 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2024-12-06 +date: 2024-12-08 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 580435914d046..cb4a883f11f32 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-12-06 +date: 2024-12-08 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 b7c3259dfb664..b2902855bb00f 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2024-12-06 +date: 2024-12-08 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 d621daf71e856..a6597664e3d43 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2024-12-06 +date: 2024-12-08 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 d909f57917b25..e80f1702a5abf 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2024-12-06 +date: 2024-12-08 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 6112a70d6dcc7..9c3e88384057a 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2024-12-06 +date: 2024-12-08 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 170fd711972f9..6a0966e2860bb 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2024-12-06 +date: 2024-12-08 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 60d13458dc9d1..f2c4ae70642a8 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2024-12-06 +date: 2024-12-08 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 b41168fa47a56..dfca992f25c4b 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2024-12-06 +date: 2024-12-08 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 dd9b68aa5033c..42f00081936b3 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2024-12-06 +date: 2024-12-08 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 0f6c19ddf2032..a7e301f4a6ecb 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2024-12-06 +date: 2024-12-08 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 51a844537defc..5d0c2ef6c4985 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2024-12-06 +date: 2024-12-08 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 272c4abae6d2e..8247bfe895789 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2024-12-06 +date: 2024-12-08 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 fe3ed38a4ea7f..253172ba83d39 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2024-12-06 +date: 2024-12-08 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 1dcdde85a1ee1..ce03de084ad06 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index c7fe93a504fc3..3b9cc3999d1f1 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index c457eac05662e..91241f9933692 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index 4485e60b37430..d38c224e1264d 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index c39decb91510c..f716291619da0 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index 2afa29aa66060..eeca68fce592b 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_navigation.mdx b/api_docs/search_navigation.mdx index e96b8dcda0019..edb285432f591 100644 --- a/api_docs/search_navigation.mdx +++ b/api_docs/search_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNavigation title: "searchNavigation" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNavigation plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNavigation'] --- import searchNavigationObj from './search_navigation.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index da7483ccb3d62..05e5e98d6a686 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 5fcab795f3e2a..3000a842f2dd3 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.devdocs.json b/api_docs/security.devdocs.json index 9d1c4fbc5f7a4..ed40895d05a0f 100644 --- a/api_docs/security.devdocs.json +++ b/api_docs/security.devdocs.json @@ -6483,23 +6483,23 @@ }, { "plugin": "entityManager", - "path": "x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts" + "path": "x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts" }, { "plugin": "entityManager", - "path": "x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts" + "path": "x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts" }, { "plugin": "entityManager", - "path": "x-pack/plugins/entity_manager/server/lib/auth/api_key/api_key.ts" + "path": "x-pack/platform/plugins/shared/entity_manager/server/lib/auth/api_key/api_key.ts" }, { "plugin": "entityManager", - "path": "x-pack/plugins/entity_manager/server/routes/enablement/enable.ts" + "path": "x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/enable.ts" }, { "plugin": "entityManager", - "path": "x-pack/plugins/entity_manager/server/routes/enablement/disable.ts" + "path": "x-pack/platform/plugins/shared/entity_manager/server/routes/enablement/disable.ts" }, { "plugin": "apm", diff --git a/api_docs/security.mdx b/api_docs/security.mdx index 50d8cfbc34e75..d435dce83c6de 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 5d81edfe370d6..6a937903d3aea 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 376234b91f463..a2bb5aeb18d7f 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-12-06 +date: 2024-12-08 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 2a8eb8b7d5da2..54a3288fb071b 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-12-06 +date: 2024-12-08 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 e3618cd1cb3b3..5a082f55db64b 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-12-06 +date: 2024-12-08 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 b2fa67d78367d..0a4e99c9f57d9 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-12-06 +date: 2024-12-08 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 75a0aec8ecf33..972c872ec300f 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-12-06 +date: 2024-12-08 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 4c0c18d16b2c1..3007a0d2e1698 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2024-12-06 +date: 2024-12-08 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 a7e8dfdf6e650..c89cb2c3c1346 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index eb24a3c2bde62..956c6b6b19f5e 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index adda19845be88..ed39ad019c3ef 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2024-12-06 +date: 2024-12-08 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 2a67dcde5f9b8..0c50774f7ca5f 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2024-12-06 +date: 2024-12-08 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 d7d81aaef2236..7446ad78868ab 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2024-12-06 +date: 2024-12-08 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 0852e374e9011..caa17c8e9c2be 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/streams.mdx b/api_docs/streams.mdx index 38402818f9e4d..9d0e55270db93 100644 --- a/api_docs/streams.mdx +++ b/api_docs/streams.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streams title: "streams" image: https://source.unsplash.com/400x175/?github description: API docs for the streams plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streams'] --- import streamsObj from './streams.devdocs.json'; diff --git a/api_docs/streams_app.mdx b/api_docs/streams_app.mdx index 511d2fe961fe4..448d90ee1acb1 100644 --- a/api_docs/streams_app.mdx +++ b/api_docs/streams_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streamsApp title: "streamsApp" image: https://source.unsplash.com/400x175/?github description: API docs for the streamsApp plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streamsApp'] --- import streamsAppObj from './streams_app.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index acb599b5dfe11..6561f34505d36 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2024-12-06 +date: 2024-12-08 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 b4319b8b734a8..cb5d5add77c5d 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2024-12-06 +date: 2024-12-08 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 344f5958147ce..c2163f75976c6 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 2a7f95260af04..e5a25759c256a 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 849438cbdad8b..1a1c0681fa461 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2024-12-06 +date: 2024-12-08 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 196cd334e8a86..f32783a2a7b7e 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2024-12-06 +date: 2024-12-08 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 ea416a9e427c9..f7304a65979fd 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2024-12-06 +date: 2024-12-08 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 6997b216ad64c..4468496de6844 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2024-12-06 +date: 2024-12-08 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 2c09ad7b8f41b..4a8f8cb9f2016 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2024-12-06 +date: 2024-12-08 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 ae7ca33b1f7fa..e3627b097069d 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.devdocs.json b/api_docs/unified_doc_viewer.devdocs.json index fc82efaa4e3d0..a62b48cdcb9fd 100644 --- a/api_docs/unified_doc_viewer.devdocs.json +++ b/api_docs/unified_doc_viewer.devdocs.json @@ -181,7 +181,7 @@ "\nCustom react hook for querying a single doc in ElasticSearch" ], "signature": [ - "({\n id,\n index,\n dataView,\n requestSource,\n textBasedHits,\n onBeforeFetch,\n onProcessRecord,\n}: ", + "({\n id,\n index,\n dataView,\n textBasedHits,\n onBeforeFetch,\n onProcessRecord,\n}: ", "EsDocSearchProps", ") => [", { @@ -210,7 +210,7 @@ "id": "def-public.useEsDocSearch.$1", "type": "Object", "tags": [], - "label": "{\n id,\n index,\n dataView,\n requestSource,\n textBasedHits,\n onBeforeFetch,\n onProcessRecord,\n}", + "label": "{\n id,\n index,\n dataView,\n textBasedHits,\n onBeforeFetch,\n onProcessRecord,\n}", "description": [], "signature": [ "EsDocSearchProps" diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index 5fdd58db9b3d0..7d7e73e57078f 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-12-06 +date: 2024-12-08 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 c6cb69dfddaff..35d412b992932 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2024-12-06 +date: 2024-12-08 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 5aebd5a685e96..2c536c958ac0d 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2024-12-06 +date: 2024-12-08 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 f24d774083adb..38d9dfaf31856 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2024-12-06 +date: 2024-12-08 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 d6ad8decb5798..dc4170cd0781e 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-12-06 +date: 2024-12-08 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 ef41259c8da1b..8408c82d3d893 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2024-12-06 +date: 2024-12-08 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 99123990f71c7..e7c82388d0175 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2024-12-06 +date: 2024-12-08 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 6691cad6fe45f..39505f5cac022 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2024-12-06 +date: 2024-12-08 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 0759c2b68fcfd..6e734270d68e3 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2024-12-06 +date: 2024-12-08 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 273e4d3f43895..170f6e9726eaf 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2024-12-06 +date: 2024-12-08 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 e47a96a00d9ce..d72bed3f09e42 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2024-12-06 +date: 2024-12-08 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 53f4edc6dbc5b..ba05453aebec2 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2024-12-06 +date: 2024-12-08 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 d2d8991e00e54..4e7ef467aa1a8 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2024-12-06 +date: 2024-12-08 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 9bed03ff724f5..4f3b18e3fbbc7 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2024-12-06 +date: 2024-12-08 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 b1328ccf6ec6d..58593e6edb5ae 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2024-12-06 +date: 2024-12-08 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 27b533fd4eff0..52bcb0296efc1 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2024-12-06 +date: 2024-12-08 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 ee1ad5c61ac00..d13a2efdd3f4b 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2024-12-06 +date: 2024-12-08 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 b95d4cd7f7edc..d2ab103b95a09 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2024-12-06 +date: 2024-12-08 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 4545f56af63bb..9261d7b4e0322 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2024-12-06 +date: 2024-12-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From 54375bd8183a7c4a3fab676eb6ec2a9e0a689b79 Mon Sep 17 00:00:00 2001 From: Ievgen Sorokopud Date: Sun, 8 Dec 2024 23:04:39 +0100 Subject: [PATCH 141/141] [Rules migration] Add functionality to display matched prebuilt rules details (#11360) (#203035) ## Summary [Internal link](https://github.com/elastic/security-team/issues/10820) to the feature details These changes add functionality that allows to display matched prebuilt rules details. ### New route There is a new route `/internal/siem_migrations/rules/{migration_id}/prebuilt_rules` that will return all prebuilt rules matched by translated rules within a specific migration. ### UI changes The rule migration details flyout was updated to display matched prebuilt rule data in both `Translation` and `Overview` tabs. https://github.com/user-attachments/assets/3da49653-e0ab-4d8b-892e-dd05cf73743b ### Other changes Also, as part of this PR, batching of a rule installation/creation was added. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Sergi Massaneda --- .../common/api/quickstart_client.gen.ts | 23 +++ .../common/siem_migrations/constants.ts | 2 + .../model/api/rules/rule_migration.gen.ts | 19 ++ .../api/rules/rule_migration.schema.yaml | 27 +++ .../model/rule_migration.gen.ts | 16 ++ .../model/rule_migration.schema.yaml | 13 ++ .../common/siem_migrations/rules/utils.ts | 36 ++++ .../public/siem_migrations/rules/api/index.ts | 19 ++ .../components/rule_details_flyout/index.tsx | 70 ++++---- .../translation_tab/index.tsx | 165 ++++++++++-------- .../translation_tab/translations.ts | 7 + .../rules/components/rules_table/index.tsx | 9 +- .../use_migration_rule_preview_flyout.tsx | 29 ++- .../rules/logic/translations.ts | 7 + .../logic/use_get_migration_prebuilt_rules.ts | 39 +++++ .../siem_migrations/rules/api/constants.ts | 10 ++ .../rules/api/get_prebuilt_rules.ts | 73 ++++++++ .../lib/siem_migrations/rules/api/index.ts | 2 + .../rules/api/util/installation.ts | 156 ++++++++--------- .../rules/api/util/prebuilt_rules.ts | 84 +++++++++ .../data/rule_migrations_data_rules_client.ts | 7 +- .../services/security_solution_api.gen.ts | 25 +++ 22 files changed, 638 insertions(+), 200 deletions(-) create mode 100644 x-pack/plugins/security_solution/common/siem_migrations/rules/utils.ts create mode 100644 x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_prebuilt_rules.ts create mode 100644 x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/constants.ts create mode 100644 x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get_prebuilt_rules.ts create mode 100644 x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/prebuilt_rules.ts diff --git a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts index 0ef67f164409b..b5d72fc1ef207 100644 --- a/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts +++ b/x-pack/plugins/security_solution/common/api/quickstart_client.gen.ts @@ -363,6 +363,8 @@ import type { GetRuleMigrationRequestQueryInput, GetRuleMigrationRequestParamsInput, GetRuleMigrationResponse, + GetRuleMigrationPrebuiltRulesRequestParamsInput, + GetRuleMigrationPrebuiltRulesResponse, GetRuleMigrationResourcesRequestQueryInput, GetRuleMigrationResourcesRequestParamsInput, GetRuleMigrationResourcesResponse, @@ -1431,6 +1433,24 @@ finalize it. }) .catch(catchAxiosErrorFormatAndThrow); } + /** + * Retrieves all available prebuilt rules (installed and installable) + */ + async getRuleMigrationPrebuiltRules(props: GetRuleMigrationPrebuiltRulesProps) { + this.log.info(`${new Date().toISOString()} Calling API GetRuleMigrationPrebuiltRules`); + return this.kbnClient + .request({ + path: replaceParams( + '/internal/siem_migrations/rules/{migration_id}/prebuilt_rules', + props.params + ), + headers: { + [ELASTIC_HTTP_VERSION_HEADER]: '1', + }, + method: 'GET', + }) + .catch(catchAxiosErrorFormatAndThrow); + } /** * Retrieves resources for an existing SIEM rules migration */ @@ -2396,6 +2416,9 @@ export interface GetRuleMigrationProps { query: GetRuleMigrationRequestQueryInput; params: GetRuleMigrationRequestParamsInput; } +export interface GetRuleMigrationPrebuiltRulesProps { + params: GetRuleMigrationPrebuiltRulesRequestParamsInput; +} export interface GetRuleMigrationResourcesProps { query: GetRuleMigrationResourcesRequestQueryInput; params: GetRuleMigrationResourcesRequestParamsInput; diff --git a/x-pack/plugins/security_solution/common/siem_migrations/constants.ts b/x-pack/plugins/security_solution/common/siem_migrations/constants.ts index e04130e7f44d7..e947dda4bbcc2 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/constants.ts +++ b/x-pack/plugins/security_solution/common/siem_migrations/constants.ts @@ -23,6 +23,8 @@ export const SIEM_RULE_MIGRATION_STOP_PATH = `${SIEM_RULE_MIGRATION_PATH}/stop` export const SIEM_RULE_MIGRATION_INSTALL_PATH = `${SIEM_RULE_MIGRATION_PATH}/install` as const; export const SIEM_RULE_MIGRATION_INSTALL_TRANSLATED_PATH = `${SIEM_RULE_MIGRATION_PATH}/install_translated` as const; +export const SIEM_RULE_MIGRATIONS_PREBUILT_RULES_PATH = + `${SIEM_RULE_MIGRATION_PATH}/prebuilt_rules` as const; export const SIEM_RULE_MIGRATION_RESOURCES_PATH = `${SIEM_RULE_MIGRATION_PATH}/resources` as const; diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts index 8a549e8e11817..58944ff7f2f95 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.gen.ts @@ -26,6 +26,7 @@ import { OriginalRule, RuleMigration, RuleMigrationTranslationStats, + PrebuiltRuleVersion, RuleMigrationResourceData, RuleMigrationResourceType, RuleMigrationResource, @@ -76,6 +77,24 @@ export const GetRuleMigrationResponse = z.object({ total: z.number(), data: z.array(RuleMigration), }); + +export type GetRuleMigrationPrebuiltRulesRequestParams = z.infer< + typeof GetRuleMigrationPrebuiltRulesRequestParams +>; +export const GetRuleMigrationPrebuiltRulesRequestParams = z.object({ + migration_id: NonEmptyString, +}); +export type GetRuleMigrationPrebuiltRulesRequestParamsInput = z.input< + typeof GetRuleMigrationPrebuiltRulesRequestParams +>; + +/** + * The map of prebuilt rules, with the rules id as a key + */ +export type GetRuleMigrationPrebuiltRulesResponse = z.infer< + typeof GetRuleMigrationPrebuiltRulesResponse +>; +export const GetRuleMigrationPrebuiltRulesResponse = z.object({}).catchall(PrebuiltRuleVersion); export type GetRuleMigrationResourcesRequestQuery = z.infer< typeof GetRuleMigrationResourcesRequestQuery >; diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml index 8b9d264cf4104..dff6089b2b48f 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/api/rules/rule_migration.schema.yaml @@ -355,6 +355,33 @@ paths: 204: description: Indicates the migration id was not found running. + /internal/siem_migrations/rules/{migration_id}/prebuilt_rules: + get: + summary: Retrieves all prebuilt rules for a specific migration + operationId: GetRuleMigrationPrebuiltRules + x-codegen-enabled: true + x-internal: true + description: Retrieves all available prebuilt rules (installed and installable) + tags: + - SIEM Rule Migrations + parameters: + - name: migration_id + in: path + required: true + schema: + description: The migration id to retrieve prebuilt rules for + $ref: '../../../../../common/api/model/primitives.schema.yaml#/components/schemas/NonEmptyString' + responses: + 200: + description: Indicates prebuilt rules have been retrieved correctly. + content: + application/json: + schema: + type: object + description: The map of prebuilt rules, with the rules id as a key + additionalProperties: + $ref: '../../rule_migration.schema.yaml#/components/schemas/PrebuiltRuleVersion' + # Rule migration resources APIs /internal/siem_migrations/rules/{migration_id}/resources: diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts index b52cdb1c91f19..60220bf054a12 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.gen.ts @@ -17,6 +17,7 @@ import { z } from '@kbn/zod'; import { NonEmptyString } from '../../api/model/primitives.gen'; +import { RuleResponse } from '../../api/detection_engine/model/rule_schema/rule_schemas.gen'; /** * The original rule vendor identifier. @@ -117,6 +118,21 @@ export const ElasticRule = z.object({ export type ElasticRulePartial = z.infer; export const ElasticRulePartial = ElasticRule.partial(); +/** + * The prebuilt rule version. + */ +export type PrebuiltRuleVersion = z.infer; +export const PrebuiltRuleVersion = z.object({ + /** + * The latest available version of prebuilt rule. + */ + target: RuleResponse, + /** + * The currently installed version of prebuilt rule. + */ + current: RuleResponse.optional(), +}); + /** * The rule translation result. */ diff --git a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml index 4c88c66fc604d..e13e9b1d0ed75 100644 --- a/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml +++ b/x-pack/plugins/security_solution/common/siem_migrations/model/rule_migration.schema.yaml @@ -97,6 +97,19 @@ components: $ref: '#/components/schemas/ElasticRule' x-modify: partial + PrebuiltRuleVersion: + type: object + description: The prebuilt rule version. + required: + - target + properties: + target: + description: The latest available version of prebuilt rule. + $ref: '../../../common/api/detection_engine/model/rule_schema/rule_schemas.schema.yaml#/components/schemas/RuleResponse' + current: + description: The currently installed version of prebuilt rule. + $ref: '../../../common/api/detection_engine/model/rule_schema/rule_schemas.schema.yaml#/components/schemas/RuleResponse' + RuleMigration: description: The rule migration document object. allOf: diff --git a/x-pack/plugins/security_solution/common/siem_migrations/rules/utils.ts b/x-pack/plugins/security_solution/common/siem_migrations/rules/utils.ts new file mode 100644 index 0000000000000..a9b8666b19981 --- /dev/null +++ b/x-pack/plugins/security_solution/common/siem_migrations/rules/utils.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { Severity } from '../../api/detection_engine'; +import { DEFAULT_TRANSLATION_FIELDS, DEFAULT_TRANSLATION_SEVERITY } from '../constants'; +import type { ElasticRule, ElasticRulePartial } from '../model/rule_migration.gen'; + +export type MigrationPrebuiltRule = ElasticRulePartial & + Required>; + +export type MigrationCustomRule = ElasticRulePartial & + Required>; + +export const isMigrationPrebuiltRule = (rule?: ElasticRule): rule is MigrationPrebuiltRule => + !!(rule?.title && rule?.description && rule?.prebuilt_rule_id); + +export const isMigrationCustomRule = (rule?: ElasticRule): rule is MigrationCustomRule => + !isMigrationPrebuiltRule(rule) && + !!(rule?.title && rule?.description && rule?.query && rule?.query_language); + +export const convertMigrationCustomRuleToSecurityRulePayload = (rule: MigrationCustomRule) => { + return { + type: rule.query_language, + language: rule.query_language, + query: rule.query, + name: rule.title, + description: rule.description, + + ...DEFAULT_TRANSLATION_FIELDS, + severity: (rule.severity as Severity) ?? DEFAULT_TRANSLATION_SEVERITY, + }; +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts index db6f0117d4a77..ac9e49ff861fc 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/api/index.ts @@ -19,6 +19,7 @@ import { SIEM_RULE_MIGRATION_START_PATH, SIEM_RULE_MIGRATION_STATS_PATH, SIEM_RULE_MIGRATION_TRANSLATION_STATS_PATH, + SIEM_RULE_MIGRATIONS_PREBUILT_RULES_PATH, } from '../../../../common/siem_migrations/constants'; import type { CreateRuleMigrationRequestBody, @@ -30,6 +31,7 @@ import type { InstallMigrationRulesResponse, StartRuleMigrationRequestBody, GetRuleMigrationStatsResponse, + GetRuleMigrationPrebuiltRulesResponse, } from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; export interface GetRuleMigrationStatsParams { @@ -192,3 +194,20 @@ export const installTranslatedMigrationRules = async ({ { version: '1', signal } ); }; + +export interface GetRuleMigrationsPrebuiltRulesParams { + /** `id` of the migration to install rules for */ + migrationId: string; + /** Optional AbortSignal for cancelling request */ + signal?: AbortSignal; +} +/** Retrieves all prebuilt rules matched within a specific migration. */ +export const getRuleMigrationsPrebuiltRules = async ({ + migrationId, + signal, +}: GetRuleMigrationsPrebuiltRulesParams): Promise => { + return KibanaServices.get().http.get( + replaceParams(SIEM_RULE_MIGRATIONS_PREBUILT_RULES_PATH, { migration_id: migrationId }), + { version: '1', signal } + ); +}; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx index 9353d0063b8ab..8fea17b51cb0e 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/index.tsx @@ -24,19 +24,12 @@ import { } from '@elastic/eui'; import type { EuiTabbedContentTab, EuiTabbedContentProps, EuiFlyoutProps } from '@elastic/eui'; -import { - DEFAULT_TRANSLATION_SEVERITY, - DEFAULT_TRANSLATION_FIELDS, -} from '../../../../../common/siem_migrations/constants'; import type { RuleMigration } from '../../../../../common/siem_migrations/model/rule_migration.gen'; import { RuleOverviewTab, useOverviewTabSections, } from '../../../../detection_engine/rule_management/components/rule_details/rule_overview_tab'; -import { - type RuleResponse, - type Severity, -} from '../../../../../common/api/detection_engine/model/rule_schema'; +import type { RuleResponse } from '../../../../../common/api/detection_engine/model/rule_schema'; import * as i18n from './translations'; import { @@ -44,6 +37,10 @@ import { LARGE_DESCRIPTION_LIST_COLUMN_WIDTHS, } from './constants'; import { TranslationTab } from './translation_tab'; +import { + convertMigrationCustomRuleToSecurityRulePayload, + isMigrationCustomRule, +} from '../../../../../common/siem_migrations/rules/utils'; /* * Fixes tabs to the top and allows the content to scroll. @@ -67,6 +64,7 @@ export const TabContentPadding: FC> = ({ children }) interface MigrationRuleDetailsFlyoutProps { ruleActions?: React.ReactNode; ruleMigration: RuleMigration; + matchedPrebuiltRule?: RuleResponse; size?: EuiFlyoutProps['size']; extraTabs?: EuiTabbedContentTab[]; closeFlyout: () => void; @@ -76,26 +74,21 @@ export const MigrationRuleDetailsFlyout: React.FC { const { expandedOverviewSections, toggleOverviewSection } = useOverviewTabSections(); - const rule: RuleResponse = useMemo(() => { - const esqlLanguage = ruleMigration.elastic_rule?.query_language ?? 'esql'; - return { - type: esqlLanguage, - language: esqlLanguage, - name: ruleMigration.elastic_rule?.title, - description: ruleMigration.elastic_rule?.description, - query: ruleMigration.elastic_rule?.query, - - ...DEFAULT_TRANSLATION_FIELDS, - severity: - (ruleMigration.elastic_rule?.severity as Severity) ?? DEFAULT_TRANSLATION_SEVERITY, - } as RuleResponse; // TODO: we need to adjust RuleOverviewTab to allow partial RuleResponse as a parameter - }, [ruleMigration]); + const rule = useMemo(() => { + if (isMigrationCustomRule(ruleMigration.elastic_rule)) { + return convertMigrationCustomRuleToSecurityRulePayload( + ruleMigration.elastic_rule + ) as RuleResponse; // TODO: we need to adjust RuleOverviewTab to allow partial RuleResponse as a parameter; + } + return matchedPrebuiltRule; + }, [matchedPrebuiltRule, ruleMigration]); const translationTab: EuiTabbedContentTab = useMemo( () => ({ @@ -103,11 +96,14 @@ export const MigrationRuleDetailsFlyout: React.FC - + ), }), - [ruleMigration] + [matchedPrebuiltRule, ruleMigration] ); const overviewTab: EuiTabbedContentTab = useMemo( @@ -116,16 +112,18 @@ export const MigrationRuleDetailsFlyout: React.FC - + {rule && ( + + )} ), }), @@ -166,7 +164,9 @@ export const MigrationRuleDetailsFlyout: React.FC -

      {rule.name}

      +

      + {rule?.name ?? ruleMigration.original_rule.title} +

      diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/index.tsx index a2e590b85ac09..a80480b8837bb 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React from 'react'; +import React, { useMemo } from 'react'; import { EuiAccordion, EuiBadge, @@ -20,6 +20,7 @@ import { } from '@elastic/eui'; import { css } from '@emotion/css'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { RuleResponse } from '../../../../../../common/api/detection_engine'; import type { RuleMigration } from '../../../../../../common/siem_migrations/model/rule_migration.gen'; import { TranslationTabHeader } from './header'; import { MigrationRuleQuery } from './migration_rule_query'; @@ -31,82 +32,98 @@ import { interface TranslationTabProps { ruleMigration: RuleMigration; + matchedPrebuiltRule?: RuleResponse; } -export const TranslationTab: React.FC = React.memo(({ ruleMigration }) => { - const { euiTheme } = useEuiTheme(); +export const TranslationTab: React.FC = React.memo( + ({ ruleMigration, matchedPrebuiltRule }) => { + const { euiTheme } = useEuiTheme(); - const name = ruleMigration.elastic_rule?.title ?? ruleMigration.original_rule.title; - const originalQuery = ruleMigration.original_rule.query; - const elasticQuery = ruleMigration.elastic_rule?.query ?? 'Prebuilt rule query'; + const name = useMemo( + () => ruleMigration.elastic_rule?.title ?? ruleMigration.original_rule.title, + [ruleMigration.elastic_rule?.title, ruleMigration.original_rule.title] + ); + const originalQuery = ruleMigration.original_rule.query; + const elasticQuery = useMemo(() => { + let query = ruleMigration.elastic_rule?.query; + if (matchedPrebuiltRule && matchedPrebuiltRule.type !== 'machine_learning') { + query = matchedPrebuiltRule.query; + } + return query ?? ''; + }, [matchedPrebuiltRule, ruleMigration.elastic_rule?.query]); - return ( - <> - - - - - - } - initialIsOpen={true} - > - - - - - - - -

      - -

      -
      -
      - - {}} - onClickAriaLabel={'Click to update translation status'} - > - {convertTranslationResultIntoText(ruleMigration.translation_result)} - - -
      -
      - - - - + + + + + + } + initialIsOpen={true} + > + + + + + + + +

      + +

      +
      +
      + + {}} + onClickAriaLabel={'Click to update translation status'} + > + {convertTranslationResultIntoText(ruleMigration.translation_result)} + + +
      +
      + + + + + + - - - - - - - -
      -
      -
      - - ); -}); + + + +
      +
      +
      +
      +
      + + ); + } +); TranslationTab.displayName = 'TranslationTab'; diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/translations.ts index e7532a5a8b2e3..1592a80d32478 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/translations.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rule_details_flyout/translation_tab/translations.ts @@ -28,6 +28,13 @@ export const SPLUNK_QUERY_TITLE = i18n.translate( } ); +export const PREBUILT_RULE_QUERY_TITLE = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.translationDetails.translationTab.prebuiltRuleQueryTitle', + { + defaultMessage: 'Prebuilt rule query', + } +); + export const ESQL_TRANSLATION_TITLE = i18n.translate( 'xpack.securitySolution.siemMigrations.rules.translationDetails.translationTab.esqlTranslationTitle', { diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx index e7af1af93e2ba..13b451c2918d8 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/components/rules_table/index.tsx @@ -26,6 +26,7 @@ import { useInstallMigrationRules } from '../../logic/use_install_migration_rule import { useGetMigrationRules } from '../../logic/use_get_migration_rules'; import { useInstallTranslatedMigrationRules } from '../../logic/use_install_translated_migration_rules'; import { useGetMigrationTranslationStats } from '../../logic/use_get_migration_translation_stats'; +import { useGetMigrationPrebuiltRules } from '../../logic/use_get_migration_prebuilt_rules'; import * as logicI18n from '../../logic/translations'; import { BulkActions } from './bulk_actions'; import { SearchField } from './search_field'; @@ -53,6 +54,9 @@ export const MigrationRulesTable: React.FC = React.mem const { data: translationStats, isLoading: isStatsLoading } = useGetMigrationTranslationStats(migrationId); + const { data: prebuiltRules = {}, isLoading: isPrebuiltRulesLoading } = + useGetMigrationPrebuiltRules(migrationId); + const { data: { ruleMigrations, total } = { ruleMigrations: [], total: 0 }, isLoading: isDataLoading, @@ -129,6 +133,7 @@ export const MigrationRulesTable: React.FC = React.mem migrationRuleDetailsFlyout: rulePreviewFlyout, openMigrationRuleDetails: openRulePreview, } = useMigrationRuleDetailsFlyout({ + prebuiltRules, ruleActionsFactory, }); @@ -138,6 +143,8 @@ export const MigrationRulesTable: React.FC = React.mem installMigrationRule: installSingleRule, }); + const isLoading = isStatsLoading || isPrebuiltRulesLoading || isDataLoading || isTableLoading; + return ( <> = React.mem ; ruleActionsFactory: (ruleMigration: RuleMigration, closeRulePreview: () => void) => ReactNode; extraTabsFactory?: (ruleMigration: RuleMigration) => EuiTabbedContentTab[]; } @@ -23,10 +28,12 @@ interface UseMigrationRuleDetailsFlyoutResult { } export function useMigrationRuleDetailsFlyout({ + prebuiltRules, extraTabsFactory, ruleActionsFactory, }: UseMigrationRuleDetailsFlyoutParams): UseMigrationRuleDetailsFlyoutResult { const [ruleMigration, setMigrationRuleForPreview] = useState(); + const [matchedPrebuiltRule, setMatchedPrebuiltRule] = useState(); const closeMigrationRuleDetails = useCallback(() => setMigrationRuleForPreview(undefined), []); const ruleActions = useMemo( () => ruleMigration && ruleActionsFactory(ruleMigration, closeMigrationRuleDetails), @@ -37,19 +44,33 @@ export function useMigrationRuleDetailsFlyout({ [ruleMigration, extraTabsFactory] ); + const openMigrationRuleDetails = useCallback( + (rule: RuleMigration) => { + setMigrationRuleForPreview(rule); + + // Find matched prebuilt rule if any and prioritize its installed version + const matchedPrebuiltRuleVersion = rule.elastic_rule?.prebuilt_rule_id + ? prebuiltRules[rule.elastic_rule.prebuilt_rule_id] + : undefined; + const prebuiltRule = + matchedPrebuiltRuleVersion?.current ?? matchedPrebuiltRuleVersion?.target; + setMatchedPrebuiltRule(prebuiltRule); + }, + [prebuiltRules] + ); + return { migrationRuleDetailsFlyout: ruleMigration && ( ), - openMigrationRuleDetails: useCallback((rule: RuleMigration) => { - setMigrationRuleForPreview(rule); - }, []), + openMigrationRuleDetails, closeMigrationRuleDetails, }; } diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/translations.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/translations.ts index 3b13daa8f0682..3f92da4e8ddcc 100644 --- a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/translations.ts +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/translations.ts @@ -7,6 +7,13 @@ import { i18n } from '@kbn/i18n'; +export const GET_MIGRATION_PREBUILT_RULES_FAILURE = i18n.translate( + 'xpack.securitySolution.siemMigrations.rules.getMigrationPrebuiltRulesFailDescription', + { + defaultMessage: 'Failed to fetch prebuilt rules', + } +); + export const GET_MIGRATION_RULES_FAILURE = i18n.translate( 'xpack.securitySolution.siemMigrations.rules.getMigrationRulesFailDescription', { diff --git a/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_prebuilt_rules.ts b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_prebuilt_rules.ts new file mode 100644 index 0000000000000..a855d53555551 --- /dev/null +++ b/x-pack/plugins/security_solution/public/siem_migrations/rules/logic/use_get_migration_prebuilt_rules.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 { replaceParams } from '@kbn/openapi-common/shared'; +import { useQuery } from '@tanstack/react-query'; +import { useAppToasts } from '../../../common/hooks/use_app_toasts'; +import type { GetRuleMigrationPrebuiltRulesResponse } from '../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { SIEM_RULE_MIGRATIONS_PREBUILT_RULES_PATH } from '../../../../common/siem_migrations/constants'; +import { getRuleMigrationsPrebuiltRules } from '../api'; +import { DEFAULT_QUERY_OPTIONS } from './constants'; +import * as i18n from './translations'; + +export const useGetMigrationPrebuiltRules = (migrationId: string) => { + const { addError } = useAppToasts(); + + const SPECIFIC_MIGRATIONS_PREBUILT_RULES_PATH = replaceParams( + SIEM_RULE_MIGRATIONS_PREBUILT_RULES_PATH, + { + migration_id: migrationId, + } + ); + + return useQuery( + ['GET', SPECIFIC_MIGRATIONS_PREBUILT_RULES_PATH], + async ({ signal }) => { + return getRuleMigrationsPrebuiltRules({ migrationId, signal }); + }, + { + ...DEFAULT_QUERY_OPTIONS, + onError: (error) => { + addError(error, { title: i18n.GET_MIGRATION_PREBUILT_RULES_FAILURE }); + }, + } + ); +}; diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/constants.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/constants.ts new file mode 100644 index 0000000000000..215f0089410e7 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/constants.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const MAX_CUSTOM_RULES_TO_CREATE_IN_PARALLEL = 50; +export const MAX_PREBUILT_RULES_TO_FETCH = 10_000 as const; +export const MAX_TRANSLATED_RULES_TO_INSTALL = 10_000 as const; diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get_prebuilt_rules.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get_prebuilt_rules.ts new file mode 100644 index 0000000000000..551e4a51e477e --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/get_prebuilt_rules.ts @@ -0,0 +1,73 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IKibanaResponse, Logger } from '@kbn/core/server'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; +import type { GetRuleMigrationPrebuiltRulesResponse } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { GetRuleMigrationPrebuiltRulesRequestParams } from '../../../../../common/siem_migrations/model/api/rules/rule_migration.gen'; +import { SIEM_RULE_MIGRATIONS_PREBUILT_RULES_PATH } from '../../../../../common/siem_migrations/constants'; +import type { SecuritySolutionPluginRouter } from '../../../../types'; +import { withLicense } from './util/with_license'; +import { getPrebuiltRules, getUniquePrebuiltRuleIds } from './util/prebuilt_rules'; +import { MAX_PREBUILT_RULES_TO_FETCH } from './constants'; + +export const registerSiemRuleMigrationsPrebuiltRulesRoute = ( + router: SecuritySolutionPluginRouter, + logger: Logger +) => { + router.versioned + .get({ + path: SIEM_RULE_MIGRATIONS_PREBUILT_RULES_PATH, + access: 'internal', + security: { authz: { requiredPrivileges: ['securitySolution'] } }, + }) + .addVersion( + { + version: '1', + validate: { + request: { + params: buildRouteValidationWithZod(GetRuleMigrationPrebuiltRulesRequestParams), + }, + }, + }, + withLicense( + async ( + context, + req, + res + ): Promise> => { + const { migration_id: migrationId } = req.params; + try { + const ctx = await context.resolve(['core', 'alerting', 'securitySolution']); + const ruleMigrationsClient = ctx.securitySolution.getSiemRuleMigrationsClient(); + const savedObjectsClient = ctx.core.savedObjects.client; + const rulesClient = await ctx.alerting.getRulesClient(); + + const result = await ruleMigrationsClient.data.rules.get(migrationId, { + filters: { + prebuilt: true, + }, + from: 0, + size: MAX_PREBUILT_RULES_TO_FETCH, + }); + + const prebuiltRulesIds = getUniquePrebuiltRuleIds(result.data); + const prebuiltRules = await getPrebuiltRules( + rulesClient, + savedObjectsClient, + prebuiltRulesIds + ); + + return res.ok({ body: prebuiltRules }); + } catch (err) { + logger.error(err); + return res.badRequest({ body: err.message }); + } + } + ) + ); +}; diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/index.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/index.ts index c6f3c51a1bb53..a327d4b28a9bd 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/index.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/index.ts @@ -20,6 +20,7 @@ import { registerSiemRuleMigrationsResourceGetRoute } from './resources/get'; import { registerSiemRuleMigrationsRetryRoute } from './retry'; import { registerSiemRuleMigrationsInstallRoute } from './install'; import { registerSiemRuleMigrationsInstallTranslatedRoute } from './install_translated'; +import { registerSiemRuleMigrationsPrebuiltRulesRoute } from './get_prebuilt_rules'; export const registerSiemRuleMigrationsRoutes = ( router: SecuritySolutionPluginRouter, @@ -28,6 +29,7 @@ export const registerSiemRuleMigrationsRoutes = ( registerSiemRuleMigrationsCreateRoute(router, logger); registerSiemRuleMigrationsUpdateRoute(router, logger); registerSiemRuleMigrationsStatsAllRoute(router, logger); + registerSiemRuleMigrationsPrebuiltRulesRoute(router, logger); registerSiemRuleMigrationsGetRoute(router, logger); registerSiemRuleMigrationsStartRoute(router, logger); registerSiemRuleMigrationsRetryRoute(router, logger); diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts index 2fce95be9dafe..d74619e4c1251 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/installation.ts @@ -7,22 +7,23 @@ import type { Logger, SavedObjectsClientContract } from '@kbn/core/server'; import type { RulesClient } from '@kbn/alerting-plugin/server'; -import { - DEFAULT_TRANSLATION_RISK_SCORE, - DEFAULT_TRANSLATION_SEVERITY, -} from '../../../../../../common/siem_migrations/constants'; +import { initPromisePool } from '../../../../../utils/promise_pool'; import type { SecuritySolutionApiRequestHandlerContext } from '../../../../..'; -import { createPrebuiltRuleObjectsClient } from '../../../../detection_engine/prebuilt_rules/logic/rule_objects/prebuilt_rule_objects_client'; import { performTimelinesInstallation } from '../../../../detection_engine/prebuilt_rules/logic/perform_timelines_installation'; import { createPrebuiltRules } from '../../../../detection_engine/prebuilt_rules/logic/rule_objects/create_prebuilt_rules'; -import type { PrebuiltRuleAsset } from '../../../../detection_engine/prebuilt_rules'; -import { getRuleGroups } from '../../../../detection_engine/prebuilt_rules/model/rule_groups/get_rule_groups'; -import { fetchRuleVersionsTriad } from '../../../../detection_engine/prebuilt_rules/logic/rule_versions/fetch_rule_versions_triad'; -import { createPrebuiltRuleAssetsClient } from '../../../../detection_engine/prebuilt_rules/logic/rule_assets/prebuilt_rule_assets_client'; import type { IDetectionRulesClient } from '../../../../detection_engine/rule_management/logic/detection_rules_client/detection_rules_client_interface'; -import type { RuleCreateProps } from '../../../../../../common/api/detection_engine'; +import type { RuleResponse } from '../../../../../../common/api/detection_engine'; import type { UpdateRuleMigrationInput } from '../../data/rule_migrations_data_rules_client'; import type { StoredRuleMigration } from '../../types'; +import { getPrebuiltRules, getUniquePrebuiltRuleIds } from './prebuilt_rules'; +import { + MAX_CUSTOM_RULES_TO_CREATE_IN_PARALLEL, + MAX_TRANSLATED_RULES_TO_INSTALL, +} from '../constants'; +import { + convertMigrationCustomRuleToSecurityRulePayload, + isMigrationCustomRule, +} from '../../../../../../common/siem_migrations/rules/utils'; const installPrebuiltRules = async ( rulesToInstall: StoredRuleMigration[], @@ -31,105 +32,90 @@ const installPrebuiltRules = async ( savedObjectsClient: SavedObjectsClientContract, detectionRulesClient: IDetectionRulesClient ): Promise => { - const ruleAssetsClient = createPrebuiltRuleAssetsClient(savedObjectsClient); - const ruleObjectsClient = createPrebuiltRuleObjectsClient(rulesClient); - const ruleVersionsMap = await fetchRuleVersionsTriad({ - ruleAssetsClient, - ruleObjectsClient, - }); - const { currentRules, installableRules } = getRuleGroups(ruleVersionsMap); - - const rulesToUpdate: UpdateRuleMigrationInput[] = []; - const assetsToInstall: PrebuiltRuleAsset[] = []; - rulesToInstall.forEach((ruleToInstall) => { - // If prebuilt rule has already been installed, then just update migration rule with the installed rule id - const installedRule = currentRules.find( - (rule) => rule.rule_id === ruleToInstall.elastic_rule?.prebuilt_rule_id - ); - if (installedRule) { - rulesToUpdate.push({ - id: ruleToInstall.id, - elastic_rule: { - id: installedRule.id, - }, - }); - return; - } + // Get required prebuilt rules + const prebuiltRulesIds = getUniquePrebuiltRuleIds(rulesToInstall); + const prebuiltRules = await getPrebuiltRules(rulesClient, savedObjectsClient, prebuiltRulesIds); - // If prebuilt rule is not installed, then keep reference to install it - const installableRule = installableRules.find( - (rule) => rule.rule_id === ruleToInstall.elastic_rule?.prebuilt_rule_id - ); - if (installableRule) { - assetsToInstall.push(installableRule); + const { installed: alreadyInstalledRules, installable } = Object.values(prebuiltRules).reduce( + (acc, item) => { + if (item.current) { + acc.installed.push(item.current); + } else { + acc.installable.push(item.target); + } + return acc; + }, + { installed: [], installable: [] } as { + installed: RuleResponse[]; + installable: RuleResponse[]; } - }); - - // Filter out any duplicates which can occur when multiple translated rules matched the same prebuilt rule - const filteredAssetsToInstall = assetsToInstall.filter( - (value, index, self) => index === self.findIndex((rule) => rule.rule_id === value.rule_id) ); + // Install prebuilt rules // TODO: we need to do an error handling which can happen during the rule installation - const { results: installedRules } = await createPrebuiltRules( + const { results: newlyInstalledRules } = await createPrebuiltRules( detectionRulesClient, - filteredAssetsToInstall + installable ); await performTimelinesInstallation(securitySolutionContext); + const installedRules = [ + ...alreadyInstalledRules, + ...newlyInstalledRules.map((value) => value.result), + ]; + + // Create migration rules updates templates + const rulesToUpdate: UpdateRuleMigrationInput[] = []; installedRules.forEach((installedRule) => { - const rules = rulesToInstall.filter( - (rule) => rule.elastic_rule?.prebuilt_rule_id === installedRule.result.rule_id + const filteredRules = rulesToInstall.filter( + (rule) => rule.elastic_rule?.prebuilt_rule_id === installedRule.rule_id ); - rules.forEach((prebuiltRule) => { - rulesToUpdate.push({ - id: prebuiltRule.id, + rulesToUpdate.push( + ...filteredRules.map(({ id }) => ({ + id, elastic_rule: { - id: installedRule.result.id, + id: installedRule.id, }, - }); - }); + })) + ); }); return rulesToUpdate; }; -const installCustomRules = async ( +export const installCustomRules = async ( rulesToInstall: StoredRuleMigration[], detectionRulesClient: IDetectionRulesClient, logger: Logger ): Promise => { const rulesToUpdate: UpdateRuleMigrationInput[] = []; - await Promise.all( - rulesToInstall.map(async (rule) => { - if (!rule.elastic_rule?.query || !rule.elastic_rule?.description) { + const createCustomRulesOutcome = await initPromisePool({ + concurrency: MAX_CUSTOM_RULES_TO_CREATE_IN_PARALLEL, + items: rulesToInstall, + executor: async (rule) => { + if (!isMigrationCustomRule(rule.elastic_rule)) { return; } - try { - const payloadRule: RuleCreateProps = { - type: 'esql', - language: 'esql', - query: rule.elastic_rule.query, - name: rule.elastic_rule.title, - description: rule.elastic_rule.description, - severity: DEFAULT_TRANSLATION_SEVERITY, - risk_score: DEFAULT_TRANSLATION_RISK_SCORE, - }; - const createdRule = await detectionRulesClient.createCustomRule({ - params: payloadRule, - }); - rulesToUpdate.push({ - id: rule.id, - elastic_rule: { - id: createdRule.id, - }, - }); - } catch (err) { - // TODO: we need to do an error handling which can happen during the rule creation - logger.debug(`Could not create a rule because of error: ${JSON.stringify(err)}`); - } - }) - ); + const payloadRule = convertMigrationCustomRuleToSecurityRulePayload(rule.elastic_rule); + const createdRule = await detectionRulesClient.createPrebuiltRule({ + params: payloadRule, + }); + rulesToUpdate.push({ + id: rule.id, + elastic_rule: { + id: createdRule.id, + }, + }); + }, + }); + if (createCustomRulesOutcome.errors) { + // TODO: we need to do an error handling which can happen during the rule creation + logger.debug( + `Failed to create some of the rules because of errors: ${JSON.stringify( + createCustomRulesOutcome.errors + )}` + ); + } return rulesToUpdate; }; @@ -179,6 +165,8 @@ export const installTranslated = async ({ const { data: rulesToInstall } = await ruleMigrationsClient.data.rules.get(migrationId, { filters: { ids, installable: true }, + from: 0, + size: MAX_TRANSLATED_RULES_TO_INSTALL, }); const { customRulesToInstall, prebuiltRulesToInstall } = rulesToInstall.reduce( diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/prebuilt_rules.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/prebuilt_rules.ts new file mode 100644 index 0000000000000..7760612abc878 --- /dev/null +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/api/util/prebuilt_rules.ts @@ -0,0 +1,84 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { SavedObjectsClientContract } from '@kbn/core/server'; +import type { RulesClient } from '@kbn/alerting-plugin/server'; +import type { RuleResponse } from '../../../../../../common/api/detection_engine'; +import { createPrebuiltRuleObjectsClient } from '../../../../detection_engine/prebuilt_rules/logic/rule_objects/prebuilt_rule_objects_client'; +import { fetchRuleVersionsTriad } from '../../../../detection_engine/prebuilt_rules/logic/rule_versions/fetch_rule_versions_triad'; +import { createPrebuiltRuleAssetsClient } from '../../../../detection_engine/prebuilt_rules/logic/rule_assets/prebuilt_rule_assets_client'; +import { convertPrebuiltRuleAssetToRuleResponse } from '../../../../detection_engine/rule_management/logic/detection_rules_client/converters/convert_prebuilt_rule_asset_to_rule_response'; +import type { RuleMigration } from '../../../../../../common/siem_migrations/model/rule_migration.gen'; + +export const getUniquePrebuiltRuleIds = (migrationRules: RuleMigration[]): string[] => { + const rulesIds = new Set(); + migrationRules.forEach((rule) => { + if (rule.elastic_rule?.prebuilt_rule_id) { + rulesIds.add(rule.elastic_rule.prebuilt_rule_id); + } + }); + return Array.from(rulesIds); +}; + +export interface PrebuiltRulesResults { + /** + * The latest available version + */ + target: RuleResponse; + + /** + * The currently installed version + */ + current?: RuleResponse; +} + +/** + * Gets Elastic prebuilt rules + * @param rulesClient The rules client to fetch prebuilt rules + * @param savedObjectsClient The saved objects client + * @param rulesIds The list of IDs to filter requested prebuilt rules. If not specified, all available prebuilt rules will be returned. + * @returns + */ +export const getPrebuiltRules = async ( + rulesClient: RulesClient, + savedObjectsClient: SavedObjectsClientContract, + rulesIds?: string[] +): Promise> => { + const ruleAssetsClient = createPrebuiltRuleAssetsClient(savedObjectsClient); + const ruleObjectsClient = createPrebuiltRuleObjectsClient(rulesClient); + + const prebuiltRulesMap = await fetchRuleVersionsTriad({ + ruleAssetsClient, + ruleObjectsClient, + }); + + // Filter out prebuilt rules by `rule_id` + let filteredPrebuiltRulesMap: typeof prebuiltRulesMap; + if (rulesIds) { + filteredPrebuiltRulesMap = new Map(); + for (const ruleId of rulesIds) { + const prebuiltRule = prebuiltRulesMap.get(ruleId); + if (prebuiltRule) { + filteredPrebuiltRulesMap.set(ruleId, prebuiltRule); + } + } + } else { + filteredPrebuiltRulesMap = prebuiltRulesMap; + } + + const prebuiltRules: Record = {}; + filteredPrebuiltRulesMap.forEach((ruleVersions, ruleId) => { + if (ruleVersions.target) { + prebuiltRules[ruleId] = { + target: convertPrebuiltRuleAssetToRuleResponse(ruleVersions.target), + current: ruleVersions.current, + }; + } + }); + + return prebuiltRules; +}; diff --git a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts index 716d19ce16cdf..f11b24e50b95a 100644 --- a/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts +++ b/x-pack/plugins/security_solution/server/lib/siem_migrations/rules/data/rule_migrations_data_rules_client.ts @@ -42,6 +42,7 @@ export interface RuleMigrationFilters { status?: SiemMigrationStatus | SiemMigrationStatus[]; ids?: string[]; installable?: boolean; + prebuilt?: boolean; searchTerm?: string; } export interface RuleMigrationGetOptions { @@ -54,7 +55,6 @@ export interface RuleMigrationGetOptions { * The 500 number was chosen as a reasonable number to avoid large payloads. It can be adjusted if needed. */ const BULK_MAX_SIZE = 500 as const; -/* The default number of rule migrations to retrieve in a single GET request. */ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient { /** Indexes an array of rule migrations to be processed */ @@ -337,7 +337,7 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient private getFilterQuery( migrationId: string, - { status, ids, installable, searchTerm }: RuleMigrationFilters = {} + { status, ids, installable, prebuilt, searchTerm }: RuleMigrationFilters = {} ): QueryDslQueryContainer { const filter: QueryDslQueryContainer[] = [{ term: { migration_id: migrationId } }]; if (status) { @@ -353,6 +353,9 @@ export class RuleMigrationsDataRulesClient extends RuleMigrationsDataBaseClient if (installable) { filter.push(...conditions.isInstallable()); } + if (prebuilt) { + filter.push(conditions.isPrebuilt()); + } if (searchTerm?.length) { filter.push(conditions.matchTitle(searchTerm)); } diff --git a/x-pack/test/api_integration/services/security_solution_api.gen.ts b/x-pack/test/api_integration/services/security_solution_api.gen.ts index 98fefc3a74aa4..a6d0ac86a810c 100644 --- a/x-pack/test/api_integration/services/security_solution_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_api.gen.ts @@ -99,6 +99,7 @@ import { GetRuleMigrationRequestQueryInput, GetRuleMigrationRequestParamsInput, } from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; +import { GetRuleMigrationPrebuiltRulesRequestParamsInput } from '@kbn/security-solution-plugin/common/siem_migrations/model/api/rules/rule_migration.gen'; import { GetRuleMigrationResourcesRequestQueryInput, GetRuleMigrationResourcesRequestParamsInput, @@ -957,6 +958,27 @@ finalize it. .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') .query(props.query); }, + /** + * Retrieves all available prebuilt rules (installed and installable) + */ + getRuleMigrationPrebuiltRules( + props: GetRuleMigrationPrebuiltRulesProps, + kibanaSpace: string = 'default' + ) { + return supertest + .get( + routeWithNamespace( + replaceParams( + '/internal/siem_migrations/rules/{migration_id}/prebuilt_rules', + props.params + ), + kibanaSpace + ) + ) + .set('kbn-xsrf', 'true') + .set(ELASTIC_HTTP_VERSION_HEADER, '1') + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); + }, /** * Retrieves resources for an existing SIEM rules migration */ @@ -1731,6 +1753,9 @@ export interface GetRuleMigrationProps { query: GetRuleMigrationRequestQueryInput; params: GetRuleMigrationRequestParamsInput; } +export interface GetRuleMigrationPrebuiltRulesProps { + params: GetRuleMigrationPrebuiltRulesRequestParamsInput; +} export interface GetRuleMigrationResourcesProps { query: GetRuleMigrationResourcesRequestQueryInput; params: GetRuleMigrationResourcesRequestParamsInput;