From 7536b91e3394e25c1309d8cbc6fecec7b3019e26 Mon Sep 17 00:00:00 2001 From: Panagiota Mitsopoulou Date: Tue, 7 May 2024 22:25:47 +0200 Subject: [PATCH 01/34] [SLO] Write functional tests for slo embeddables (#182568) Fixes https://github.com/elastic/kibana/issues/182637 ## Summary This PR introduces our first functional tests for the SLO Overview Embeddable with a bunch of helper functions to interact with the different UI elements. Here are the basic scenarios that have been covered: - Add a single SLO Overview panel - Verify the configuration flyout opens - Verify the SLO selection dropdown exists - Verify the Save button is enabled - Verify an SLO Overview panel is added - Verify the title is present - Add a group SLO Overview panel - Verify the overview mode selector exists and opens the group configuration screen - Verify the Group by dropdown exists - Verify the Group dropdown exists - Verify the KQL bar exists - Verify an SLO Group Overview panel is added Here's a list of scenarios that need to be covered in a follow up PR (I will create a separate ticket with following acceptance criteria): - Check that clicking on the SLO card item opens the SLO details flyout - Check that clicking on the group expands the accordion and shows the respective SLOs - Check that `Edit criteria` link exists in the Group embeddable - Interact with edit criteria link - Check that selected group by is shown - Check that selected group is shown - Check that custom filter is shown in the kql bar - With Remote enabled ## How to test ``` node scripts/functional_tests_server.js --config x-pack/test/functional/apps/slo/embeddables/config.ts node scripts/functional_test_runner --config=x-pack/test/functional/apps/slo/embeddables/config.ts ``` --- .buildkite/ftr_configs.yml | 1 + .../overview/group_view/slo_group_filters.tsx | 5 +- .../slo/overview/overview_mode_selector.tsx | 1 + .../slo/overview/slo_configuration.tsx | 6 +- .../slo/overview/slo_embeddable_factory.tsx | 3 +- .../embeddable/slo/overview/slo_overview.tsx | 2 +- .../functional/apps/slo/embeddables/config.ts | 17 +++ .../slo/embeddables/overview_embeddable.ts | 95 ++++++++++++ x-pack/test/functional/services/index.ts | 5 +- x-pack/test/functional/services/slo/common.ts | 138 ++++++++++++++++++ x-pack/test/functional/services/slo/index.ts | 15 ++ 11 files changed, 280 insertions(+), 8 deletions(-) create mode 100644 x-pack/test/functional/apps/slo/embeddables/config.ts create mode 100644 x-pack/test/functional/apps/slo/embeddables/overview_embeddable.ts create mode 100644 x-pack/test/functional/services/slo/common.ts create mode 100644 x-pack/test/functional/services/slo/index.ts diff --git a/.buildkite/ftr_configs.yml b/.buildkite/ftr_configs.yml index ac9ccb04c68e2..c731227f3b53a 100644 --- a/.buildkite/ftr_configs.yml +++ b/.buildkite/ftr_configs.yml @@ -321,6 +321,7 @@ enabled: - x-pack/test/functional/apps/saved_objects_management/config.ts - x-pack/test/functional/apps/saved_query_management/config.ts - x-pack/test/functional/apps/security/config.ts + - x-pack/test/functional/apps/slo/embeddables/config.ts - x-pack/test/functional/apps/snapshot_restore/config.ts - x-pack/test/functional/apps/spaces/config.ts - x-pack/test/functional/apps/spaces/in_solution_navigation/config.ts diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/group_view/slo_group_filters.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/group_view/slo_group_filters.tsx index 48b9df92c73a6..ebc1a671405c6 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/group_view/slo_group_filters.tsx +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/group_view/slo_group_filters.tsx @@ -171,7 +171,7 @@ export function SloGroupFilters({ selectedFilters, onSelected }: Props) { > { @@ -207,7 +207,7 @@ export function SloGroupFilters({ selectedFilters, onSelected }: Props) { defaultMessage: 'Select a {selectedGroupByLabel}', values: { selectedGroupByLabel }, })} - data-test-subj="sloGroup" + data-test-subj="sloGroupOverviewConfigurationGroup" options={groupOptions} selectedOptions={selectedGroupOptions} async @@ -233,6 +233,7 @@ export function SloGroupFilters({ selectedFilters, onSelected }: Props) { } > - + - + @@ -200,7 +200,7 @@ export function SloConfiguration({ initialInput, onCreate, onCancel }: SloConfig ); return ( - + diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx index 08d0876bfe5ae..a4f26679dd1dd 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_embeddable_factory.tsx @@ -138,6 +138,7 @@ export const getOverviewEmbeddableFactory = (deps: SloEmbeddableDeps) => { return ( { embeddable: api, } as ActionExecutionContext); }} - data-test-subj="o11ySloAlertsWrapperSlOsIncludedLink" + data-test-subj="o11ySloOverviewEditCriteriaLink" > {i18n.translate('xpack.slo.overviewEmbeddable.editCriteriaLabel', { defaultMessage: 'Edit criteria', diff --git a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_overview.tsx b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_overview.tsx index 5d2ca2597f69e..72a0b57be723b 100644 --- a/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_overview.tsx +++ b/x-pack/plugins/observability_solution/slo/public/embeddable/slo/overview/slo_overview.tsx @@ -105,7 +105,7 @@ export function SloOverview({ sloId, sloInstanceId, remoteName, reloadSubject }: const historicalSliData = formatHistoricalData(historicalSummary, 'sli_value'); return ( -
+
{ + await loadTestData(getService); + await slo.deleteAllSLOs(); + await slo.create(sloData); + await PageObjects.dashboard.navigateToApp(); + await PageObjects.dashboard.clickNewDashboard(); + await PageObjects.dashboard.switchToEditMode(); + }); + + after(async () => { + await slo.deleteAllSLOs(); + await cleanup({ esClient, logger }); + await sloEsClient.deleteTestSourceData(); + }); + + describe('Single SLO', function () { + it('should open SLO configuration flyout', async () => { + await dashboardAddPanel.clickEditorMenuButton(); + await dashboardAddPanel.clickEmbeddableFactoryGroupButton('slos'); + await dashboardAddPanel.clickAddNewPanelFromUIActionLink('SLO Overview'); + await sloUi.common.assertSloOverviewConfigurationExists(); + }); + + it('should have an overview mode selector', async () => { + await sloUi.common.assertOverviewModeSelectorExists(); + }); + + it('can select an SLO', async () => { + await sloUi.common.assertOverviewSloSelectorExists(); + await sloUi.common.setComboBoxSloSelection(); + await sloUi.common.clickOverviewCofigurationSaveButton(); + }); + + it('creates an overview panel', async () => { + await sloUi.common.assertSingleOverviewPanelExists(); + await sloUi.common.dismissAllToasts(); + }); + + it('renders SLO card item chart', async () => { + await sloUi.common.assertSingleOverviewPanelContentExists(); + }); + }); + + describe('Group of SLOs', function () { + it('can select Group Overview mode in the Flyout configuration', async () => { + await dashboardAddPanel.clickEditorMenuButton(); + await dashboardAddPanel.clickEmbeddableFactoryGroupButton('slos'); + await dashboardAddPanel.clickAddNewPanelFromUIActionLink('SLO Overview'); + await sloUi.common.clickOverviewMode(); + await sloUi.common.assertSloConfigurationGroupOverviewModeIsSelected(); + }); + + it('can select a group by', async () => { + await sloUi.common.assertGroupOverviewConfigurationGroupByExists(); + }); + + it('can optionally select a group', async () => { + await sloUi.common.assertGroupOverviewConfigurationGroupExists(); + }); + + it('can optionally search for custom query', async () => { + await sloUi.common.assertGroupOverviewConfigurationKqlBarExists(); + }); + + it('creates a group overview panel', async () => { + await sloUi.common.clickOverviewCofigurationSaveButton(); + await sloUi.common.assertGroupOverviewPanelExists(); + await sloUi.common.dismissAllToasts(); + }); + }); + }); +} diff --git a/x-pack/test/functional/services/index.ts b/x-pack/test/functional/services/index.ts index 03ad1ea2361e3..d7aab70c44cbc 100644 --- a/x-pack/test/functional/services/index.ts +++ b/x-pack/test/functional/services/index.ts @@ -69,7 +69,7 @@ import { RulesServiceProvider } from './rules'; import { AiopsProvider } from './aiops'; import { SampleDataServiceProvider } from './sample_data'; import { DataStreamProvider } from './data_stream'; - +import { SloUiServiceProvider } from './slo'; // define the name and providers for services that should be // available to your tests. If you don't specify anything here // only the built-in services will be available @@ -131,4 +131,7 @@ export const services = { aiops: AiopsProvider, sampleData: SampleDataServiceProvider, dataStreams: DataStreamProvider, + slo: kibanaXPackApiIntegrationServices.slo, + dataViewApi: kibanaXPackApiIntegrationServices.dataViewApi, + sloUi: SloUiServiceProvider, }; diff --git a/x-pack/test/functional/services/slo/common.ts b/x-pack/test/functional/services/slo/common.ts new file mode 100644 index 0000000000000..b46284c915c3a --- /dev/null +++ b/x-pack/test/functional/services/slo/common.ts @@ -0,0 +1,138 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { sloData } from '../../../api_integration/apis/slos/fixtures/create_slo'; + +const OVERVIEW_MODE_SELECTOR = 'sloOverviewModeSelector'; +const SLO_CONFIRM_BUTTON = 'sloConfirmButton'; +const SINGLE_SLO_SELECTOR = 'singleSloSelector'; +const SLO_SINGLE_OVERVIEW_CONFIGURATION = 'sloSingleOverviewConfiguration'; +const SLO_GROUP_OVERVIEW_CONFIGURATION = 'sloGroupOverviewConfiguration'; +const SLO_GROUP_OVERVIEW_CONFIGURATION_GROUP_BY = 'sloGroupOverviewConfigurationGroupBy'; +const SLO_GROUP_OVERVIEW_CONFIGURATION_GROUP = 'sloGroupOverviewConfigurationGroup'; +const SLO_GROUP_OVERVIEW_CONFIGURATION_KQLBAR = 'sloGroupOverviewConfigurationKqlBar'; +const SLO_SINGLE_OVERVIEW_PANEL = 'sloSingleOverviewPanel'; +const SLO_GROUP_OVERVIEW_PANEL = 'sloGroupOverviewPanel'; + +export function SloUiCommonServiceProvider({ getService }: FtrProviderContext) { + const testSubjects = getService('testSubjects'); + const comboBox = getService('comboBox'); + const find = getService('find'); + const toasts = getService('toasts'); + const retry = getService('retry'); + + return { + async assertSloOverviewConfigurationExists() { + await retry.tryForTime(60 * 1000, async () => { + await testSubjects.existOrFail(SLO_SINGLE_OVERVIEW_CONFIGURATION); + }); + }, + async assertOverviewSloSelectorExists() { + await retry.tryForTime(60 * 1000, async () => { + await testSubjects.existOrFail(SINGLE_SLO_SELECTOR); + }); + }, + async setComboBoxSloSelection() { + await retry.tryForTime(60 * 1000, async () => { + await testSubjects.click('sloSelector'); + await comboBox.set('sloSelector > comboBoxInput', sloData.name); + }); + }, + async assertOverviewConfigurationSaveButtonIsEnabled(subj: string) { + await retry.tryForTime(60 * 1000, async () => { + await testSubjects.existOrFail(subj); + await testSubjects.isEnabled(subj); + }); + }, + async clickOverviewCofigurationSaveButton() { + await retry.tryForTime(60 * 1000, async () => { + await this.assertOverviewConfigurationSaveButtonIsEnabled(SLO_CONFIRM_BUTTON); + await testSubjects.clickWhenNotDisabledWithoutRetry(SLO_CONFIRM_BUTTON); + }); + }, + + async assertOverviewModeSelectorExists() { + await retry.tryForTime(60 * 1000, async () => { + await testSubjects.existOrFail(OVERVIEW_MODE_SELECTOR); + }); + }, + + async clickOverviewMode() { + await retry.tryForTime(60 * 1000, async () => { + await this.assertOverviewModeSelectorExists(); + await testSubjects.click(OVERVIEW_MODE_SELECTOR); + }); + }, + + async assertSloConfigurationGroupOverviewModeIsSelected() { + await retry.tryForTime(60 * 1000, async () => { + await testSubjects.existOrFail(SLO_GROUP_OVERVIEW_CONFIGURATION); + }); + }, + + async assertGroupOverviewConfigurationGroupByExists() { + await retry.tryForTime(60 * 1000, async () => { + await testSubjects.existOrFail(SLO_GROUP_OVERVIEW_CONFIGURATION_GROUP_BY); + }); + }, + + async assertGroupOverviewConfigurationGroupExists() { + await retry.tryForTime(60 * 1000, async () => { + await testSubjects.existOrFail(SLO_GROUP_OVERVIEW_CONFIGURATION_GROUP); + }); + }, + + async assertGroupOverviewConfigurationKqlBarExists() { + await retry.tryForTime(60 * 1000, async () => { + await testSubjects.existOrFail(SLO_GROUP_OVERVIEW_CONFIGURATION_KQLBAR); + }); + }, + + async dismissAllToasts() { + await retry.tryForTime(60 * 1000, async () => { + await toasts.dismissAll(); + }); + }, + + async assertSingleOverviewPanelExists() { + await retry.tryForTime(60 * 1000, async () => { + await testSubjects.existOrFail(SLO_SINGLE_OVERVIEW_PANEL); + }); + }, + + async getSloCardTitle() { + const container = await testSubjects.find(SLO_SINGLE_OVERVIEW_PANEL); + return await (await container.findByClassName('echMetricText__title')).getVisibleText(); + }, + + async assertSingleOverviewPanelContentExists() { + await retry.tryForTime(2000, async () => { + expect( + await find.existsByCssSelector( + `[data-test-subj="${SLO_SINGLE_OVERVIEW_PANEL}"] .echChart` + ) + ).to.eql(true); + + expect( + await find.existsByCssSelector( + `[data-test-subj="${SLO_SINGLE_OVERVIEW_PANEL}"] .echMetricText__title` + ) + ).to.eql(true); + + expect(await this.getSloCardTitle()).to.eql(sloData.name); + }); + }, + + async assertGroupOverviewPanelExists() { + await retry.tryForTime(60 * 1000, async () => { + await testSubjects.existOrFail(SLO_GROUP_OVERVIEW_PANEL); + }); + }, + }; +} diff --git a/x-pack/test/functional/services/slo/index.ts b/x-pack/test/functional/services/slo/index.ts new file mode 100644 index 0000000000000..75339f41dfe3a --- /dev/null +++ b/x-pack/test/functional/services/slo/index.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 { FtrProviderContext } from '../../ftr_provider_context'; +import { SloUiCommonServiceProvider } from './common'; + +export function SloUiServiceProvider(context: FtrProviderContext) { + return { + common: SloUiCommonServiceProvider(context), + }; +} From a98dda0f0672a5a373142bcdbcfcc9e72bb4209c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Tue, 7 May 2024 23:27:01 +0200 Subject: [PATCH 02/34] [Telemetry Collection Manager] Use top-level `cluster_uuid` (#182857) --- .../telemetry_collection_manager/server/plugin.test.ts | 4 +--- src/plugins/telemetry_collection_manager/server/plugin.ts | 5 +---- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/plugins/telemetry_collection_manager/server/plugin.test.ts b/src/plugins/telemetry_collection_manager/server/plugin.test.ts index adfe2c64a4916..a19f203c154fd 100644 --- a/src/plugins/telemetry_collection_manager/server/plugin.test.ts +++ b/src/plugins/telemetry_collection_manager/server/plugin.test.ts @@ -94,9 +94,7 @@ describe('Telemetry Collection Manager', () => { cluster_uuid: 'clusterUuid', cluster_name: 'clusterName', timestamp: new Date().toISOString(), - cluster_stats: { - cluster_uuid: 'clusterUuid', - }, + cluster_stats: {}, stack_stats: {}, version: 'version', }; diff --git a/src/plugins/telemetry_collection_manager/server/plugin.ts b/src/plugins/telemetry_collection_manager/server/plugin.ts index f4685576c1ef8..958d7439b5936 100644 --- a/src/plugins/telemetry_collection_manager/server/plugin.ts +++ b/src/plugins/telemetry_collection_manager/server/plugin.ts @@ -285,10 +285,7 @@ export class TelemetryCollectionManagerPlugin retrieveSnapshotTelemetryTransaction.startSpan('Prepare response'); const results = await Promise.all( usageData.map(async (clusterStats) => { - const { cluster_uuid: clusterUuid } = clusterStats.cluster_stats as Record< - string, - string - >; + const { cluster_uuid: clusterUuid } = clusterStats; return { clusterUuid, From 0a355aa0494739af9655f7786381d7eb84202f5c Mon Sep 17 00:00:00 2001 From: Philippe Oberti Date: Tue, 7 May 2024 16:31:59 -0500 Subject: [PATCH 03/34] [Security Solution][Timeline] - fix ESQL tab full screen showing unwanted UI elements (#182876) --- .../timelines/components/timeline/tabs/esql/styles.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/esql/styles.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/esql/styles.tsx index 0a779a3b8e3a9..6e82809231828 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/esql/styles.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/esql/styles.tsx @@ -21,4 +21,9 @@ export const TimelineESQLGlobalStyles = createGlobalStyle` body:has(.timeline-portal-overlay-mask) .DiscoverFlyout { z-index: 1002; // For its usage in the Security Solution timeline, we need Discover flyout to be above the timeline flyout (which has a z-index of 1001) } + + // TODO this should be removed when we change the ES|QL tab to be our own component instead of Discover (hopefully 8.15) + .unifiedDataTable__fullScreen .dscPageBody * { + z-index: unset !important; + } `; From 64a4c6dfaa3d174ffc2ab7120fbdf8bb0c372b2b Mon Sep 17 00:00:00 2001 From: Samiul Monir <150824886+Samiul-TheSoccerFan@users.noreply.github.com> Date: Tue, 7 May 2024 17:36:20 -0400 Subject: [PATCH 04/34] Loading playground test file (#182880) ## Summary Loading test file for playground ### Checklist Delete any items that are not applicable to this PR. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [ ] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [ ] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### For maintainers - [ ] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) --- x-pack/test_serverless/functional/test_suites/search/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/x-pack/test_serverless/functional/test_suites/search/index.ts b/x-pack/test_serverless/functional/test_suites/search/index.ts index 2e62cf4fbee38..455acc0404429 100644 --- a/x-pack/test_serverless/functional/test_suites/search/index.ts +++ b/x-pack/test_serverless/functional/test_suites/search/index.ts @@ -20,6 +20,7 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./advanced_settings')); loadTestFile(require.resolve('./rules/rule_details')); loadTestFile(require.resolve('./console_notebooks')); + loadTestFile(require.resolve('./playground_overview')); loadTestFile(require.resolve('./ml')); }); From 3f7731c8b79dc349111a843e39247f11b946b228 Mon Sep 17 00:00:00 2001 From: Ying Mao Date: Tue, 7 May 2024 22:58:19 -0400 Subject: [PATCH 05/34] [Response Ops][Alerting] Fixing bug with agg building for ES query rule when there are multi-terms and a group by field (#182865) --- .../common/data/lib/build_agg.test.ts | 45 +++++++++++++++++++ .../common/data/lib/build_agg.ts | 20 ++++++--- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.test.ts b/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.test.ts index 08c43eb9f8c0f..3656fb9ea3469 100644 --- a/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.test.ts +++ b/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.test.ts @@ -793,6 +793,51 @@ describe('buildAgg', () => { }); }); + it('should create correct aggregation when condition params are defined and multi terms selected', async () => { + expect( + buildAggregation({ + aggType: 'sum', + aggField: 'avg-field', + termField: ['the-term', 'second-term'], + termSize: 100, + condition: { + resultLimit: 1000, + conditionScript: `params.compareValue <= 0`, + }, + }) + ).toEqual({ + groupAgg: { + multi_terms: { + size: 100, + terms: [{ field: 'the-term' }, { field: 'second-term' }], + order: { + metricAgg: 'desc', + }, + }, + aggs: { + conditionSelector: { + bucket_selector: { + buckets_path: { + compareValue: 'metricAgg', + }, + script: `params.compareValue <= 0`, + }, + }, + metricAgg: { + sum: { + field: 'avg-field', + }, + }, + }, + }, + groupAggCount: { + stats_bucket: { + buckets_path: 'groupAgg._count', + }, + }, + }); + }); + it('should add topHitsAgg if topHitsSize is defined', () => { expect( buildAggregation({ diff --git a/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts b/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts index dfb141554a9fd..3c61368543b8c 100644 --- a/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts +++ b/x-pack/plugins/triggers_actions_ui/common/data/lib/build_agg.ts @@ -46,7 +46,7 @@ export const buildAggregation = ({ condition, topHitsSize, }: BuildAggregationOpts): Record => { - const aggContainer = { + const aggContainer: AggregationsAggregationContainer = { aggs: {}, }; const isCountAgg = isCountAggregation(aggType); @@ -78,7 +78,7 @@ export const buildAggregation = ({ : terms : terms; - let aggParent: any = aggContainer; + let aggParent: AggregationsAggregationContainer = aggContainer; const getAggName = () => (isDateAgg ? 'sortValueAgg' : 'metricAgg'); @@ -114,9 +114,15 @@ export const buildAggregation = ({ // if not count add an order if (!isCountAgg) { const sortOrder = aggType === 'min' ? 'asc' : 'desc'; - aggParent.aggs.groupAgg.terms!.order = { - [getAggName()]: sortOrder, - }; + if (isMultiTerms && aggParent.aggs.groupAgg.multi_terms) { + aggParent.aggs.groupAgg.multi_terms.order = { + [getAggName()]: sortOrder, + }; + } else if (aggParent.aggs.groupAgg.terms) { + aggParent.aggs.groupAgg.terms.order = { + [getAggName()]: sortOrder, + }; + } } else if (includeConditionInQuery) { aggParent.aggs.groupAgg.aggs = { conditionSelector: { @@ -193,7 +199,7 @@ export const buildAggregation = ({ } if (timeSeries && dateRangeInfo) { - aggParent = aggParent.aggs.dateAgg; + aggParent = aggParent?.aggs?.dateAgg ?? {}; // finally, the metric aggregation, if requested if (!isCountAgg) { @@ -207,5 +213,5 @@ export const buildAggregation = ({ } } - return aggContainer.aggs; + return aggContainer.aggs ?? {}; }; From 719980554543b7bb4cae67cbef4029c3dd60b47e Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 8 May 2024 00:54:00 -0400 Subject: [PATCH 06/34] [api-docs] 2024-05-08 Daily api_docs build (#182900) Generated by https://buildkite.com/elastic/kibana-api-docs-daily/builds/700 --- 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.devdocs.json | 22 ++- api_docs/apm.mdx | 4 +- api_docs/apm_data_access.mdx | 2 +- api_docs/asset_manager.mdx | 2 +- api_docs/assets_data_access.mdx | 2 +- api_docs/banners.mdx | 2 +- api_docs/bfetch.mdx | 2 +- api_docs/canvas.mdx | 2 +- api_docs/cases.mdx | 2 +- api_docs/charts.mdx | 2 +- api_docs/cloud.mdx | 2 +- api_docs/cloud_data_migration.mdx | 2 +- api_docs/cloud_defend.mdx | 2 +- api_docs/cloud_experiments.mdx | 2 +- api_docs/cloud_security_posture.mdx | 2 +- api_docs/console.mdx | 2 +- api_docs/content_management.mdx | 2 +- api_docs/controls.mdx | 2 +- api_docs/custom_integrations.mdx | 2 +- api_docs/dashboard.mdx | 2 +- api_docs/dashboard_enhanced.mdx | 2 +- api_docs/data.mdx | 2 +- api_docs/data_query.mdx | 2 +- api_docs/data_search.mdx | 2 +- api_docs/data_view_editor.mdx | 2 +- api_docs/data_view_field_editor.mdx | 2 +- api_docs/data_view_management.mdx | 2 +- api_docs/data_views.mdx | 2 +- api_docs/data_visualizer.mdx | 2 +- api_docs/dataset_quality.mdx | 2 +- api_docs/deprecations_by_api.mdx | 7 +- api_docs/deprecations_by_plugin.mdx | 56 ++------ api_docs/deprecations_by_team.mdx | 4 +- 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/es_ui_shared.mdx | 2 +- api_docs/event_annotation.mdx | 2 +- api_docs/event_annotation_listing.mdx | 2 +- api_docs/event_log.mdx | 2 +- api_docs/exploratory_view.mdx | 2 +- api_docs/expression_error.mdx | 2 +- api_docs/expression_gauge.mdx | 2 +- api_docs/expression_heatmap.mdx | 2 +- api_docs/expression_image.mdx | 2 +- api_docs/expression_legacy_metric_vis.mdx | 2 +- api_docs/expression_metric.mdx | 2 +- api_docs/expression_metric_vis.mdx | 2 +- api_docs/expression_partition_vis.mdx | 2 +- api_docs/expression_repeat_image.mdx | 2 +- api_docs/expression_reveal_image.mdx | 2 +- api_docs/expression_shape.mdx | 2 +- api_docs/expression_tagcloud.mdx | 2 +- api_docs/expression_x_y.mdx | 2 +- api_docs/expressions.mdx | 2 +- api_docs/features.mdx | 2 +- api_docs/field_formats.mdx | 2 +- api_docs/file_upload.mdx | 2 +- api_docs/files.mdx | 2 +- api_docs/files_management.mdx | 2 +- api_docs/fleet.mdx | 2 +- api_docs/global_search.mdx | 2 +- api_docs/guided_onboarding.mdx | 2 +- api_docs/home.mdx | 2 +- api_docs/image_embeddable.mdx | 2 +- api_docs/index_lifecycle_management.mdx | 2 +- api_docs/index_management.mdx | 2 +- api_docs/infra.mdx | 2 +- api_docs/ingest_pipelines.mdx | 2 +- api_docs/inspector.mdx | 2 +- api_docs/interactive_setup.mdx | 2 +- api_docs/kbn_ace.mdx | 2 +- api_docs/kbn_actions_types.mdx | 2 +- api_docs/kbn_aiops_components.mdx | 2 +- api_docs/kbn_aiops_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_state_types.mdx | 2 +- api_docs/kbn_alerting_types.mdx | 2 +- api_docs/kbn_alerts_as_data_utils.mdx | 2 +- api_docs/kbn_alerts_ui_shared.mdx | 2 +- api_docs/kbn_analytics.mdx | 2 +- api_docs/kbn_analytics_client.mdx | 2 +- api_docs/kbn_analytics_collection_utils.mdx | 2 +- ..._analytics_shippers_elastic_v3_browser.mdx | 2 +- ...n_analytics_shippers_elastic_v3_common.mdx | 2 +- ...n_analytics_shippers_elastic_v3_server.mdx | 2 +- api_docs/kbn_analytics_shippers_fullstory.mdx | 2 +- api_docs/kbn_apm_config_loader.mdx | 2 +- api_docs/kbn_apm_data_view.mdx | 2 +- api_docs/kbn_apm_synthtrace.devdocs.json | 105 ++++++++++++++- api_docs/kbn_apm_synthtrace.mdx | 4 +- api_docs/kbn_apm_synthtrace_client.mdx | 2 +- api_docs/kbn_apm_utils.mdx | 2 +- api_docs/kbn_axe_config.mdx | 2 +- api_docs/kbn_bfetch_error.mdx | 2 +- api_docs/kbn_calculate_auto.mdx | 2 +- .../kbn_calculate_width_from_char_count.mdx | 2 +- api_docs/kbn_cases_components.mdx | 2 +- api_docs/kbn_cell_actions.mdx | 2 +- api_docs/kbn_chart_expressions_common.mdx | 2 +- api_docs/kbn_chart_icons.mdx | 2 +- api_docs/kbn_ci_stats_core.mdx | 2 +- api_docs/kbn_ci_stats_performance_metrics.mdx | 2 +- api_docs/kbn_ci_stats_reporter.mdx | 2 +- api_docs/kbn_cli_dev_mode.mdx | 2 +- api_docs/kbn_code_editor.mdx | 2 +- api_docs/kbn_code_editor_mock.mdx | 2 +- api_docs/kbn_code_owners.mdx | 2 +- api_docs/kbn_coloring.mdx | 2 +- api_docs/kbn_config.mdx | 2 +- api_docs/kbn_config_mocks.mdx | 2 +- api_docs/kbn_config_schema.devdocs.json | 2 +- api_docs/kbn_config_schema.mdx | 2 +- .../kbn_content_management_content_editor.mdx | 2 +- ...tent_management_tabbed_table_list_view.mdx | 2 +- ...kbn_content_management_table_list_view.mdx | 2 +- ...tent_management_table_list_view_common.mdx | 2 +- ...ntent_management_table_list_view_table.mdx | 2 +- api_docs/kbn_content_management_utils.mdx | 2 +- api_docs/kbn_core_analytics_browser.mdx | 2 +- .../kbn_core_analytics_browser_internal.mdx | 2 +- api_docs/kbn_core_analytics_browser_mocks.mdx | 2 +- api_docs/kbn_core_analytics_server.mdx | 2 +- .../kbn_core_analytics_server_internal.mdx | 2 +- api_docs/kbn_core_analytics_server_mocks.mdx | 2 +- api_docs/kbn_core_application_browser.mdx | 2 +- .../kbn_core_application_browser_internal.mdx | 2 +- .../kbn_core_application_browser_mocks.mdx | 2 +- api_docs/kbn_core_application_common.mdx | 2 +- api_docs/kbn_core_apps_browser_internal.mdx | 2 +- api_docs/kbn_core_apps_browser_mocks.mdx | 2 +- api_docs/kbn_core_apps_server_internal.mdx | 2 +- api_docs/kbn_core_base_browser_mocks.mdx | 2 +- api_docs/kbn_core_base_common.mdx | 2 +- api_docs/kbn_core_base_server_internal.mdx | 2 +- api_docs/kbn_core_base_server_mocks.mdx | 2 +- .../kbn_core_capabilities_browser_mocks.mdx | 2 +- api_docs/kbn_core_capabilities_common.mdx | 2 +- api_docs/kbn_core_capabilities_server.mdx | 2 +- .../kbn_core_capabilities_server_mocks.mdx | 2 +- api_docs/kbn_core_chrome_browser.mdx | 2 +- api_docs/kbn_core_chrome_browser_mocks.mdx | 2 +- api_docs/kbn_core_config_server_internal.mdx | 2 +- api_docs/kbn_core_custom_branding_browser.mdx | 2 +- ..._core_custom_branding_browser_internal.mdx | 2 +- ...kbn_core_custom_branding_browser_mocks.mdx | 2 +- api_docs/kbn_core_custom_branding_common.mdx | 2 +- api_docs/kbn_core_custom_branding_server.mdx | 2 +- ...n_core_custom_branding_server_internal.mdx | 2 +- .../kbn_core_custom_branding_server_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_browser.mdx | 2 +- ...kbn_core_deprecations_browser_internal.mdx | 2 +- .../kbn_core_deprecations_browser_mocks.mdx | 2 +- api_docs/kbn_core_deprecations_common.mdx | 2 +- api_docs/kbn_core_deprecations_server.mdx | 2 +- .../kbn_core_deprecations_server_internal.mdx | 2 +- .../kbn_core_deprecations_server_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_browser.mdx | 2 +- api_docs/kbn_core_doc_links_browser_mocks.mdx | 2 +- api_docs/kbn_core_doc_links_server.mdx | 2 +- api_docs/kbn_core_doc_links_server_mocks.mdx | 2 +- ...e_elasticsearch_client_server_internal.mdx | 2 +- ...core_elasticsearch_client_server_mocks.mdx | 2 +- api_docs/kbn_core_elasticsearch_server.mdx | 2 +- ...kbn_core_elasticsearch_server_internal.mdx | 2 +- .../kbn_core_elasticsearch_server_mocks.mdx | 2 +- .../kbn_core_environment_server_internal.mdx | 2 +- .../kbn_core_environment_server_mocks.mdx | 2 +- .../kbn_core_execution_context_browser.mdx | 2 +- ...ore_execution_context_browser_internal.mdx | 2 +- ...n_core_execution_context_browser_mocks.mdx | 2 +- .../kbn_core_execution_context_common.mdx | 2 +- .../kbn_core_execution_context_server.mdx | 2 +- ...core_execution_context_server_internal.mdx | 2 +- ...bn_core_execution_context_server_mocks.mdx | 2 +- api_docs/kbn_core_fatal_errors_browser.mdx | 2 +- .../kbn_core_fatal_errors_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_browser.mdx | 2 +- api_docs/kbn_core_http_browser_internal.mdx | 2 +- api_docs/kbn_core_http_browser_mocks.mdx | 2 +- api_docs/kbn_core_http_common.mdx | 2 +- .../kbn_core_http_context_server_mocks.mdx | 2 +- ...re_http_request_handler_context_server.mdx | 2 +- api_docs/kbn_core_http_resources_server.mdx | 2 +- ...bn_core_http_resources_server_internal.mdx | 2 +- .../kbn_core_http_resources_server_mocks.mdx | 2 +- .../kbn_core_http_router_server_internal.mdx | 2 +- .../kbn_core_http_router_server_mocks.mdx | 2 +- api_docs/kbn_core_http_server.devdocs.json | 2 +- api_docs/kbn_core_http_server.mdx | 2 +- api_docs/kbn_core_http_server_internal.mdx | 2 +- api_docs/kbn_core_http_server_mocks.mdx | 2 +- api_docs/kbn_core_i18n_browser.mdx | 2 +- api_docs/kbn_core_i18n_browser_mocks.mdx | 2 +- api_docs/kbn_core_i18n_server.mdx | 2 +- api_docs/kbn_core_i18n_server_internal.mdx | 2 +- api_docs/kbn_core_i18n_server_mocks.mdx | 2 +- ...n_core_injected_metadata_browser_mocks.mdx | 2 +- ...kbn_core_integrations_browser_internal.mdx | 2 +- .../kbn_core_integrations_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_browser.mdx | 2 +- api_docs/kbn_core_lifecycle_browser_mocks.mdx | 2 +- api_docs/kbn_core_lifecycle_server.mdx | 2 +- api_docs/kbn_core_lifecycle_server_mocks.mdx | 2 +- api_docs/kbn_core_logging_browser_mocks.mdx | 2 +- api_docs/kbn_core_logging_common_internal.mdx | 2 +- api_docs/kbn_core_logging_server.devdocs.json | 126 +++++++++++++++++- api_docs/kbn_core_logging_server.mdx | 4 +- ..._core_logging_server_internal.devdocs.json | 10 +- api_docs/kbn_core_logging_server_internal.mdx | 2 +- api_docs/kbn_core_logging_server_mocks.mdx | 2 +- ...ore_metrics_collectors_server_internal.mdx | 2 +- ...n_core_metrics_collectors_server_mocks.mdx | 2 +- api_docs/kbn_core_metrics_server.mdx | 2 +- api_docs/kbn_core_metrics_server_internal.mdx | 2 +- api_docs/kbn_core_metrics_server_mocks.mdx | 2 +- api_docs/kbn_core_mount_utils_browser.mdx | 2 +- api_docs/kbn_core_node_server.mdx | 2 +- api_docs/kbn_core_node_server_internal.mdx | 2 +- api_docs/kbn_core_node_server_mocks.mdx | 2 +- api_docs/kbn_core_notifications_browser.mdx | 2 +- ...bn_core_notifications_browser_internal.mdx | 2 +- .../kbn_core_notifications_browser_mocks.mdx | 2 +- api_docs/kbn_core_overlays_browser.mdx | 2 +- .../kbn_core_overlays_browser_internal.mdx | 2 +- api_docs/kbn_core_overlays_browser_mocks.mdx | 2 +- api_docs/kbn_core_plugins_browser.mdx | 2 +- api_docs/kbn_core_plugins_browser_mocks.mdx | 2 +- .../kbn_core_plugins_contracts_browser.mdx | 2 +- .../kbn_core_plugins_contracts_server.mdx | 2 +- api_docs/kbn_core_plugins_server.mdx | 2 +- api_docs/kbn_core_plugins_server_mocks.mdx | 2 +- api_docs/kbn_core_preboot_server.mdx | 2 +- api_docs/kbn_core_preboot_server_mocks.mdx | 2 +- api_docs/kbn_core_rendering_browser_mocks.mdx | 2 +- .../kbn_core_rendering_server_internal.mdx | 2 +- api_docs/kbn_core_rendering_server_mocks.mdx | 2 +- api_docs/kbn_core_root_server_internal.mdx | 2 +- .../kbn_core_saved_objects_api_browser.mdx | 2 +- .../kbn_core_saved_objects_api_server.mdx | 2 +- ...bn_core_saved_objects_api_server_mocks.mdx | 2 +- ...ore_saved_objects_base_server_internal.mdx | 2 +- ...n_core_saved_objects_base_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_browser.mdx | 2 +- ...bn_core_saved_objects_browser_internal.mdx | 2 +- .../kbn_core_saved_objects_browser_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_common.mdx | 2 +- ..._objects_import_export_server_internal.mdx | 2 +- ...ved_objects_import_export_server_mocks.mdx | 2 +- ...aved_objects_migration_server_internal.mdx | 2 +- ...e_saved_objects_migration_server_mocks.mdx | 2 +- api_docs/kbn_core_saved_objects_server.mdx | 2 +- ...kbn_core_saved_objects_server_internal.mdx | 2 +- .../kbn_core_saved_objects_server_mocks.mdx | 2 +- .../kbn_core_saved_objects_utils_server.mdx | 2 +- api_docs/kbn_core_security_browser.mdx | 2 +- .../kbn_core_security_browser_internal.mdx | 2 +- api_docs/kbn_core_security_browser_mocks.mdx | 2 +- api_docs/kbn_core_security_common.mdx | 2 +- api_docs/kbn_core_security_server.mdx | 2 +- .../kbn_core_security_server_internal.mdx | 2 +- api_docs/kbn_core_security_server_mocks.mdx | 2 +- api_docs/kbn_core_status_common.mdx | 2 +- api_docs/kbn_core_status_common_internal.mdx | 2 +- api_docs/kbn_core_status_server.mdx | 2 +- api_docs/kbn_core_status_server_internal.mdx | 2 +- api_docs/kbn_core_status_server_mocks.mdx | 2 +- ...core_test_helpers_deprecations_getters.mdx | 2 +- ...n_core_test_helpers_http_setup_browser.mdx | 2 +- api_docs/kbn_core_test_helpers_kbn_server.mdx | 2 +- .../kbn_core_test_helpers_model_versions.mdx | 2 +- ...n_core_test_helpers_so_type_serializer.mdx | 2 +- api_docs/kbn_core_test_helpers_test_utils.mdx | 2 +- api_docs/kbn_core_theme_browser.mdx | 2 +- api_docs/kbn_core_theme_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_browser.mdx | 2 +- .../kbn_core_ui_settings_browser_internal.mdx | 2 +- .../kbn_core_ui_settings_browser_mocks.mdx | 2 +- api_docs/kbn_core_ui_settings_common.mdx | 2 +- api_docs/kbn_core_ui_settings_server.mdx | 2 +- .../kbn_core_ui_settings_server_internal.mdx | 2 +- .../kbn_core_ui_settings_server_mocks.mdx | 2 +- api_docs/kbn_core_usage_data_server.mdx | 2 +- .../kbn_core_usage_data_server_internal.mdx | 2 +- api_docs/kbn_core_usage_data_server_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_browser.mdx | 2 +- ...kbn_core_user_profile_browser_internal.mdx | 2 +- .../kbn_core_user_profile_browser_mocks.mdx | 2 +- api_docs/kbn_core_user_profile_common.mdx | 2 +- api_docs/kbn_core_user_profile_server.mdx | 2 +- .../kbn_core_user_profile_server_internal.mdx | 2 +- .../kbn_core_user_profile_server_mocks.mdx | 2 +- api_docs/kbn_core_user_settings_server.mdx | 2 +- .../kbn_core_user_settings_server_mocks.mdx | 2 +- api_docs/kbn_crypto.mdx | 2 +- api_docs/kbn_crypto_browser.mdx | 2 +- api_docs/kbn_custom_icons.mdx | 2 +- api_docs/kbn_custom_integrations.mdx | 2 +- api_docs/kbn_cypress_config.mdx | 2 +- api_docs/kbn_data_forge.mdx | 2 +- api_docs/kbn_data_service.mdx | 2 +- api_docs/kbn_data_stream_adapter.mdx | 2 +- api_docs/kbn_data_view_utils.mdx | 2 +- api_docs/kbn_datemath.mdx | 2 +- api_docs/kbn_deeplinks_analytics.mdx | 2 +- api_docs/kbn_deeplinks_devtools.mdx | 2 +- api_docs/kbn_deeplinks_fleet.mdx | 2 +- api_docs/kbn_deeplinks_management.mdx | 2 +- api_docs/kbn_deeplinks_ml.mdx | 2 +- api_docs/kbn_deeplinks_observability.mdx | 2 +- api_docs/kbn_deeplinks_search.mdx | 2 +- api_docs/kbn_deeplinks_security.mdx | 2 +- api_docs/kbn_deeplinks_shared.mdx | 2 +- api_docs/kbn_default_nav_analytics.mdx | 2 +- api_docs/kbn_default_nav_devtools.mdx | 2 +- api_docs/kbn_default_nav_management.mdx | 2 +- api_docs/kbn_default_nav_ml.mdx | 2 +- api_docs/kbn_dev_cli_errors.mdx | 2 +- api_docs/kbn_dev_cli_runner.mdx | 2 +- api_docs/kbn_dev_proc_runner.mdx | 2 +- api_docs/kbn_dev_utils.mdx | 2 +- api_docs/kbn_discover_utils.mdx | 2 +- api_docs/kbn_doc_links.mdx | 2 +- api_docs/kbn_docs_utils.mdx | 2 +- api_docs/kbn_dom_drag_drop.mdx | 2 +- api_docs/kbn_ebt_tools.mdx | 2 +- api_docs/kbn_ecs_data_quality_dashboard.mdx | 2 +- api_docs/kbn_elastic_agent_utils.mdx | 2 +- api_docs/kbn_elastic_assistant.mdx | 2 +- api_docs/kbn_elastic_assistant_common.mdx | 2 +- api_docs/kbn_es.mdx | 2 +- api_docs/kbn_es_archiver.mdx | 2 +- api_docs/kbn_es_errors.mdx | 2 +- api_docs/kbn_es_query.mdx | 2 +- api_docs/kbn_es_types.mdx | 2 +- api_docs/kbn_eslint_plugin_imports.mdx | 2 +- api_docs/kbn_esql_ast.mdx | 2 +- api_docs/kbn_esql_utils.mdx | 2 +- ..._esql_validation_autocomplete.devdocs.json | 6 +- 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.devdocs.json | 58 ++++++++ api_docs/kbn_field_utils.mdx | 4 +- api_docs/kbn_find_used_node_modules.mdx | 2 +- api_docs/kbn_formatters.mdx | 2 +- .../kbn_ftr_common_functional_services.mdx | 2 +- .../kbn_ftr_common_functional_ui_services.mdx | 2 +- api_docs/kbn_generate.mdx | 2 +- api_docs/kbn_generate_console_definitions.mdx | 2 +- api_docs/kbn_generate_csv.mdx | 2 +- api_docs/kbn_guided_onboarding.mdx | 2 +- api_docs/kbn_handlebars.mdx | 2 +- api_docs/kbn_hapi_mocks.mdx | 2 +- api_docs/kbn_health_gateway_server.mdx | 2 +- api_docs/kbn_home_sample_data_card.mdx | 2 +- api_docs/kbn_home_sample_data_tab.mdx | 2 +- api_docs/kbn_i18n.mdx | 2 +- api_docs/kbn_i18n_react.mdx | 2 +- api_docs/kbn_import_resolver.mdx | 2 +- api_docs/kbn_index_management.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_io_ts_utils.mdx | 2 +- api_docs/kbn_ipynb.mdx | 2 +- api_docs/kbn_jest_serializers.mdx | 2 +- api_docs/kbn_journeys.mdx | 2 +- api_docs/kbn_json_ast.mdx | 2 +- api_docs/kbn_kibana_manifest_schema.mdx | 2 +- .../kbn_language_documentation_popover.mdx | 2 +- api_docs/kbn_lens_embeddable_utils.mdx | 2 +- api_docs/kbn_lens_formula_docs.mdx | 2 +- api_docs/kbn_logging.mdx | 2 +- api_docs/kbn_logging_mocks.mdx | 2 +- api_docs/kbn_managed_content_badge.mdx | 2 +- api_docs/kbn_managed_vscode_config.mdx | 2 +- api_docs/kbn_management_cards_navigation.mdx | 2 +- .../kbn_management_settings_application.mdx | 2 +- ...ent_settings_components_field_category.mdx | 2 +- ...gement_settings_components_field_input.mdx | 2 +- ...nagement_settings_components_field_row.mdx | 2 +- ...bn_management_settings_components_form.mdx | 2 +- ...n_management_settings_field_definition.mdx | 2 +- api_docs/kbn_management_settings_ids.mdx | 2 +- ...n_management_settings_section_registry.mdx | 2 +- api_docs/kbn_management_settings_types.mdx | 2 +- .../kbn_management_settings_utilities.mdx | 2 +- api_docs/kbn_management_storybook_config.mdx | 2 +- api_docs/kbn_mapbox_gl.mdx | 2 +- api_docs/kbn_maps_vector_tile_utils.mdx | 2 +- api_docs/kbn_ml_agg_utils.mdx | 2 +- api_docs/kbn_ml_anomaly_utils.mdx | 2 +- api_docs/kbn_ml_cancellable_search.mdx | 2 +- api_docs/kbn_ml_category_validator.mdx | 2 +- api_docs/kbn_ml_chi2test.mdx | 2 +- .../kbn_ml_data_frame_analytics_utils.mdx | 2 +- api_docs/kbn_ml_data_grid.mdx | 2 +- api_docs/kbn_ml_date_picker.mdx | 2 +- api_docs/kbn_ml_date_utils.mdx | 2 +- api_docs/kbn_ml_error_utils.mdx | 2 +- api_docs/kbn_ml_in_memory_table.mdx | 2 +- api_docs/kbn_ml_is_defined.mdx | 2 +- api_docs/kbn_ml_is_populated_object.mdx | 2 +- api_docs/kbn_ml_kibana_theme.mdx | 2 +- api_docs/kbn_ml_local_storage.mdx | 2 +- api_docs/kbn_ml_nested_property.mdx | 2 +- api_docs/kbn_ml_number_utils.mdx | 2 +- api_docs/kbn_ml_query_utils.mdx | 2 +- api_docs/kbn_ml_random_sampler_utils.mdx | 2 +- api_docs/kbn_ml_route_utils.mdx | 2 +- api_docs/kbn_ml_runtime_field_utils.mdx | 2 +- api_docs/kbn_ml_string_hash.mdx | 2 +- api_docs/kbn_ml_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_mock_idp_utils.mdx | 2 +- api_docs/kbn_monaco.mdx | 2 +- api_docs/kbn_object_versioning.mdx | 2 +- ...n_observability_alert_details.devdocs.json | 4 +- api_docs/kbn_observability_alert_details.mdx | 2 +- .../kbn_observability_alerting_test_data.mdx | 2 +- ...ility_get_padded_alert_time_range_util.mdx | 2 +- api_docs/kbn_openapi_bundler.mdx | 2 +- api_docs/kbn_openapi_generator.mdx | 2 +- api_docs/kbn_optimizer.mdx | 2 +- api_docs/kbn_optimizer_webpack_helpers.mdx | 2 +- api_docs/kbn_osquery_io_ts_types.mdx | 2 +- api_docs/kbn_panel_loader.mdx | 2 +- ..._performance_testing_dataset_extractor.mdx | 2 +- api_docs/kbn_plugin_check.mdx | 2 +- api_docs/kbn_plugin_generator.mdx | 2 +- api_docs/kbn_plugin_helpers.mdx | 2 +- api_docs/kbn_presentation_containers.mdx | 2 +- api_docs/kbn_presentation_publishing.mdx | 2 +- api_docs/kbn_profiling_utils.mdx | 2 +- api_docs/kbn_random_sampling.mdx | 2 +- api_docs/kbn_react_field.mdx | 2 +- api_docs/kbn_react_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_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 +- api_docs/kbn_rison.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_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_types.mdx | 2 +- api_docs/kbn_security_hardening.mdx | 2 +- api_docs/kbn_security_plugin_types_common.mdx | 2 +- api_docs/kbn_security_plugin_types_public.mdx | 2 +- api_docs/kbn_security_plugin_types_server.mdx | 2 +- api_docs/kbn_security_solution_features.mdx | 2 +- api_docs/kbn_security_solution_navigation.mdx | 2 +- api_docs/kbn_security_solution_side_nav.mdx | 2 +- ...kbn_security_solution_storybook_config.mdx | 2 +- .../kbn_securitysolution_autocomplete.mdx | 2 +- api_docs/kbn_securitysolution_data_table.mdx | 2 +- api_docs/kbn_securitysolution_ecs.mdx | 2 +- api_docs/kbn_securitysolution_es_utils.mdx | 2 +- ...ritysolution_exception_list_components.mdx | 2 +- api_docs/kbn_securitysolution_grouping.mdx | 2 +- api_docs/kbn_securitysolution_hook_utils.mdx | 2 +- ..._securitysolution_io_ts_alerting_types.mdx | 2 +- .../kbn_securitysolution_io_ts_list_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_types.mdx | 2 +- api_docs/kbn_securitysolution_io_ts_utils.mdx | 2 +- api_docs/kbn_securitysolution_list_api.mdx | 2 +- .../kbn_securitysolution_list_constants.mdx | 2 +- api_docs/kbn_securitysolution_list_hooks.mdx | 2 +- api_docs/kbn_securitysolution_list_utils.mdx | 2 +- api_docs/kbn_securitysolution_rules.mdx | 2 +- api_docs/kbn_securitysolution_t_grid.mdx | 2 +- api_docs/kbn_securitysolution_utils.mdx | 2 +- api_docs/kbn_server_http_tools.mdx | 2 +- api_docs/kbn_server_route_repository.mdx | 2 +- api_docs/kbn_serverless_common_settings.mdx | 2 +- .../kbn_serverless_observability_settings.mdx | 2 +- api_docs/kbn_serverless_project_switcher.mdx | 2 +- api_docs/kbn_serverless_search_settings.mdx | 2 +- api_docs/kbn_serverless_security_settings.mdx | 2 +- api_docs/kbn_serverless_storybook_config.mdx | 2 +- api_docs/kbn_shared_svg.mdx | 2 +- api_docs/kbn_shared_ux_avatar_solution.mdx | 2 +- .../kbn_shared_ux_button_exit_full_screen.mdx | 2 +- api_docs/kbn_shared_ux_button_toolbar.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data.mdx | 2 +- api_docs/kbn_shared_ux_card_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_chrome_navigation.mdx | 2 +- api_docs/kbn_shared_ux_error_boundary.mdx | 2 +- api_docs/kbn_shared_ux_file_context.mdx | 2 +- api_docs/kbn_shared_ux_file_image.mdx | 2 +- api_docs/kbn_shared_ux_file_image_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_mocks.mdx | 2 +- api_docs/kbn_shared_ux_file_picker.mdx | 2 +- api_docs/kbn_shared_ux_file_types.mdx | 2 +- api_docs/kbn_shared_ux_file_upload.mdx | 2 +- api_docs/kbn_shared_ux_file_util.mdx | 2 +- api_docs/kbn_shared_ux_link_redirect_app.mdx | 2 +- .../kbn_shared_ux_link_redirect_app_mocks.mdx | 2 +- api_docs/kbn_shared_ux_markdown.mdx | 2 +- api_docs/kbn_shared_ux_markdown_mocks.mdx | 2 +- .../kbn_shared_ux_page_analytics_no_data.mdx | 2 +- ...shared_ux_page_analytics_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_no_data.mdx | 2 +- ...bn_shared_ux_page_kibana_no_data_mocks.mdx | 2 +- .../kbn_shared_ux_page_kibana_template.mdx | 2 +- ...n_shared_ux_page_kibana_template_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data.mdx | 2 +- .../kbn_shared_ux_page_no_data_config.mdx | 2 +- ...bn_shared_ux_page_no_data_config_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_no_data_mocks.mdx | 2 +- api_docs/kbn_shared_ux_page_solution_nav.mdx | 2 +- .../kbn_shared_ux_prompt_no_data_views.mdx | 2 +- ...n_shared_ux_prompt_no_data_views_mocks.mdx | 2 +- api_docs/kbn_shared_ux_prompt_not_found.mdx | 2 +- api_docs/kbn_shared_ux_router.mdx | 2 +- api_docs/kbn_shared_ux_router_mocks.mdx | 2 +- api_docs/kbn_shared_ux_storybook_config.mdx | 2 +- api_docs/kbn_shared_ux_storybook_mock.mdx | 2 +- api_docs/kbn_shared_ux_tabbed_modal.mdx | 2 +- api_docs/kbn_shared_ux_utility.mdx | 2 +- api_docs/kbn_slo_schema.mdx | 2 +- api_docs/kbn_solution_nav_es.mdx | 2 +- api_docs/kbn_solution_nav_oblt.mdx | 2 +- api_docs/kbn_some_dev_log.mdx | 2 +- api_docs/kbn_sort_predicates.mdx | 2 +- api_docs/kbn_std.mdx | 2 +- api_docs/kbn_stdio_dev_helpers.mdx | 2 +- api_docs/kbn_storybook.mdx | 2 +- api_docs/kbn_telemetry_tools.mdx | 2 +- api_docs/kbn_test.mdx | 2 +- api_docs/kbn_test_eui_helpers.mdx | 2 +- api_docs/kbn_test_jest_helpers.mdx | 2 +- api_docs/kbn_test_subj_selector.mdx | 2 +- api_docs/kbn_text_based_editor.mdx | 2 +- api_docs/kbn_timerange.mdx | 2 +- api_docs/kbn_tooling_log.mdx | 2 +- api_docs/kbn_triggers_actions_ui_types.mdx | 2 +- api_docs/kbn_ts_projects.mdx | 2 +- api_docs/kbn_typed_react_router_config.mdx | 2 +- api_docs/kbn_ui_actions_browser.mdx | 2 +- api_docs/kbn_ui_shared_deps_src.mdx | 2 +- api_docs/kbn_ui_theme.mdx | 2 +- api_docs/kbn_unified_data_table.mdx | 2 +- api_docs/kbn_unified_doc_viewer.mdx | 2 +- api_docs/kbn_unified_field_list.mdx | 2 +- api_docs/kbn_unsaved_changes_badge.mdx | 2 +- api_docs/kbn_use_tracked_promise.mdx | 2 +- api_docs/kbn_user_profile_components.mdx | 2 +- api_docs/kbn_utility_types.mdx | 2 +- api_docs/kbn_utility_types_jest.mdx | 2 +- api_docs/kbn_utils.mdx | 2 +- api_docs/kbn_visualization_ui_components.mdx | 2 +- api_docs/kbn_visualization_utils.mdx | 2 +- api_docs/kbn_xstate_utils.mdx | 2 +- api_docs/kbn_yarn_lock_validator.mdx | 2 +- api_docs/kbn_zod_helpers.mdx | 2 +- api_docs/kibana_overview.mdx | 2 +- api_docs/kibana_react.devdocs.json | 92 ------------- api_docs/kibana_react.mdx | 2 +- api_docs/kibana_utils.mdx | 2 +- api_docs/kubernetes_security.mdx | 2 +- api_docs/lens.mdx | 2 +- api_docs/license_api_guard.mdx | 2 +- api_docs/license_management.mdx | 2 +- api_docs/licensing.mdx | 2 +- api_docs/links.mdx | 2 +- api_docs/lists.mdx | 2 +- api_docs/logs_explorer.mdx | 2 +- api_docs/logs_shared.mdx | 2 +- api_docs/management.mdx | 2 +- api_docs/maps.devdocs.json | 85 +++++++++++- api_docs/maps.mdx | 4 +- 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 +- .../observability_a_i_assistant.devdocs.json | 4 +- 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.devdocs.json | 4 +- api_docs/osquery.mdx | 2 +- api_docs/painless_lab.mdx | 2 +- api_docs/plugin_directory.mdx | 14 +- api_docs/presentation_panel.mdx | 2 +- api_docs/presentation_util.mdx | 2 +- api_docs/profiling.mdx | 2 +- api_docs/profiling_data_access.mdx | 2 +- api_docs/remote_clusters.mdx | 2 +- api_docs/reporting.mdx | 2 +- api_docs/rollup.mdx | 2 +- api_docs/rule_registry.devdocs.json | 10 +- 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_connectors.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/task_manager.mdx | 2 +- api_docs/telemetry.mdx | 2 +- api_docs/telemetry_collection_manager.mdx | 2 +- api_docs/telemetry_collection_xpack.mdx | 2 +- api_docs/telemetry_management_section.mdx | 2 +- api_docs/text_based_languages.mdx | 2 +- api_docs/threat_intelligence.mdx | 2 +- api_docs/timelines.mdx | 2 +- api_docs/transform.mdx | 2 +- api_docs/triggers_actions_ui.mdx | 2 +- api_docs/ui_actions.mdx | 2 +- api_docs/ui_actions_enhanced.mdx | 2 +- api_docs/unified_doc_viewer.mdx | 2 +- api_docs/unified_histogram.mdx | 2 +- api_docs/unified_search.mdx | 2 +- api_docs/unified_search_autocomplete.mdx | 2 +- api_docs/uptime.mdx | 2 +- api_docs/url_forwarding.mdx | 2 +- api_docs/usage_collection.mdx | 2 +- api_docs/ux.mdx | 2 +- api_docs/vis_default_editor.mdx | 2 +- api_docs/vis_type_gauge.mdx | 2 +- api_docs/vis_type_heatmap.mdx | 2 +- api_docs/vis_type_pie.mdx | 2 +- api_docs/vis_type_table.mdx | 2 +- api_docs/vis_type_timelion.mdx | 2 +- api_docs/vis_type_timeseries.mdx | 2 +- api_docs/vis_type_vega.mdx | 2 +- api_docs/vis_type_vislib.mdx | 2 +- api_docs/vis_type_xy.mdx | 2 +- api_docs/visualizations.mdx | 2 +- 704 files changed, 1123 insertions(+), 880 deletions(-) diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 0024b7036c12d..c97a28a953e22 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-05-07 +date: 2024-05-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 40537f6bc3efa..472ab50fccc8e 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-05-07 +date: 2024-05-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 9c66f645d9e99..19cf332deff9a 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-05-07 +date: 2024-05-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 535eaf0b3c3d6..9c0942af8f184 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-05-07 +date: 2024-05-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 e90c347a9bcd1..4f331e34794a4 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.devdocs.json b/api_docs/apm.devdocs.json index 284c66b4eb5c9..d7cac23f6082c 100644 --- a/api_docs/apm.devdocs.json +++ b/api_docs/apm.devdocs.json @@ -418,7 +418,7 @@ "label": "APIEndpoint", "description": [], "signature": [ - "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/index_pattern\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/samples\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/error/{errorId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/nodes\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/summary\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/functions_overview\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/active_instances\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search 2023-10-31\" | \"POST /api/apm/services/{serviceName}/annotation 2023-10-31\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/services/{serviceName}/alerts_count\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/service-group/counts\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"POST /internal/apm/traces/aggregated_critical_path\" | \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\" | \"GET /internal/apm/traces/{traceId}/spans/{spanId}\" | \"GET /internal/apm/transactions\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/rule_types/transaction_error_rate/chart_preview\" | \"GET /internal/apm/rule_types/error_count/chart_preview\" | \"GET /internal/apm/rule_types/transaction_duration/chart_preview\" | \"GET /api/apm/settings/agent-configuration 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/view 2023-10-31\" | \"DELETE /api/apm/settings/agent-configuration 2023-10-31\" | \"PUT /api/apm/settings/agent-configuration 2023-10-31\" | \"POST /api/apm/settings/agent-configuration/search 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/environments 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/agent_name 2023-10-31\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps 2023-10-31\" | \"POST /api/apm/sourcemaps 2023-10-31\" | \"DELETE /api/apm/sourcemaps/{id} 2023-10-31\" | \"POST /internal/apm/sourcemaps/migrate_fleet_artifacts\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema 2023-10-31\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys 2023-10-31\" | \"GET /internal/apm/storage_explorer\" | \"GET /internal/apm/services/{serviceName}/storage_details\" | \"GET /internal/apm/storage_chart\" | \"GET /internal/apm/storage_explorer/privileges\" | \"GET /internal/apm/storage_explorer_summary_stats\" | \"GET /internal/apm/storage_explorer/is_cross_cluster_search\" | \"GET /internal/apm/storage_explorer/get_services\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\" | \"GET /internal/apm/settings/labs\" | \"GET /internal/apm/get_agents_per_service\" | \"GET /internal/apm/get_latest_agent_versions\" | \"GET /internal/apm/services/{serviceName}/agent_instances\" | \"GET /internal/apm/mobile-services/{serviceName}/error/http_error_rate\" | \"GET /internal/apm/mobile-services/{serviceName}/errors/groups/main_statistics\" | \"POST /internal/apm/mobile-services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/error_terms\" | \"POST /internal/apm/mobile-services/{serviceName}/crashes/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/groups/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/distribution\" | \"GET /internal/apm/services/{serviceName}/mobile/filters\" | \"GET /internal/apm/mobile-services/{serviceName}/most_used_charts\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/sessions\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/http_requests\" | \"GET /internal/apm/mobile-services/{serviceName}/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/location/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/terms\" | \"GET /internal/apm/mobile-services/{serviceName}/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/detailed_statistics\" | \"GET /internal/apm/diagnostics\" | \"POST /internal/apm/assistant/get_apm_timeseries\" | \"GET /internal/apm/assistant/get_downstream_dependencies\" | \"GET /internal/apm/services/{serviceName}/profiling/flamegraph\" | \"GET /internal/apm/profiling/status\" | \"GET /internal/apm/services/{serviceName}/profiling/functions\" | \"GET /internal/apm/services/{serviceName}/profiling/hosts/flamegraph\" | \"GET /internal/apm/services/{serviceName}/profiling/hosts/functions\" | \"POST /internal/apm/custom-dashboard\" | \"DELETE /internal/apm/custom-dashboard\" | \"GET /internal/apm/services/{serviceName}/dashboards\"" + "\"POST /internal/apm/data_view/static\" | \"GET /internal/apm/data_view/index_pattern\" | \"GET /internal/apm/environments\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/groups/main_statistics_by_transaction_name\" | \"POST /internal/apm/services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/samples\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/error/{errorId}\" | \"GET /internal/apm/services/{serviceName}/errors/distribution\" | \"GET /internal/apm/services/{serviceName}/errors/{groupId}/top_erroneous_transactions\" | \"POST /internal/apm/latency/overall_distribution/transactions\" | \"GET /internal/apm/services/{serviceName}/metrics/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/nodes\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/charts\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/summary\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/functions_overview\" | \"GET /internal/apm/services/{serviceName}/metrics/serverless/active_instances\" | \"GET /internal/apm/observability_overview\" | \"GET /internal/apm/observability_overview/has_data\" | \"GET /internal/apm/service-map\" | \"GET /internal/apm/service-map/service/{serviceName}\" | \"GET /internal/apm/service-map/dependency\" | \"GET /internal/apm/services\" | \"POST /internal/apm/services/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/metadata/details\" | \"GET /internal/apm/services/{serviceName}/metadata/icons\" | \"GET /internal/apm/services/{serviceName}/agent\" | \"GET /internal/apm/services/{serviceName}/transaction_types\" | \"GET /internal/apm/services/{serviceName}/node/{serviceNodeName}/metadata\" | \"GET /api/apm/services/{serviceName}/annotation/search 2023-10-31\" | \"POST /api/apm/services/{serviceName}/annotation 2023-10-31\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/details/{serviceNodeName}\" | \"GET /internal/apm/services/{serviceName}/throughput\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/main_statistics\" | \"GET /internal/apm/services/{serviceName}/service_overview_instances/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/dependencies\" | \"GET /internal/apm/services/{serviceName}/dependencies/breakdown\" | \"GET /internal/apm/services/{serviceName}/anomaly_charts\" | \"GET /internal/apm/services/{serviceName}/alerts_count\" | \"GET /internal/apm/assets/services\" | \"GET /internal/apm/service-groups\" | \"GET /internal/apm/service-group\" | \"POST /internal/apm/service-group\" | \"DELETE /internal/apm/service-group\" | \"GET /internal/apm/service-group/services\" | \"GET /internal/apm/service-group/counts\" | \"GET /internal/apm/suggestions\" | \"GET /internal/apm/traces/{traceId}\" | \"GET /internal/apm/traces\" | \"GET /internal/apm/traces/{traceId}/root_transaction\" | \"GET /internal/apm/transactions/{transactionId}\" | \"GET /internal/apm/traces/find\" | \"POST /internal/apm/traces/aggregated_critical_path\" | \"GET /internal/apm/traces/{traceId}/transactions/{transactionId}\" | \"GET /internal/apm/traces/{traceId}/spans/{spanId}\" | \"GET /internal/apm/transactions\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/main_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/groups/detailed_statistics\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/latency\" | \"GET /internal/apm/services/{serviceName}/transactions/traces/samples\" | \"GET /internal/apm/services/{serviceName}/transaction/charts/breakdown\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/error_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate\" | \"GET /internal/apm/services/{serviceName}/transactions/charts/coldstart_rate_by_transaction_name\" | \"GET /internal/apm/rule_types/transaction_error_rate/chart_preview\" | \"GET /internal/apm/rule_types/error_count/chart_preview\" | \"GET /internal/apm/rule_types/transaction_duration/chart_preview\" | \"GET /api/apm/settings/agent-configuration 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/view 2023-10-31\" | \"DELETE /api/apm/settings/agent-configuration 2023-10-31\" | \"PUT /api/apm/settings/agent-configuration 2023-10-31\" | \"POST /api/apm/settings/agent-configuration/search 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/environments 2023-10-31\" | \"GET /api/apm/settings/agent-configuration/agent_name 2023-10-31\" | \"GET /internal/apm/settings/anomaly-detection/jobs\" | \"POST /internal/apm/settings/anomaly-detection/jobs\" | \"GET /internal/apm/settings/anomaly-detection/environments\" | \"POST /internal/apm/settings/anomaly-detection/update_to_v3\" | \"GET /internal/apm/settings/apm-index-settings\" | \"GET /internal/apm/settings/apm-indices\" | \"POST /internal/apm/settings/apm-indices/save\" | \"GET /internal/apm/settings/custom_links/transaction\" | \"GET /internal/apm/settings/custom_links\" | \"POST /internal/apm/settings/custom_links\" | \"PUT /internal/apm/settings/custom_links/{id}\" | \"DELETE /internal/apm/settings/custom_links/{id}\" | \"GET /api/apm/sourcemaps 2023-10-31\" | \"POST /api/apm/sourcemaps 2023-10-31\" | \"DELETE /api/apm/sourcemaps/{id} 2023-10-31\" | \"POST /internal/apm/sourcemaps/migrate_fleet_artifacts\" | \"GET /internal/apm/fleet/has_apm_policies\" | \"GET /internal/apm/fleet/agents\" | \"POST /api/apm/fleet/apm_server_schema 2023-10-31\" | \"GET /internal/apm/fleet/apm_server_schema/unsupported\" | \"GET /internal/apm/fleet/migration_check\" | \"POST /internal/apm/fleet/cloud_apm_package_policy\" | \"GET /internal/apm/fleet/java_agent_versions\" | \"GET /internal/apm/dependencies/top_dependencies\" | \"GET /internal/apm/dependencies/upstream_services\" | \"GET /internal/apm/dependencies/metadata\" | \"GET /internal/apm/dependencies/charts/latency\" | \"GET /internal/apm/dependencies/charts/throughput\" | \"GET /internal/apm/dependencies/charts/error_rate\" | \"GET /internal/apm/dependencies/operations\" | \"GET /internal/apm/dependencies/charts/distribution\" | \"GET /internal/apm/dependencies/operations/spans\" | \"GET /internal/apm/correlations/field_candidates/transactions\" | \"GET /internal/apm/correlations/field_value_stats/transactions\" | \"POST /internal/apm/correlations/field_value_pairs/transactions\" | \"POST /internal/apm/correlations/significant_correlations/transactions\" | \"POST /internal/apm/correlations/p_values/transactions\" | \"GET /internal/apm/fallback_to_transactions\" | \"GET /internal/apm/has_data\" | \"GET /internal/apm/event_metadata/{processorEvent}/{id}\" | \"GET /internal/apm/agent_keys\" | \"GET /internal/apm/agent_keys/privileges\" | \"POST /internal/apm/api_key/invalidate\" | \"POST /api/apm/agent_keys 2023-10-31\" | \"GET /internal/apm/storage_explorer\" | \"GET /internal/apm/services/{serviceName}/storage_details\" | \"GET /internal/apm/storage_chart\" | \"GET /internal/apm/storage_explorer/privileges\" | \"GET /internal/apm/storage_explorer_summary_stats\" | \"GET /internal/apm/storage_explorer/is_cross_cluster_search\" | \"GET /internal/apm/storage_explorer/get_services\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/parents\" | \"GET /internal/apm/traces/{traceId}/span_links/{spanId}/children\" | \"GET /internal/apm/services/{serviceName}/infrastructure_attributes\" | \"GET /internal/apm/debug-telemetry\" | \"GET /internal/apm/time_range_metadata\" | \"GET /internal/apm/settings/labs\" | \"GET /internal/apm/get_agents_per_service\" | \"GET /internal/apm/get_latest_agent_versions\" | \"GET /internal/apm/services/{serviceName}/agent_instances\" | \"GET /internal/apm/mobile-services/{serviceName}/error/http_error_rate\" | \"GET /internal/apm/mobile-services/{serviceName}/errors/groups/main_statistics\" | \"POST /internal/apm/mobile-services/{serviceName}/errors/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/error_terms\" | \"POST /internal/apm/mobile-services/{serviceName}/crashes/groups/detailed_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/groups/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/crashes/distribution\" | \"GET /internal/apm/services/{serviceName}/mobile/filters\" | \"GET /internal/apm/mobile-services/{serviceName}/most_used_charts\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/sessions\" | \"GET /internal/apm/mobile-services/{serviceName}/transactions/charts/http_requests\" | \"GET /internal/apm/mobile-services/{serviceName}/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/location/stats\" | \"GET /internal/apm/mobile-services/{serviceName}/terms\" | \"GET /internal/apm/mobile-services/{serviceName}/main_statistics\" | \"GET /internal/apm/mobile-services/{serviceName}/detailed_statistics\" | \"GET /internal/apm/diagnostics\" | \"POST /internal/apm/assistant/get_apm_timeseries\" | \"GET /internal/apm/assistant/get_downstream_dependencies\" | \"GET /internal/apm/services/{serviceName}/profiling/flamegraph\" | \"GET /internal/apm/profiling/status\" | \"GET /internal/apm/services/{serviceName}/profiling/functions\" | \"GET /internal/apm/services/{serviceName}/profiling/hosts/flamegraph\" | \"GET /internal/apm/services/{serviceName}/profiling/hosts/functions\" | \"POST /internal/apm/custom-dashboard\" | \"DELETE /internal/apm/custom-dashboard\" | \"GET /internal/apm/services/{serviceName}/dashboards\"" ], "path": "x-pack/plugins/observability_solution/apm/server/routes/apm_routes/get_global_apm_server_route_repository.ts", "deprecated": false, @@ -5661,6 +5661,26 @@ "SavedServiceGroup", "[]; }>; } & ", "APMRouteCreateOptions", + "; \"GET /internal/apm/assets/services\": { endpoint: \"GET /internal/apm/assets/services\"; params?: ", + "TypeC", + "<{ query: ", + "IntersectionC", + "<[", + "TypeC", + "<{ kuery: ", + "StringC", + "; }>, ", + "TypeC", + "<{ start: ", + "Type", + "; end: ", + "Type", + "; }>]>; }> | undefined; handler: ({}: ", + "APMRouteHandlerResources", + " & { params: { query: { kuery: string; } & { start: number; end: number; }; }; }) => Promise<", + "AssetServicesResponse", + ">; } & ", + "APMRouteCreateOptions", "; \"GET /internal/apm/services/{serviceName}/alerts_count\": { endpoint: \"GET /internal/apm/services/{serviceName}/alerts_count\"; params?: ", "TypeC", "<{ path: ", diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 7c4c49462a8c6..591a7433debbe 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 29 | 0 | 29 | 122 | +| 29 | 0 | 29 | 123 | ## Client diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 80a6fc8e95c48..b7e3d32e9a8d7 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 256d8489bc172..cac5994e90206 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/assets_data_access.mdx b/api_docs/assets_data_access.mdx index 0f888ef73cfb6..c58d9cfdda075 100644 --- a/api_docs/assets_data_access.mdx +++ b/api_docs/assets_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetsDataAccess title: "assetsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the assetsDataAccess plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetsDataAccess'] --- import assetsDataAccessObj from './assets_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 06162e4d0bdbc..da393cc648c8d 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-05-07 +date: 2024-05-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 8568d66cc91a1..49fb07a7fb3e5 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-05-07 +date: 2024-05-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 c81333834a486..9a1d982a312c9 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-05-07 +date: 2024-05-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 7405871ccccf6..073d6a34d86f4 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-05-07 +date: 2024-05-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 dc1b676960da1..eef9ad6abc7d9 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-05-07 +date: 2024-05-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 8230a1bbd091d..0db5f19b9d05f 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-05-07 +date: 2024-05-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 98be65ddae27d..29262e6a30e50 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-05-07 +date: 2024-05-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 1fbdc26f79c5f..542cb320910d3 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index a3b9f713ad2e4..2a64d3e8903ad 100644 --- a/api_docs/cloud_experiments.mdx +++ b/api_docs/cloud_experiments.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudExperiments title: "cloudExperiments" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudExperiments plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index f48b7e99397fb..3ba3b360af9ee 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-05-07 +date: 2024-05-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 b17be506e6f25..e0a13c396ad4a 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-05-07 +date: 2024-05-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 61241131bc759..c1aa80a071032 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-05-07 +date: 2024-05-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 26d83121fe660..67f2a9474ccfe 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-05-07 +date: 2024-05-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 5ff6bb57966ff..c5fe080ae2ce2 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-05-07 +date: 2024-05-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 e84bbaaba214c..9d1a5e549842b 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-05-07 +date: 2024-05-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 fd432d385317a..79301bce42404 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-05-07 +date: 2024-05-08 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 929ad09c59515..db1c02fd0f7fe 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index fba801c23db31..3d90c12fc736a 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-05-07 +date: 2024-05-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 8d97225e9c340..5f92e6832115b 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 62ee6a25e60c3..6e3792506141f 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-05-07 +date: 2024-05-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 b5d9c46d50411..c7b5f38dcf75c 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-05-07 +date: 2024-05-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 cae57f617679c..455a22b35ee63 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-05-07 +date: 2024-05-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 843bcf1faa316..743ccc7638e35 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-05-07 +date: 2024-05-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 9cf018297f500..839abc15f799c 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-05-07 +date: 2024-05-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 dcfc00e706997..dcd924fde95e4 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-05-07 +date: 2024-05-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 7adb51c6f54a2..849e0ca6b4d29 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -129,9 +129,10 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | canvas | - | | | canvas | - | | | canvas | - | +| | @kbn/core-logging-server-internal, security | - | | | spaces, savedObjectsManagement | - | -| | devTools, console, crossClusterReplication, grokdebugger, ingestPipelines, infra, painlessLab, searchprofiler, metricsDataAccess, apm, observabilityOnboarding | - | -| | observabilityShared, console, runtimeFields, indexManagement | - | +| | infra, metricsDataAccess, apm, observabilityOnboarding | - | +| | observabilityShared | - | | | @kbn/core-elasticsearch-server-internal, @kbn/core-plugins-server-internal, enterpriseSearch, observabilityOnboarding, console | - | | | @kbn/react-kibana-context-styled, kibanaReact | - | | | enterpriseSearch | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 75ca802622d62..20a6c5bee834a 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -91,6 +91,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## @kbn/core-logging-server-internal + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [index.ts](https://github.com/elastic/kibana/tree/main/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/strategies/index.ts#:~:text=max), [create_retention_policy.ts](https://github.com/elastic/kibana/tree/main/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/retention/create_retention_policy.ts#:~:text=max), [appenders.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/logging/core-logging-server-internal/src/appenders/appenders.test.ts#:~:text=max), [rolling_file_appender.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/rolling_file_appender.test.ts#:~:text=max), [create_retention_policy.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/retention/create_retention_policy.test.ts#:~:text=max), [numeric_strategy.test.ts](https://github.com/elastic/kibana/tree/main/packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/strategies/numeric/numeric_strategy.test.ts#:~:text=max) | - | + + + ## @kbn/core-plugins-browser-internal | Deprecated API | Reference location(s) | Remove By | @@ -507,8 +515,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/src/plugins/console/public/shared_imports.ts#:~:text=toMountPoint), [use_send_current_request.ts](https://github.com/elastic/kibana/tree/main/src/plugins/console/public/application/hooks/use_send_current_request/use_send_current_request.ts#:~:text=toMountPoint), [use_send_current_request.ts](https://github.com/elastic/kibana/tree/main/src/plugins/console/public/application/hooks/use_send_current_request/use_send_current_request.ts#:~:text=toMountPoint) | - | -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/src/plugins/console/public/shared_imports.ts#:~:text=KibanaThemeProvider) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/src/plugins/console/server/plugin.ts#:~:text=legacy) | - | @@ -525,7 +531,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/shared_imports.ts#:~:text=KibanaThemeProvider) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/plugin.ts#:~:text=license%24) | 8.8.0 | @@ -618,14 +623,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## devTools - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dev_tools/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dev_tools/public/application.tsx#:~:text=KibanaThemeProvider), [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/dev_tools/public/application.tsx#:~:text=KibanaThemeProvider) | - | - - - ## discover | Deprecated API | Reference location(s) | Remove By | @@ -776,14 +773,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## grokdebugger - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/grokdebugger/public/shared_imports.ts#:~:text=KibanaThemeProvider) | - | - - - ## home | Deprecated API | Reference location(s) | Remove By | @@ -811,14 +800,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## indexManagement - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [use_datastreams_rollover.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_datastreams_rollover/use_datastreams_rollover.tsx#:~:text=toMountPoint), [use_datastreams_rollover.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_datastreams_rollover/use_datastreams_rollover.tsx#:~:text=toMountPoint) | - | - - - ## infra | Deprecated API | Reference location(s) | Remove By | @@ -828,14 +809,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## ingestPipelines - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ingest_pipelines/public/shared_imports.ts#:~:text=KibanaThemeProvider) | - | - - - ## inputControlVis | Deprecated API | Reference location(s) | Remove By | @@ -1031,7 +1004,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/shared_imports.ts#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/application/index.tsx#:~:text=KibanaThemeProvider) | - | | | [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/plugin.tsx#:~:text=license%24), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/plugin.tsx#:~:text=license%24) | 8.8.0 | | | [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/server/services/license.ts#:~:text=license%24) | 8.8.0 | @@ -1090,14 +1062,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## runtimeFields - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/runtime_fields/public/shared_imports.ts#:~:text=toMountPoint), [load_editor.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/runtime_fields/public/load_editor.tsx#:~:text=toMountPoint), [load_editor.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/runtime_fields/public/load_editor.tsx#:~:text=toMountPoint) | - | - - - ## savedObjects | Deprecated API | Reference location(s) | Remove By | @@ -1169,7 +1133,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [shared_imports.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/shared_imports.ts#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/application/index.tsx#:~:text=KibanaThemeProvider) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/plugin.ts#:~:text=license%24) | 8.8.0 | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/server/plugin.ts#:~:text=license%24) | 8.8.0 | @@ -1194,6 +1157,7 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | | [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode), [license_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/common/licensing/license_service.test.ts#:~:text=mode) | 8.8.0 | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/plugin.ts#:~:text=license%24) | 8.8.0 | | | [logout_app.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/public/authentication/logout/logout_app.test.ts#:~:text=appBasePath) | 8.8.0 | +| | [config.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/security/server/config.ts#:~:text=max) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 42ba2230557dc..ea903eef3797f 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -61,7 +61,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Plugin | Deprecated API | Reference location(s) | Remove By | | --------|-------|-----------|-----------| -| crossClusterReplication | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/plugin.ts#:~:text=license%24), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/plugin.tsx#:~:text=license%24), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/plugin.tsx#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/license_management/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24) | 8.8.0 | +| licenseManagement | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/license_management/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/cross_cluster_replication/public/plugin.ts#:~:text=license%24), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/plugin.tsx#:~:text=license%24), [plugin.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/public/plugin.tsx#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/watcher/public/plugin.ts#:~:text=license%24) | 8.8.0 | | painlessLab | | [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/painless_lab/server/services/license.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/searchprofiler/server/plugin.ts#:~:text=license%24), [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/remote_clusters/server/plugin.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/index_lifecycle_management/server/services/license.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/rollup/server/services/license.ts#:~:text=license%24), [license.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/snapshot_restore/server/services/license.ts#:~:text=license%24), [reindex_service.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.ts#:~:text=license%24), [reindex_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts#:~:text=license%24), [reindex_service.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/upgrade_assistant/server/lib/reindexing/reindex_service.test.ts#:~:text=license%24) | 8.8.0 | | management | | [application.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/management/public/application.tsx#:~:text=appBasePath) | 8.8.0 | diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 4e7b2e4e17609..b9671fc89977e 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-05-07 +date: 2024-05-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 7084e624d8f4e..7f12b2a105ddd 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-05-07 +date: 2024-05-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 fa64182133a50..c8309e656840a 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-05-07 +date: 2024-05-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 778eb248ae077..f67f46321371b 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-05-07 +date: 2024-05-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 7b2bfc47994a2..336c702ea79a8 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-05-07 +date: 2024-05-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 11443315bc7ff..263909e2786be 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-05-07 +date: 2024-05-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 2f80903482f49..6d6901072ec3e 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-05-07 +date: 2024-05-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 b6c4a626657b0..bb3ae41eb7873 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-05-07 +date: 2024-05-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 9955fccd14fff..216cf2ce92fd6 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-05-07 +date: 2024-05-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 4dd9f4f3eafa5..dd3d6df6cb9e0 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index 9fc31cc8dd1d5..ed5a406497685 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 7c0e973cc27a5..b21006a989db5 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-05-07 +date: 2024-05-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 ff430d7d2a99c..de2416c53a370 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-05-07 +date: 2024-05-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 7fdb95fa42cb4..24757d53aa566 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-05-07 +date: 2024-05-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 06907d5023e57..f08168b0e528e 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-05-07 +date: 2024-05-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 9caa4bc5fe4c6..45d19f2b97eb8 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-05-07 +date: 2024-05-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 36b6311ae7faa..b992b80510546 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-05-07 +date: 2024-05-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 140f70583de20..687b6dd01d7ea 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-05-07 +date: 2024-05-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 6d0463df51c2c..fadcf806b1264 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-05-07 +date: 2024-05-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 4ac4755a2491e..f82ce405874c1 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-05-07 +date: 2024-05-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 b177ba24403a7..5827c08fd0239 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-05-07 +date: 2024-05-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 916b3ec32dd3a..1710d1f090a2e 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-05-07 +date: 2024-05-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 e95acec85247b..d043276cff4a9 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-05-07 +date: 2024-05-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 87be212eaf098..02b75736e37b2 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-05-07 +date: 2024-05-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 358da93c8b325..49e2413a490a5 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-05-07 +date: 2024-05-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 0c877c394eb60..ed1139853e276 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-05-07 +date: 2024-05-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 82823542a32bc..1290430d4804c 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-05-07 +date: 2024-05-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 0f2758ff69406..5d0bc5a5670a2 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-05-07 +date: 2024-05-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 b1fd799c327e2..6cd603f4a1079 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-05-07 +date: 2024-05-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 904389d85b6a9..4129c9a81368e 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-05-07 +date: 2024-05-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 20886b7bda8d8..6fdd0c2b08fd4 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index b8da4309bd71c..2166ae9f94064 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-05-07 +date: 2024-05-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 54cc3e0acbfb9..83103692b6c9b 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-05-07 +date: 2024-05-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 658c969a85975..cab4b5531acde 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-05-07 +date: 2024-05-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 565976b07e9ce..473c2cc3baa33 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-05-07 +date: 2024-05-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 04072d42c72a5..c1ddab4229876 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-05-07 +date: 2024-05-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 a2b022670178b..2ceb4069b3829 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-05-07 +date: 2024-05-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 3e534604dc13e..d4768e196cd02 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-05-07 +date: 2024-05-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 9df973212a34b..6083cda50f495 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-05-07 +date: 2024-05-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 9208878c79c7b..098f957e148f0 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-05-07 +date: 2024-05-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 ef7b6a3d6f684..f56a9a99eac78 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 142d9f70eb126..fd2c12aea6168 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-05-07 +date: 2024-05-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 bb6edb2dbbc68..4968ea8189e6b 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-05-07 +date: 2024-05-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 81ee2077a0ff6..847d11c8667c7 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 21c050cca81a2..531870a1e9ed3 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 27e5a41474beb..c7b0aa9ef57f4 100644 --- a/api_docs/kbn_ace.mdx +++ b/api_docs/kbn_ace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ace title: "@kbn/ace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ace plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index f52be74d588e2..db7abeac39fca 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 355562e336752..f5e4be2325036 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-05-07 +date: 2024-05-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 638072377c243..28241065347a8 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-05-07 +date: 2024-05-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 bd8739ec02409..b493e068f3462 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-05-07 +date: 2024-05-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 97e2b2204f3e9..e876794a0a29d 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-05-07 +date: 2024-05-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_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 047c8d5400c71..5b75a4b87ba7f 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-05-07 +date: 2024-05-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 58c544500ea2d..ec4ee14a23f20 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-05-07 +date: 2024-05-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 1c430d15fd5f2..a33b141872cbd 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-05-07 +date: 2024-05-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_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 9c57fb0c42a21..17170cd2e8b96 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-05-07 +date: 2024-05-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 22ea159ed7ca6..24ee3a3cd2a27 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_client.mdx b/api_docs/kbn_analytics_client.mdx index 8f21b60642264..76d5690b927c7 100644 --- a/api_docs/kbn_analytics_client.mdx +++ b/api_docs/kbn_analytics_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-client title: "@kbn/analytics-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-client plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 04e2782354ab5..ef1d4eebe2f3b 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-05-07 +date: 2024-05-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_analytics_shippers_elastic_v3_browser.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx index 739d8d3b105cf..a9ecb02d5ba04 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-browser title: "@kbn/analytics-shippers-elastic-v3-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-browser plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 7011c16301bf3..cd51da8cd6dff 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-common title: "@kbn/analytics-shippers-elastic-v3-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-common plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index f673a97ae8549..b91df3bfe873c 100644 --- a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx +++ b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-elastic-v3-server title: "@kbn/analytics-shippers-elastic-v3-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-elastic-v3-server plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index 97c1f3ab1b5ee..bc674e4e8c6b8 100644 --- a/api_docs/kbn_analytics_shippers_fullstory.mdx +++ b/api_docs/kbn_analytics_shippers_fullstory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-shippers-fullstory title: "@kbn/analytics-shippers-fullstory" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-shippers-fullstory plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 504b2462befc6..a98af1191d8a2 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-05-07 +date: 2024-05-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 6d98bf6a2a14e..67e3d4aa33309 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-05-07 +date: 2024-05-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.devdocs.json b/api_docs/kbn_apm_synthtrace.devdocs.json index d0025a57d215c..26ccc25ade717 100644 --- a/api_docs/kbn_apm_synthtrace.devdocs.json +++ b/api_docs/kbn_apm_synthtrace.devdocs.json @@ -142,7 +142,7 @@ "label": "getDefaultPipeline", "description": [], "signature": [ - "(includeSerialization?: boolean) => (base: ", + "({ includeSerialization, versionOverride, }?: { includeSerialization?: boolean | undefined; versionOverride?: string | undefined; }) => (base: ", "Readable", ") => NodeJS.WritableStream" ], @@ -153,17 +153,43 @@ { "parentPluginId": "@kbn/apm-synthtrace", "id": "def-server.ApmSynthtraceEsClient.getDefaultPipeline.$1", - "type": "boolean", + "type": "Object", "tags": [], - "label": "includeSerialization", + "label": "{\n includeSerialization,\n versionOverride,\n }", "description": [], - "signature": [ - "boolean" - ], "path": "packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_es_client/index.ts", "deprecated": false, "trackAdoption": false, - "isRequired": true + "children": [ + { + "parentPluginId": "@kbn/apm-synthtrace", + "id": "def-server.ApmSynthtraceEsClient.getDefaultPipeline.$1.includeSerialization", + "type": "CompoundType", + "tags": [], + "label": "includeSerialization", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_es_client/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/apm-synthtrace", + "id": "def-server.ApmSynthtraceEsClient.getDefaultPipeline.$1.versionOverride", + "type": "string", + "tags": [], + "label": "versionOverride", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "packages/kbn-apm-synthtrace/src/lib/apm/client/apm_synthtrace_es_client/index.ts", + "deprecated": false, + "trackAdoption": false + } + ] } ], "returnComment": [] @@ -336,6 +362,71 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/apm-synthtrace", + "id": "def-server.AssetsSynthtraceEsClient", + "type": "Class", + "tags": [], + "label": "AssetsSynthtraceEsClient", + "description": [], + "signature": [ + { + "pluginId": "@kbn/apm-synthtrace", + "scope": "server", + "docId": "kibKbnApmSynthtracePluginApi", + "section": "def-server.AssetsSynthtraceEsClient", + "text": "AssetsSynthtraceEsClient" + }, + " extends ", + "SynthtraceEsClient", + "<", + "ServiceAssetDocument", + ">" + ], + "path": "packages/kbn-apm-synthtrace/src/lib/assets/assets_synthtrace_es_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-synthtrace", + "id": "def-server.AssetsSynthtraceEsClient.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "packages/kbn-apm-synthtrace/src/lib/assets/assets_synthtrace_es_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/apm-synthtrace", + "id": "def-server.AssetsSynthtraceEsClient.Unnamed.$1", + "type": "CompoundType", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "{ client: ", + "default", + "; logger: ", + "Logger", + "; } & ", + "AssetsSynthtraceEsClientOptions" + ], + "path": "packages/kbn-apm-synthtrace/src/lib/assets/assets_synthtrace_es_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/apm-synthtrace", "id": "def-server.InfraSynthtraceEsClient", diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index 05418059279f8..5b66e7754096e 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 44 | 0 | 44 | 7 | +| 49 | 0 | 49 | 8 | ## Server diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index caa4cd14b39f7..cd9c1ce15472e 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-05-07 +date: 2024-05-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_utils.mdx b/api_docs/kbn_apm_utils.mdx index c8e47128ef8a6..298d3e1e811fa 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 45871652bfa04..f0c4637577970 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-05-07 +date: 2024-05-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 649620f5135e4..89b12c9528fbf 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-05-07 +date: 2024-05-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 1dea9352f47f2..fbe7211a59441 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-05-07 +date: 2024-05-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 fa2439bbaea1f..9f5689d279914 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-05-07 +date: 2024-05-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 c4b952f504d18..ee14f8f017141 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index b62a4b7330e49..05536c9c82e71 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-05-07 +date: 2024-05-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 d60b559f97ba1..06e4db887f2d1 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-05-07 +date: 2024-05-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 45c8c62ff2e12..56696648ce6a1 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-05-07 +date: 2024-05-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 b828230139dbc..c074588f46d40 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-05-07 +date: 2024-05-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 f5184158b6b56..50a954803bd3a 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-05-07 +date: 2024-05-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 47c0e9853fb05..7f65cbb3eb8e3 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-05-07 +date: 2024-05-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 81c59c1d8658e..a5cb4f3b07c83 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-05-07 +date: 2024-05-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_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 78cbf871b1dc1..86d408c78601a 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-05-07 +date: 2024-05-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 82ce6d2ce0201..c5181c7c77308 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-05-07 +date: 2024-05-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 08d5b567e91b0..19bb0be97f739 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-05-07 +date: 2024-05-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 5ed2f613a869e..26540a0351fe7 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-05-07 +date: 2024-05-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 afaf3fbe4fdb0..ac0a9ae50a4fd 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-05-07 +date: 2024-05-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 007540d8b986f..84fe63900433a 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-05-07 +date: 2024-05-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.devdocs.json b/api_docs/kbn_config_schema.devdocs.json index 3df7fa2d9f311..2c82087ed0c2e 100644 --- a/api_docs/kbn_config_schema.devdocs.json +++ b/api_docs/kbn_config_schema.devdocs.json @@ -2646,7 +2646,7 @@ "label": "metaFields", "description": [], "signature": [ - "{ readonly META_FIELD_X_OAS_REF_ID: \"x-oas-ref-id\"; readonly META_FIELD_X_OAS_OPTIONAL: \"x-oas-optional\"; readonly META_FIELD_X_OAS_DEPRECATED: \"x-oas-deprecated\"; readonly META_FIELD_X_OAS_MAX_LENGTH: \"x-oas-max-length\"; readonly META_FIELD_X_OAS_MIN_LENGTH: \"x-oas-min-length\"; readonly META_FIELD_X_OAS_GET_ADDITIONAL_PROPERTIES: \"x-oas-get-additional-properties\"; }" + "{ readonly META_FIELD_X_OAS_ANY: \"x-oas-any-type\"; readonly META_FIELD_X_OAS_REF_ID: \"x-oas-ref-id\"; readonly META_FIELD_X_OAS_OPTIONAL: \"x-oas-optional\"; readonly META_FIELD_X_OAS_DEPRECATED: \"x-oas-deprecated\"; readonly META_FIELD_X_OAS_MAX_LENGTH: \"x-oas-max-length\"; readonly META_FIELD_X_OAS_MIN_LENGTH: \"x-oas-min-length\"; readonly META_FIELD_X_OAS_GET_ADDITIONAL_PROPERTIES: \"x-oas-get-additional-properties\"; }" ], "path": "packages/kbn-config-schema/index.ts", "deprecated": false, diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index bbbe36d4bd85f..2b17857f3c023 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-05-07 +date: 2024-05-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 b9e0d2959be5f..75d0a599435aa 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-05-07 +date: 2024-05-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_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index bdda37790a9fb..b3b9f2ce79c87 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-05-07 +date: 2024-05-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 f1fb4af0a9b37..e4c9f92c29f1d 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-05-07 +date: 2024-05-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 198f3a0728826..ed4826eaffe90 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-05-07 +date: 2024-05-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.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 7d9e734fb0c6f..6b0bdcec8df93 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-05-07 +date: 2024-05-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'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 67fcab0f2fb1b..e7af9490d99bc 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-05-07 +date: 2024-05-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 390b3613c52ad..0126509e2afe3 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-05-07 +date: 2024-05-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 516e770be8644..dc799588417b7 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-05-07 +date: 2024-05-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 1039ca58feeb7..43dc492a3f313 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-05-07 +date: 2024-05-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 09efab12cb2d2..c6b27d7b4eea7 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-05-07 +date: 2024-05-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 b94cd5f3f8e0a..88d5e6395fcbc 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-05-07 +date: 2024-05-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 0556a7e806da7..1d0afbbe4e8de 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-05-07 +date: 2024-05-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 a5a3cf6e6f04f..d0d1890b5cec1 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-05-07 +date: 2024-05-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 ef0675c702f15..7ae6f74c06313 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-05-07 +date: 2024-05-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 545c07055a738..aca9944b8b3bd 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-05-07 +date: 2024-05-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 d1116c9a45086..182fd67da3945 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-05-07 +date: 2024-05-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 f269be4656e37..d1a73257cf2ae 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-05-07 +date: 2024-05-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 851911b746ad5..0773097b21dc9 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-05-07 +date: 2024-05-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 d9c3e43ae9058..d88648d8ecfe0 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-05-07 +date: 2024-05-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 66406ea34f7f0..292c9aed89e8a 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-05-07 +date: 2024-05-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 523dc8fb52a20..744e6ad46d85e 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-05-07 +date: 2024-05-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 70f177efe6301..2b0f7b8f03fa5 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-05-07 +date: 2024-05-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 5befe25252e90..356d0f5cb264d 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-05-07 +date: 2024-05-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 f1d53d7a05f58..20e800550fc34 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-05-07 +date: 2024-05-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 98f0cd95bdb6b..38416df7af8c8 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-05-07 +date: 2024-05-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 95291065ce45f..caa21412e6017 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-05-07 +date: 2024-05-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 7a084fc1f8e09..36e5dd62b8bf1 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-05-07 +date: 2024-05-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 284b0784a3763..8efc9d567203e 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-05-07 +date: 2024-05-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 1d6b6ec2a3498..f5f6973f08a72 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-05-07 +date: 2024-05-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 6b6da0e70fe15..bc952f16110ab 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-05-07 +date: 2024-05-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 b745ba9695ca5..da0c09e5b2251 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-05-07 +date: 2024-05-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 dd7ce22ded0f6..63857fc79896d 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-05-07 +date: 2024-05-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 6f1282da05669..57e8143bad792 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-05-07 +date: 2024-05-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 5a0eb1d1e9828..3eddae0f7e3b5 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-05-07 +date: 2024-05-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 22a2258837a8c..96f4a17b02d69 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-05-07 +date: 2024-05-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 7ed901dcb0e04..0aeb19fa34abc 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-05-07 +date: 2024-05-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 43de0b144e401..579abaac9d310 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-05-07 +date: 2024-05-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 5fe94635256c0..d789d30249b8e 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-05-07 +date: 2024-05-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 f61c1857fdf42..5d471bfca41be 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-05-07 +date: 2024-05-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 4ec550282062e..6c149581238fe 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-05-07 +date: 2024-05-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 58e9c6ff54de2..959bdf23d5fe9 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-05-07 +date: 2024-05-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 45221cb46655e..d40a6f6905ade 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-05-07 +date: 2024-05-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 a90de14827350..afddd87a7174a 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-05-07 +date: 2024-05-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 67188bc7ed692..6cf2b6f4eee76 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-05-07 +date: 2024-05-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 c0c732a77eb82..ed5d10ceed6c3 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-05-07 +date: 2024-05-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 5d59b4e63994b..04d8197c262ad 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-05-07 +date: 2024-05-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 87feb21601208..39625f7070c59 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-05-07 +date: 2024-05-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 110627c9d497f..3663be3a829e6 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-05-07 +date: 2024-05-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 f2307ac78610f..2343eebc3a2c0 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-05-07 +date: 2024-05-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 a4742f0b146ae..081a3802319bf 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-05-07 +date: 2024-05-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 bbbecdc2b700d..cc2abc79f2f56 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-05-07 +date: 2024-05-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 a1d8dfb5dfa5e..983f6d8ec4530 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-05-07 +date: 2024-05-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 75343b2932aa8..b8be0e3df7d73 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-05-07 +date: 2024-05-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 9c6748418d79c..5c93b6efc449d 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-05-07 +date: 2024-05-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 c5e88e4d8a5d7..27de00226eca1 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-05-07 +date: 2024-05-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 6b3ff46a69ad1..16c483e81a231 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-05-07 +date: 2024-05-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 bd3fb3d7b9346..2ec143d0e726d 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-05-07 +date: 2024-05-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 1d1df8fbe8740..8105db63625a9 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-05-07 +date: 2024-05-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 bc05b4efc60d8..471eb19a560fa 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-05-07 +date: 2024-05-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 3af3a533c38e2..8ec2742997d67 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-05-07 +date: 2024-05-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 74642173b5b56..d996ec932a761 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-05-07 +date: 2024-05-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 c9fa04e37ff64..0c81e68f609c1 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-05-07 +date: 2024-05-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 709bad3c9ef99..ff0e4fcf80efb 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-05-07 +date: 2024-05-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 ec2a5eb064a7f..40115683515f4 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-05-07 +date: 2024-05-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_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 7c667de386921..08508488a882d 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-05-07 +date: 2024-05-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 086b28a0340d7..aec2bcd38e876 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-05-07 +date: 2024-05-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 e60c30d9b5867..5449ee21814ed 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-05-07 +date: 2024-05-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 4e41084d85ed6..27ab0060f3a1e 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-05-07 +date: 2024-05-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 29bb658986a05..b95be25068fa5 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-05-07 +date: 2024-05-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 93c9bc6a42370..990df98d68829 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-05-07 +date: 2024-05-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 69b07132e6dc0..b00bdb75ddc5f 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-05-07 +date: 2024-05-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 bd07407dc8e2b..d676745502b7c 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-05-07 +date: 2024-05-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 69be18716ddbe..151d290017216 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-05-07 +date: 2024-05-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 df114b2c609ac..9726326b3558f 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-05-07 +date: 2024-05-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 e04a26dc799ab..5f912403a2588 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-05-07 +date: 2024-05-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.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 74a728d7294c4..2b48cd4c4d9da 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -12522,7 +12522,7 @@ "tags": [], "label": "description", "description": [ - "Human-friendly description of this endpoint" + "A short, human-friendly description of this endpoint" ], "signature": [ "string | undefined" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 1c275ae6b771d..e224ad9a6035f 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-05-07 +date: 2024-05-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 f380f09c68fdc..c69d5b90084e5 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-05-07 +date: 2024-05-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 c4cac44b95787..d76c0bc89d77a 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-05-07 +date: 2024-05-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_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index a5df4593cee14..32c0d38bcfcf9 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-05-07 +date: 2024-05-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 7957b22820633..eb761476f0830 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-05-07 +date: 2024-05-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 3a952ee57a131..bc81df8420ef1 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-05-07 +date: 2024-05-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 e32580693f4cc..7d5183a45b681 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-05-07 +date: 2024-05-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 71eff66fb0005..bec1ac40ae6ca 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-05-07 +date: 2024-05-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 0bcd9ec519e7a..f689b2fc48671 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-05-07 +date: 2024-05-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 158bff429478a..845e53a0f33ac 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-05-07 +date: 2024-05-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 7d241333f1f9e..13170bbff73bd 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-05-07 +date: 2024-05-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 7071be09ff389..33da1ee92153e 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-05-07 +date: 2024-05-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 bba0ed1f8b13b..007fbb2a1f029 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-05-07 +date: 2024-05-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 5c666b9423a1d..d1fc7449d1ffd 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-05-07 +date: 2024-05-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 c00f3b8c6c0b1..7cd88b481829e 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-05-07 +date: 2024-05-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 fa8e3a132ddea..d0204543b18e5 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-05-07 +date: 2024-05-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 cb4880a69e9e0..ef9e4035ec842 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-05-07 +date: 2024-05-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.devdocs.json b/api_docs/kbn_core_logging_server.devdocs.json index 1fa70ad1480c0..d65947d07dd66 100644 --- a/api_docs/kbn_core_logging_server.devdocs.json +++ b/api_docs/kbn_core_logging_server.devdocs.json @@ -516,14 +516,46 @@ "parentPluginId": "@kbn/core-logging-server", "id": "def-common.NumericRollingStrategyConfig.max", "type": "number", - "tags": [], + "tags": [ + "deprecated" + ], "label": "max", "description": [ - "\nThe maximum number of files to keep. Once this number is reached, oldest\nfiles will be deleted. Defaults to `7`" + "\nThe maximum number of files to keep. Once this number is reached, oldest\nfiles will be deleted. Defaults to `7`\n" ], "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", - "deprecated": false, - "trackAdoption": false + "deprecated": true, + "trackAdoption": false, + "references": [ + { + "plugin": "@kbn/core-logging-server-internal", + "path": "packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/strategies/index.ts" + }, + { + "plugin": "@kbn/core-logging-server-internal", + "path": "packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/retention/create_retention_policy.ts" + }, + { + "plugin": "security", + "path": "x-pack/plugins/security/server/config.ts" + }, + { + "plugin": "@kbn/core-logging-server-internal", + "path": "packages/core/logging/core-logging-server-internal/src/appenders/appenders.test.ts" + }, + { + "plugin": "@kbn/core-logging-server-internal", + "path": "packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/rolling_file_appender.test.ts" + }, + { + "plugin": "@kbn/core-logging-server-internal", + "path": "packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/retention/create_retention_policy.test.ts" + }, + { + "plugin": "@kbn/core-logging-server-internal", + "path": "packages/core/logging/core-logging-server-internal/src/appenders/rolling_file/strategies/numeric/numeric_strategy.test.ts" + } + ] } ], "initialIsOpen": false @@ -586,6 +618,69 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-common.RetentionPolicyConfig", + "type": "Interface", + "tags": [], + "label": "RetentionPolicyConfig", + "description": [], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-common.RetentionPolicyConfig.maxFiles", + "type": "number", + "tags": [], + "label": "maxFiles", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-common.RetentionPolicyConfig.maxAccumulatedFileSize", + "type": "Object", + "tags": [], + "label": "maxAccumulatedFileSize", + "description": [], + "signature": [ + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ByteSizeValue", + "text": "ByteSizeValue" + }, + " | undefined" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-common.RetentionPolicyConfig.removeOlderThan", + "type": "Object", + "tags": [], + "label": "removeOlderThan", + "description": [], + "signature": [ + "moment.Duration | undefined" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/core-logging-server", "id": "def-common.RewriteAppenderConfig", @@ -775,6 +870,29 @@ "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-logging-server", + "id": "def-common.RollingFileAppenderConfig.retention", + "type": "Object", + "tags": [], + "label": "retention", + "description": [ + "\nThe {@link RetentionPolicy | retention strategy} to use to know which files to keep." + ], + "signature": [ + { + "pluginId": "@kbn/core-logging-server", + "scope": "common", + "docId": "kibKbnCoreLoggingServerPluginApi", + "section": "def-common.RetentionPolicyConfig", + "text": "RetentionPolicyConfig" + }, + " | undefined" + ], + "path": "packages/core/logging/core-logging-server/src/appenders/rolling_file.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 8b98467aefa5d..6e0c449eac193 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.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 | |-------------------|-----------|------------------------|-----------------| -| 56 | 0 | 30 | 0 | +| 61 | 0 | 34 | 0 | ## Common diff --git a/api_docs/kbn_core_logging_server_internal.devdocs.json b/api_docs/kbn_core_logging_server_internal.devdocs.json index a0af84675aefe..e0f23e8668c97 100644 --- a/api_docs/kbn_core_logging_server_internal.devdocs.json +++ b/api_docs/kbn_core_logging_server_internal.devdocs.json @@ -135,7 +135,15 @@ "section": "def-common.Type", "text": "Type" }, - " | Readonly<{ pattern?: string | undefined; highlight?: boolean | undefined; } & { type: \"pattern\"; }>; }> | Readonly<{} & { type: \"file\"; layout: Readonly<{} & { type: \"json\"; }> | Readonly<{ pattern?: string | undefined; highlight?: boolean | undefined; } & { type: \"pattern\"; }>; fileName: string; }> | Readonly<{} & { type: \"rewrite\"; policy: Readonly<{} & { type: \"meta\"; mode: \"update\" | \"remove\"; properties: Readonly<{ value?: string | number | boolean | null | undefined; } & { path: string; }>[]; }>; appenders: string[]; }> | Readonly<{} & { type: \"rolling-file\"; policy: Readonly<{} & { type: \"size-limit\"; size: ", + " | Readonly<{ pattern?: string | undefined; highlight?: boolean | undefined; } & { type: \"pattern\"; }>; }> | Readonly<{} & { type: \"file\"; layout: Readonly<{} & { type: \"json\"; }> | Readonly<{ pattern?: string | undefined; highlight?: boolean | undefined; } & { type: \"pattern\"; }>; fileName: string; }> | Readonly<{} & { type: \"rewrite\"; policy: Readonly<{} & { type: \"meta\"; mode: \"update\" | \"remove\"; properties: Readonly<{ value?: string | number | boolean | null | undefined; } & { path: string; }>[]; }>; appenders: string[]; }> | Readonly<{ retention?: Readonly<{ maxFiles?: number | undefined; maxAccumulatedFileSize?: ", + { + "pluginId": "@kbn/config-schema", + "scope": "common", + "docId": "kibKbnConfigSchemaPluginApi", + "section": "def-common.ByteSizeValue", + "text": "ByteSizeValue" + }, + " | undefined; removeOlderThan?: moment.Duration | undefined; } & {}> | undefined; } & { type: \"rolling-file\"; policy: Readonly<{} & { type: \"size-limit\"; size: ", { "pluginId": "@kbn/config-schema", "scope": "common", diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 8981344235067..760557105a87c 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-05-07 +date: 2024-05-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 af6eac80fe0d5..b82faa7111ba5 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-05-07 +date: 2024-05-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 36718d3225443..445fcdec86565 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-05-07 +date: 2024-05-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 563da30ebeaf2..dc3d05b3153d8 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-05-07 +date: 2024-05-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 ff6e128bba576..1bc8688caa7a7 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-05-07 +date: 2024-05-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 d6996a660acbc..1d617f1be6101 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-05-07 +date: 2024-05-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 72f7f1e2cdf89..e9c6293b64430 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-05-07 +date: 2024-05-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 418eeae8874dd..7b245c5cf780a 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-05-07 +date: 2024-05-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 2d997930f420c..b3a41fa67c52e 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-05-07 +date: 2024-05-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 57428615957b8..8cd0b0260693d 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-05-07 +date: 2024-05-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 58dbbd12d718a..55ca4f3be1b62 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-05-07 +date: 2024-05-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 25fce8c4f38fd..60c43cf7a649c 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-05-07 +date: 2024-05-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 0f4d5e46a350d..7ca68f076f4be 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-05-07 +date: 2024-05-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 45600dbea3165..7658e594740b4 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-05-07 +date: 2024-05-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 9ad43cd51fb31..e87a66421f7e8 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-05-07 +date: 2024-05-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 54e69cb4b3053..98bc840b48c98 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-05-07 +date: 2024-05-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 e85af2c1abefd..e3c26bed11d6f 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-05-07 +date: 2024-05-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 7f6204408a0a9..90c11f14a1bdf 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-05-07 +date: 2024-05-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 ade37cc3113e1..839614d42e4d3 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-05-07 +date: 2024-05-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 dd36d5022e058..2c3880639fe58 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-05-07 +date: 2024-05-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 57ce91ae0e4d9..c60007d70b375 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-05-07 +date: 2024-05-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 26c802e93d312..35db2858409ad 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-05-07 +date: 2024-05-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 63256fcde9daf..54aa75555c9d9 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-05-07 +date: 2024-05-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 91e9ca68ce61d..c88919959e2fb 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-05-07 +date: 2024-05-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 3f3e2c3d33de8..0ed8711e1a1b2 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-05-07 +date: 2024-05-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_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index 12bf72a718b45..4eb54c651a446 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-05-07 +date: 2024-05-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 1be26734e441b..436a3836e9d79 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-05-07 +date: 2024-05-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 47eb336e59c5f..025dc4d6e1b2a 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-05-07 +date: 2024-05-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 60d21e5d11b1a..bc16a26267810 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-05-07 +date: 2024-05-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 8cfb5551e4319..9f29959ed0c21 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-05-07 +date: 2024-05-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 bff3e351aacf1..2100a394cefc6 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-05-07 +date: 2024-05-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 5b6252a72eb7b..37fa387eca4ca 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-05-07 +date: 2024-05-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 6e9dfefc016a9..eeb74d584370a 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-05-07 +date: 2024-05-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 46153a7c92c50..19bebc9ef34d8 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-05-07 +date: 2024-05-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 ed96521a7a0fd..0e53013e21a44 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-05-07 +date: 2024-05-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 f497c99ebd54d..0b19cbee2153b 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-05-07 +date: 2024-05-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 45446d76e681a..c3a4ef433b8bc 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-05-07 +date: 2024-05-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 658758ec98cd8..c55f7ffe60544 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-05-07 +date: 2024-05-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 a3107684dd170..65734f8dc89af 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-05-07 +date: 2024-05-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 5ae2533ce628c..537f839182955 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-05-07 +date: 2024-05-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 bd4c3e6c84740..cec081caa4a88 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-05-07 +date: 2024-05-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 a07cf1a5c663b..c854da3f18a81 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-05-07 +date: 2024-05-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 775198e8d9e16..b096ae1f2fb4e 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-05-07 +date: 2024-05-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 97718171290bb..994913340f0bb 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-05-07 +date: 2024-05-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 30aeaf880df63..4cad47eb2ea47 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-05-07 +date: 2024-05-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 3e290eadd5335..079c840a0575c 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-05-07 +date: 2024-05-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 fea553ee4c729..2cb7c25990a94 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-05-07 +date: 2024-05-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 6d5253870f398..ddc3f058c2d6a 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-05-07 +date: 2024-05-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 90e4e92e72c64..da2262d12f311 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-05-07 +date: 2024-05-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 e3ac95d15116b..a2b59ce4027c2 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-05-07 +date: 2024-05-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 f822d67bd3c27..702823d36c75e 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-05-07 +date: 2024-05-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 93916c6b37a70..37d008db98cfa 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-05-07 +date: 2024-05-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 4e81859a099a6..87f1afc656fe0 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-05-07 +date: 2024-05-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 d6894bc522924..6d6984a63e61e 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-05-07 +date: 2024-05-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_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index 80366eb669e24..f7d53f72c5cc8 100644 --- a/api_docs/kbn_core_status_common_internal.mdx +++ b/api_docs/kbn_core_status_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common-internal title: "@kbn/core-status-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common-internal plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index ab997b690b3d4..f240e1a37bde7 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-05-07 +date: 2024-05-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 adae7cfe81e23..bd182f6862096 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-05-07 +date: 2024-05-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 e42291004607f..072a3c0407348 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-05-07 +date: 2024-05-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 a3aa65b563a5a..17f97653e96d2 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-05-07 +date: 2024-05-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 68dd6cee71bb0..f41de20ef3ec4 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-05-07 +date: 2024-05-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 91f3f12052938..eb94978d41bb8 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-05-07 +date: 2024-05-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 2cb0927c100c3..910430d3c00f1 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-05-07 +date: 2024-05-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 ecacd4381559d..a99bc9987aad7 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-05-07 +date: 2024-05-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 f443a3ec751fb..d1997051e26d4 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-05-07 +date: 2024-05-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 04e598d8aaa27..1426fd9790084 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-05-07 +date: 2024-05-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 ed84d8dcac5c9..74d3ffa972a4d 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-05-07 +date: 2024-05-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 b901959b636fb..23a064a18e107 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-05-07 +date: 2024-05-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 521e929ad34a7..c3bcf2f4cb839 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-05-07 +date: 2024-05-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 3223832c86c00..8e1dd17213070 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-05-07 +date: 2024-05-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 5f6fabfda9648..7dc47ed62b266 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-05-07 +date: 2024-05-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 bc00a1294bc20..349774a0ae6bf 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-05-07 +date: 2024-05-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 e3a50f01181b7..5f4e7699e945c 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-05-07 +date: 2024-05-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 2fabb0ab3056e..e4f32e583c914 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-05-07 +date: 2024-05-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 1da8755a95730..7b7f063f5c673 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-05-07 +date: 2024-05-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 4c7af548bd012..c4705707e829e 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-05-07 +date: 2024-05-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 f468c07f6f5b2..5733e7e33b5f3 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-05-07 +date: 2024-05-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 293d453a4c0a9..4160a6ec7a066 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-05-07 +date: 2024-05-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 f9955e6d69480..5f351efba4b36 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-05-07 +date: 2024-05-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 014759817f97d..bd8fb5b2c19d2 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-05-07 +date: 2024-05-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 8223dd75ed68e..75cb8e8cf1148 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-05-07 +date: 2024-05-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 a5fa7fd756b6d..66277cb1a8de1 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-05-07 +date: 2024-05-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 16640334ae503..fa2fe401989fc 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-05-07 +date: 2024-05-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 cc8b820894fed..242a27790bf8c 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-05-07 +date: 2024-05-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 2bea4cbb475ab..cb08d234122ee 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-05-07 +date: 2024-05-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 4253348adf2a1..26b4c22ca7202 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-05-07 +date: 2024-05-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 ee8ca515ae636..a311d93e31e01 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-05-07 +date: 2024-05-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 e4c196f364214..52bb61f369f44 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-05-07 +date: 2024-05-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 1934481f20189..ecccd86c12734 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-05-07 +date: 2024-05-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 93c782565e195..27186905263aa 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-05-07 +date: 2024-05-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 c7b5867db054c..275e28e391a07 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-05-07 +date: 2024-05-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 6661861ca3309..f42a92325fd6d 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-05-07 +date: 2024-05-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 da59b16111878..e62bbe224ae1a 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-05-07 +date: 2024-05-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 85f4cc6b3df41..09e1b29a53c35 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-05-07 +date: 2024-05-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 be97f21de2266..20d5016c6d7df 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-05-07 +date: 2024-05-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 6a85ba8261699..aa0fa31ebf6ff 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-05-07 +date: 2024-05-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 c44d5c5bc9acf..7fd70263f9adf 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-05-07 +date: 2024-05-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 b82ff7391f4d3..c2079b98cdc97 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-05-07 +date: 2024-05-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 cb67f297f14c3..4aff3270dd8ce 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-05-07 +date: 2024-05-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 f3d12f6c2f38e..d09a87ace569d 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-05-07 +date: 2024-05-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 71375e0e340d2..474ecf8edf677 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-05-07 +date: 2024-05-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 bef17babdb5ce..c8f3ae1c4c20a 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-05-07 +date: 2024-05-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 c4a707aa1b263..835e163e103da 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-05-07 +date: 2024-05-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 f8b42448773ea..0ebd955604ef6 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-05-07 +date: 2024-05-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 aac62d905e787..885d3321b2210 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-05-07 +date: 2024-05-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 4e1422f660776..3dd32b22e818a 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-05-07 +date: 2024-05-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 1255037e3c734..039f16fd0191e 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-05-07 +date: 2024-05-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 cfb352467c529..3efdc6df0eff2 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-05-07 +date: 2024-05-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 2a177fd433180..f662db109b1a3 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-05-07 +date: 2024-05-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 b5d4de09efc4d..79b67bd422bc9 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-05-07 +date: 2024-05-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 858efcb781cc6..943a776c32b06 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-05-07 +date: 2024-05-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 9f884edc2f3b4..2771a2eac3c7e 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-05-07 +date: 2024-05-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 fa145b0254209..1eb1aeeaa3cd9 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index 9a6460e6b0621..3bd620fa58904 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-05-07 +date: 2024-05-08 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 2b41c1fd52be0..347c8ce6af279 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-05-07 +date: 2024-05-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 e72dac1c4f4b2..cbede5bf09db9 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-05-07 +date: 2024-05-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 5987b877f4e45..c4f37fddc57d7 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-05-07 +date: 2024-05-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 df23414027d21..a7542207d2e00 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-05-07 +date: 2024-05-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 bf45e7d61ad6c..2b6ffb2ad08cf 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-05-07 +date: 2024-05-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 7fa5ef3f3c913..1fd8e7a918f3c 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-05-07 +date: 2024-05-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 f783c38853d0e..c0f4d889ffa01 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-05-07 +date: 2024-05-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 68564211be097..b0e3cd3b3f508 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-05-07 +date: 2024-05-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_es.mdx b/api_docs/kbn_es.mdx index 4c04657d76e3d..f4c68bbbf0bd5 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-05-07 +date: 2024-05-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 0172274ac1f35..1a6bbe320cddb 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-05-07 +date: 2024-05-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 9e4a0c62db92c..d6ed825ea89f0 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-05-07 +date: 2024-05-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 4c19b964bad33..c76fcd89d96ef 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-05-07 +date: 2024-05-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 bf08d8e9f2b16..23b41fabb47c6 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-05-07 +date: 2024-05-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 ca85bf47ca96c..c5197372a3732 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-05-07 +date: 2024-05-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.mdx b/api_docs/kbn_esql_ast.mdx index 53abd297b3814..e44a580c68951 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index b0068228f73ab..e99d145b804cc 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-05-07 +date: 2024-05-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 fc9229883fba6..bdaab839c8862 100644 --- a/api_docs/kbn_esql_validation_autocomplete.devdocs.json +++ b/api_docs/kbn_esql_validation_autocomplete.devdocs.json @@ -384,7 +384,7 @@ "label": "getAllFunctions", "description": [], "signature": [ - "(options: { type: \"grouping\" | \"agg\" | \"builtin\" | \"eval\" | (\"grouping\" | \"agg\" | \"builtin\" | \"eval\")[]; } | undefined) => ", + "(options: { type: \"agg\" | \"builtin\" | \"eval\" | (\"agg\" | \"builtin\" | \"eval\")[]; } | undefined) => ", { "pluginId": "@kbn/esql-validation-autocomplete", "scope": "common", @@ -417,7 +417,7 @@ "label": "type", "description": [], "signature": [ - "\"grouping\" | \"agg\" | \"builtin\" | \"eval\" | (\"grouping\" | \"agg\" | \"builtin\" | \"eval\")[]" + "\"agg\" | \"builtin\" | \"eval\" | (\"agg\" | \"builtin\" | \"eval\")[]" ], "path": "packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts", "deprecated": false, @@ -3149,7 +3149,7 @@ "label": "type", "description": [], "signature": [ - "\"grouping\" | \"agg\" | \"builtin\" | \"eval\"" + "\"agg\" | \"builtin\" | \"eval\"" ], "path": "packages/kbn-esql-validation-autocomplete/src/definitions/types.ts", "deprecated": false, diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 8bfb894e34295..d8a22c3c8e1aa 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-05-07 +date: 2024-05-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 4274cb07349c5..0497932a15450 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-05-07 +date: 2024-05-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 bba225b3b9113..4b575ae79ec83 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-05-07 +date: 2024-05-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 714e799fef65d..88f832c05b67c 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-05-07 +date: 2024-05-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 d48043e624721..603ed7c7cf2ed 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-05-07 +date: 2024-05-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.devdocs.json b/api_docs/kbn_field_utils.devdocs.json index 157c6b0aeaef4..6ffd8029c7422 100644 --- a/api_docs/kbn_field_utils.devdocs.json +++ b/api_docs/kbn_field_utils.devdocs.json @@ -19,6 +19,64 @@ "common": { "classes": [], "functions": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.comboBoxFieldOptionMatcher", + "type": "Function", + "tags": [], + "label": "comboBoxFieldOptionMatcher", + "description": [ + "\nAdapts fieldNameWildcardMatcher to combobox props." + ], + "signature": [ + "({ option: { name, label }, searchValue, }: { option: { name?: string | undefined; label: string; }; searchValue: string; }) => boolean" + ], + "path": "packages/kbn-field-utils/src/utils/field_name_wildcard_matcher.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.comboBoxFieldOptionMatcher.$1", + "type": "Object", + "tags": [], + "label": "{\n option: { name, label },\n searchValue,\n}", + "description": [], + "path": "packages/kbn-field-utils/src/utils/field_name_wildcard_matcher.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.comboBoxFieldOptionMatcher.$1.option", + "type": "Object", + "tags": [], + "label": "option", + "description": [], + "signature": [ + "{ name?: string | undefined; label: string; }" + ], + "path": "packages/kbn-field-utils/src/utils/field_name_wildcard_matcher.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/field-utils", + "id": "def-common.comboBoxFieldOptionMatcher.$1.searchValue", + "type": "string", + "tags": [], + "label": "searchValue", + "description": [], + "path": "packages/kbn-field-utils/src/utils/field_name_wildcard_matcher.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "returnComment": [], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/field-utils", "id": "def-common.FieldDescription", diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 19033e6ed8232..6839efe3a3ccd 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_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 | |-------------------|-----------|------------------------|-----------------| -| 50 | 0 | 42 | 1 | +| 54 | 0 | 45 | 1 | ## Common diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 4fe930e065ddf..f615623cf250b 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-05-07 +date: 2024-05-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 974150a300250..ed99d2a221503 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-05-07 +date: 2024-05-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 52a2f4632ac70..d219f60dfb064 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-05-07 +date: 2024-05-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 2a566f77d39c2..1a7eb37080649 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-05-07 +date: 2024-05-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_generate.mdx b/api_docs/kbn_generate.mdx index 3d8c56b579268..30580ae4c8d44 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-05-07 +date: 2024-05-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 8017604180b56..fc3cffb14612d 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-05-07 +date: 2024-05-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 ee81a66c7b397..dae29500ce1c3 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index ba7e307c03eb4..f4e63a110b2ef 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-05-07 +date: 2024-05-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 134c64a9559e5..9b706e6126c4c 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-05-07 +date: 2024-05-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 d123da471048c..f600b15499a81 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-05-07 +date: 2024-05-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 ab29833bf040d..82102f4a3b2f4 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-05-07 +date: 2024-05-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 43755d81745de..2348cb255c8f2 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-05-07 +date: 2024-05-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 32d5eaaaa1bd1..287b7475f75f7 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-05-07 +date: 2024-05-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 217fb53ff7368..3b4980b3e373c 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-05-07 +date: 2024-05-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 e6ad55496248d..b5cfe939cbfb1 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-05-07 +date: 2024-05-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 e2743ce669437..50da53e3223bf 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index 8438f1095f70b..a4f18d7409c5c 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index 999af2b0296d1..3018154addf45 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-05-07 +date: 2024-05-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 b085079f88481..009b605b19a58 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-05-07 +date: 2024-05-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 a775986c7d53e..cd478ada61389 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 2b03e86f0830d..cf26044b404a0 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-05-07 +date: 2024-05-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 7482626030ea6..278ebcf7b790d 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index c2195c032ec2e..548a257461c60 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-05-07 +date: 2024-05-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 70bede53ceeed..859ce5160f1cd 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-05-07 +date: 2024-05-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 39db67150f5b6..b0faa49a4da1a 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index f7129239854a8..34f26aac4015b 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-05-07 +date: 2024-05-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_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index 4c32c332b5190..73e6e70858a32 100644 --- a/api_docs/kbn_language_documentation_popover.mdx +++ b/api_docs/kbn_language_documentation_popover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation-popover title: "@kbn/language-documentation-popover" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation-popover plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 007f047532bf6..af6a2e5b0dfec 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-05-07 +date: 2024-05-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 b48938bd65d6a..e4af7c8ed45d7 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-05-07 +date: 2024-05-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 07863ac75898c..caeff8291997f 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-05-07 +date: 2024-05-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 521da338535ad..c1f6703381756 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-05-07 +date: 2024-05-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 edca248e8febf..0e90670db8588 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-05-07 +date: 2024-05-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 04a0809b83a8a..1062960e6baa7 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-05-07 +date: 2024-05-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 05b4f4de0765f..43d31a7111ca6 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-05-07 +date: 2024-05-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.mdx b/api_docs/kbn_management_settings_application.mdx index a3174dfc9a58c..77dea1a4d5ff9 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-05-07 +date: 2024-05-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 ee1634f9d9047..1c406bb36d017 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-05-07 +date: 2024-05-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 d3b17bee5d9af..b84cc994d7233 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-05-07 +date: 2024-05-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 ebf7c1a15d28f..cb5ba34545130 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-05-07 +date: 2024-05-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 924060f1d7883..4ba501fa9ce51 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-05-07 +date: 2024-05-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 fd0247b754e2c..17a64de2c250e 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-05-07 +date: 2024-05-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.mdx b/api_docs/kbn_management_settings_ids.mdx index d634e0dd0b0b2..9416cdb7b2d7e 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-05-07 +date: 2024-05-08 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 eb94baf88647e..6bd16cbbeaaa5 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-05-07 +date: 2024-05-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 7083722d17330..5c3d1a0123ac6 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-05-07 +date: 2024-05-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 3d0813557f2fe..656399f08cc8a 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-05-07 +date: 2024-05-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 d7911002d978d..9f6d19f82c8ab 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-05-07 +date: 2024-05-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_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index 794daff86be13..8177ce30e5845 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-05-07 +date: 2024-05-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 d8d7339cf5e78..7076e947ab449 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-05-07 +date: 2024-05-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 a932eb64c2e39..ee05e2aa8891b 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-05-07 +date: 2024-05-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 9c52d95815276..73cd348654f9a 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-05-07 +date: 2024-05-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 e71fa8c778bcc..16f750778f686 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-05-07 +date: 2024-05-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 8772b9bacff3c..7fdc4dc6ab5fc 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-05-07 +date: 2024-05-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 50bf4f49cff32..e0088e16a57a5 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-05-07 +date: 2024-05-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 2754cf1e03fa8..e46f43106bc4c 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-05-07 +date: 2024-05-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 f4ee1cb631afd..ee13fb9299c70 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-05-07 +date: 2024-05-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 a223f2ff3b58e..06013767287fe 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-05-07 +date: 2024-05-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 99445b4aab055..5f062d69477b3 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-05-07 +date: 2024-05-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 887ef8539beb1..df404d16f556c 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-05-07 +date: 2024-05-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_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index f404ae663ddce..b47fd74207f60 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-05-07 +date: 2024-05-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 255fd276703b6..c9b67cc6e6912 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-05-07 +date: 2024-05-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 2b31a682c035e..ace46b09e1780 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-05-07 +date: 2024-05-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 e221dd4ad7f7d..c75d0aaba1ebb 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-05-07 +date: 2024-05-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 5b7310bf3cd47..51d9cd0495066 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-05-07 +date: 2024-05-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 b8eb222ffa0ca..52892ebafe51f 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-05-07 +date: 2024-05-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 eb85af6221bed..cb6f42e662c1c 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-05-07 +date: 2024-05-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_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 46a9d2ed0d675..794f4ed323c80 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-05-07 +date: 2024-05-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 369f2ea1ab16e..7546193ee0bc2 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-05-07 +date: 2024-05-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 97171eb7ddad2..7746f8008c581 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-05-07 +date: 2024-05-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 bcb0bbfd1dbd3..e30f1502a6d11 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-05-07 +date: 2024-05-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 b9502c70e0b2d..397cbcf9f2b0d 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-05-07 +date: 2024-05-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 1eb3af665d872..bd75dd3e28bd8 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-05-07 +date: 2024-05-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 0ac9c1e2feeb8..686470fd9f3e2 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-05-07 +date: 2024-05-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 9fc0c07fd73a7..b61d77c229a87 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-05-07 +date: 2024-05-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 e855a50880ab4..a64a1fa776a19 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-05-07 +date: 2024-05-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_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 69e43f7294bbb..76b91f00ee372 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-05-07 +date: 2024-05-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 9f27c78cdc106..2913192a27945 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-05-07 +date: 2024-05-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 7f6cf3e8ba7bb..6c24475d1b55d 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.devdocs.json b/api_docs/kbn_observability_alert_details.devdocs.json index d88ae9dc21099..f5de812cee8b5 100644 --- a/api_docs/kbn_observability_alert_details.devdocs.json +++ b/api_docs/kbn_observability_alert_details.devdocs.json @@ -126,7 +126,7 @@ "label": "AlertThresholdTimeRangeRect", "description": [], "signature": [ - "({ alertStarted, color, id, threshold }: Props) => JSX.Element" + "({ color, id, threshold }: Props) => JSX.Element" ], "path": "x-pack/packages/observability/alert_details/src/components/alert_threshold_time_range_rect.tsx", "deprecated": false, @@ -137,7 +137,7 @@ "id": "def-common.AlertThresholdTimeRangeRect.$1", "type": "Object", "tags": [], - "label": "{ alertStarted, color, id, threshold }", + "label": "{ color, id, threshold }", "description": [], "signature": [ "Props" diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 54d5b15fc8125..96c658019a75c 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-05-07 +date: 2024-05-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_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 9c06593288d50..58e29d82f0290 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-05-07 +date: 2024-05-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 6c8fedabb6751..63a76e69b532e 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-05-07 +date: 2024-05-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_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index d6e1457b99227..4d47bfec0599a 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-05-07 +date: 2024-05-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 ed4a77142fea5..aca31e63e1315 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-05-07 +date: 2024-05-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 7e8e155e411f5..45ea3093a17eb 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-05-07 +date: 2024-05-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 9137a9f34603e..c7a1e8379b09f 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-05-07 +date: 2024-05-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 0ad82ff60f0f2..25541a0714530 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-05-07 +date: 2024-05-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 b0ccc90b7d427..1dd72a622d926 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-05-07 +date: 2024-05-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 345fa7d54e341..f54b24e9715e6 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-05-07 +date: 2024-05-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 9b7bab241c6cc..0cb0928413318 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-05-07 +date: 2024-05-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 85eac6e43a470..c8eecd043d12b 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-05-07 +date: 2024-05-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 cd29d893f8f82..fd779bc7cd835 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-05-07 +date: 2024-05-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 b3fc85d73c2c5..584bdf62f3b36 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-05-07 +date: 2024-05-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 4dec9be274a47..baffa06d1b7a5 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 13ecd3645eb81..ce0ea9cce6ee3 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-05-07 +date: 2024-05-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 98de4cff644f7..1c55b41484b3c 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-05-07 +date: 2024-05-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 9ea6345045c36..a63dee90884f9 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-05-07 +date: 2024-05-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 d26febe62c660..a4a9827078195 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-05-07 +date: 2024-05-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 ad6b96c26a7f4..737794c7a7018 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-05-07 +date: 2024-05-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 f90b1fbc4fa63..a3924dc98533d 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-05-07 +date: 2024-05-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 3dea8690b9155..c1eb84d8dcef9 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-05-07 +date: 2024-05-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 9069f465ce801..8dc725ac9b19d 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-05-07 +date: 2024-05-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 94f62672908d2..24aea98682596 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-05-07 +date: 2024-05-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 a2ea40a6355c2..1dea19036a56b 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-05-07 +date: 2024-05-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_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 98ba6cc49d148..994174d383db5 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-05-07 +date: 2024-05-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 0375c41d9ae29..a036728bfa474 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-05-07 +date: 2024-05-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 7e4b1913c3f15..b4d823ce189ef 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-05-07 +date: 2024-05-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 823e14a3dfdb6..ea397c55aeaad 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-05-07 +date: 2024-05-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 74340eacdf4a4..384a1b6c3ce9a 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-05-07 +date: 2024-05-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 1bc51b4b0e863..13e1763209f46 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-05-07 +date: 2024-05-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 4de21e053b32b..64e9d43ac3c5e 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-05-07 +date: 2024-05-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 9885030fe6998..229970ec38a14 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-05-07 +date: 2024-05-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 7f8e80578ee9d..a997f48a76a6c 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-05-07 +date: 2024-05-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 2efea333c74ca..6a835280cde95 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-05-07 +date: 2024-05-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 f24cb9dab3eab..b984a825f34d4 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-05-07 +date: 2024-05-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 bfb253907b700..448006dab4f13 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-05-07 +date: 2024-05-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 bc332f1fe7c52..84489934e1c4f 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-05-07 +date: 2024-05-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 916ce1f4841b5..c8c1349a7e6bc 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-05-07 +date: 2024-05-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 3118a8b2afca6..f67184cffcb19 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-05-07 +date: 2024-05-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 d6aadeda2c8ac..86b4955b8d39b 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 464526a5d585e..00308de9965f8 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index c9c179cc082a2..63b8d8665a2e2 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-05-07 +date: 2024-05-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 a5bed2ba74d1c..8ca9c60efac79 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-05-07 +date: 2024-05-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 84827fa2d7b2e..d6bf8f4481a7d 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-05-07 +date: 2024-05-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 e42a4f1735fb5..cda7f96c0a91f 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-05-07 +date: 2024-05-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 81309db618a09..56d61e43af6ac 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-05-07 +date: 2024-05-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_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index c8e3132345b6a..51f2fbc6c137c 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-05-07 +date: 2024-05-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 0ca394bfb1072..a0105096c3fb8 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-05-07 +date: 2024-05-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 5eb3f550ed434..79f2a94705686 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-05-07 +date: 2024-05-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 50169e907ffcd..a9199387d3715 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-05-07 +date: 2024-05-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 8548eb53e2601..bfa697a730ac5 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-05-07 +date: 2024-05-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_types.mdx b/api_docs/kbn_search_types.mdx index 48f8bffab99b3..98737a76c1d68 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 7e76ad875b6c5..0ba38dd17380c 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-05-07 +date: 2024-05-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 5afeea0349d87..894066c8b1fe9 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-05-07 +date: 2024-05-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 63e8b979e24be..674c0abea2b40 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-05-07 +date: 2024-05-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.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 339a98b8bf81c..963b42e46dd90 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-05-07 +date: 2024-05-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_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index ac0c92f25cdec..c04c7de538c73 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-05-07 +date: 2024-05-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 1302db6211250..cb253347cbc41 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-05-07 +date: 2024-05-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 3766dfb8693d2..24e88411d9141 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-05-07 +date: 2024-05-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 6b2659f5d49cb..cce9a8844406d 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-05-07 +date: 2024-05-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_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 641fd5bbc79c2..0f3d7d1df612e 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-05-07 +date: 2024-05-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 f95ccacea611a..3ea5e0624cf2f 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-05-07 +date: 2024-05-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 df312406fd172..84f480182714e 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-05-07 +date: 2024-05-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 bd9e26e320bb6..5bbd897cc3517 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-05-07 +date: 2024-05-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 6b778079b9fe9..7c5b557d9f0db 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-05-07 +date: 2024-05-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_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index 6a538d1f2cb57..2001d71073087 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index cc61238ade4fd..03964bf312ca5 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-05-07 +date: 2024-05-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 85e4dc7904f79..67ba959b10650 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-05-07 +date: 2024-05-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 1024019d1cf43..ce2018bfb9ef9 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-05-07 +date: 2024-05-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 4e9695976d7ca..7111cece6d4e2 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-05-07 +date: 2024-05-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 32b5789ea83b0..95effbf79e021 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-05-07 +date: 2024-05-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 07a6a94cf971c..b1fceac4a47df 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-05-07 +date: 2024-05-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 5e1539e30ca02..58668baf6d733 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-05-07 +date: 2024-05-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 060c725a25bc3..5b482f7a56b9b 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-05-07 +date: 2024-05-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 03ddadac37d1a..44fd3534e446a 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-05-07 +date: 2024-05-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 ffd714fde546a..48e1fdd678901 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-05-07 +date: 2024-05-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 b199411056cbc..cc8027cc3be35 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-05-07 +date: 2024-05-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 435859641dfb9..b464b612968c0 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-05-07 +date: 2024-05-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 37a167ac7950e..f34f682ad1b48 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-05-07 +date: 2024-05-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 ab2e32279b308..3808fbcebc308 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-05-07 +date: 2024-05-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_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index a5a51b3895e85..c165d5180e19b 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-05-07 +date: 2024-05-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 67e289f36d643..7df050ea213c7 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-05-07 +date: 2024-05-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 843e02c840a4c..d2bd002648b79 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-05-07 +date: 2024-05-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 a191f67451594..f32ab84c1c539 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-05-07 +date: 2024-05-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 22d77cca319b9..61d49f298f277 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-05-07 +date: 2024-05-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 c14cb5b455815..bb968c2716759 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-05-07 +date: 2024-05-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 c5e929535005f..f7d5e865ed06a 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-05-07 +date: 2024-05-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 744e7354ef7d9..19f0fe11a6370 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-05-07 +date: 2024-05-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 9d912fb9fbcf9..79e9c33b322e4 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-05-07 +date: 2024-05-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 3efcfe40c82d3..3d015816baa52 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-05-07 +date: 2024-05-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 3422e38df9cff..c012bd8998dba 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-05-07 +date: 2024-05-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 5cd79c606ae1d..99eded234e519 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-05-07 +date: 2024-05-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 50ea9e344adb7..cdffb1b8091cb 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-05-07 +date: 2024-05-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 b48672c6b00a2..bd9ab20facdac 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-05-07 +date: 2024-05-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 3ac94054af166..3f863f70b1872 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-05-07 +date: 2024-05-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 ae12ba9e73f59..bef3b036f9d1e 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-05-07 +date: 2024-05-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 a93bee1149bed..0f80389d077ff 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-05-07 +date: 2024-05-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 de8282fc50e4e..f59f540c257a6 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-05-07 +date: 2024-05-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 15c02ace7a9d8..a54f9d738ed55 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-05-07 +date: 2024-05-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 9629ca3c2323b..2b75de54cf168 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-05-07 +date: 2024-05-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 a3b54f849fd06..855ca7474ee22 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-05-07 +date: 2024-05-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 652cc70868fd7..b41f45632d26e 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-05-07 +date: 2024-05-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 a4b997552a862..26189e5b1e596 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-05-07 +date: 2024-05-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 5ac1515b51acc..5966718c556df 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-05-07 +date: 2024-05-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 8ea762feb49b5..285b93461d54f 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-05-07 +date: 2024-05-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 c9f9c1a82c9c1..0bd237db76249 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-05-07 +date: 2024-05-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 faeae7ab7c82d..dce5478e34f04 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-05-07 +date: 2024-05-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 caed77829bd3b..2a71a39a941ea 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-05-07 +date: 2024-05-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 6c41aa2999ef7..b02276d3e017e 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-05-07 +date: 2024-05-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 f968e0c134af7..dee130e7ca4c7 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-05-07 +date: 2024-05-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 c864bd17ca645..b0f1a0bce65d5 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-05-07 +date: 2024-05-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 b812ad076221b..edbc47ccce5fc 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-05-07 +date: 2024-05-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 cffc580407a2d..f5e468c86d9fc 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-05-07 +date: 2024-05-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 6739b1bc84258..014630a24dfc8 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-05-07 +date: 2024-05-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 fca0931e7daa6..9eb76301ad45c 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-05-07 +date: 2024-05-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 a9f98d95008f1..3ee844b814fd8 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-05-07 +date: 2024-05-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 1be70f1b98749..8c4a1100e17ef 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-05-07 +date: 2024-05-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 7f6c7bc5eaf6e..ce4ce918a5b19 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-05-07 +date: 2024-05-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 54f602363bfb2..f99a9c18ce457 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-05-07 +date: 2024-05-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 a956538538b65..349366bed379c 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-05-07 +date: 2024-05-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 01760d99894b7..7bb92215492e5 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-05-07 +date: 2024-05-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 6e04c7604e574..c065418433bc2 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-05-07 +date: 2024-05-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 d30dc474b1f8d..3d3c5089239af 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-05-07 +date: 2024-05-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 5bd95ffe04e8d..e12f604f5f213 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-05-07 +date: 2024-05-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 8656d78746289..2c5a79a636b4b 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-05-07 +date: 2024-05-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_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 46f11055f5450..078374f3aa83a 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-05-07 +date: 2024-05-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 bc09568d7794f..d687446afc878 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_es.mdx b/api_docs/kbn_solution_nav_es.mdx index ffdd80a5095b9..cc72fdeadd5a5 100644 --- a/api_docs/kbn_solution_nav_es.mdx +++ b/api_docs/kbn_solution_nav_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-es title: "@kbn/solution-nav-es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-es plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-es'] --- import kbnSolutionNavEsObj from './kbn_solution_nav_es.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_oblt.mdx b/api_docs/kbn_solution_nav_oblt.mdx index c55e9aade46ca..53a91f8725521 100644 --- a/api_docs/kbn_solution_nav_oblt.mdx +++ b/api_docs/kbn_solution_nav_oblt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-oblt title: "@kbn/solution-nav-oblt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-oblt plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-oblt'] --- import kbnSolutionNavObltObj from './kbn_solution_nav_oblt.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 16405d6506ec7..3ee86801b7100 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-05-07 +date: 2024-05-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 949f02026184f..a0618235ff0d1 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 0028af6458444..b34160f5ce46f 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-05-07 +date: 2024-05-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 30567572c8d5e..a23ee54528d4e 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-05-07 +date: 2024-05-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 3ff597004c22a..dc828b440e97d 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 4a590cd971ab7..1147790709652 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-05-07 +date: 2024-05-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 b754fc7266609..ea67dcb00429f 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-05-07 +date: 2024-05-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 a6e0f69e31cb9..d64acfa934ec9 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-05-07 +date: 2024-05-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 ea9322d8ac157..720d2944cfe9c 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-05-07 +date: 2024-05-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 6ba8f71013034..d9e5633ebe4b0 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-05-07 +date: 2024-05-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_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index 0f15b4bede9d4..918e1d1b70c88 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index f02719f0ef05f..2ee85e0267a7a 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-05-07 +date: 2024-05-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 8a9c68e540b3c..39930a01aa3bf 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index aff7155cf6241..b02456af22e81 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-05-07 +date: 2024-05-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_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 5d2403bf7c360..56680c202444f 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-05-07 +date: 2024-05-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 1779f7edd81d1..c37c1a40ed7a7 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-05-07 +date: 2024-05-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 58a24631f8daa..66105a80c08da 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-05-07 +date: 2024-05-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 0c00262e0aea1..95adc7119b535 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-05-07 +date: 2024-05-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 c990c29d013eb..67e43fd0987c2 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-05-07 +date: 2024-05-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.mdx b/api_docs/kbn_unified_data_table.mdx index f98d0089826d7..4b6bfd75b662f 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-05-07 +date: 2024-05-08 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 9cf47290f0857..c8eba4cf7042d 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-05-07 +date: 2024-05-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 d214ce32cc9c6..a8821d93cc15d 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-05-07 +date: 2024-05-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 f37aeca449611..493aed470644a 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-05-07 +date: 2024-05-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_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 9e7234224bf44..d62aa1eb808eb 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-05-07 +date: 2024-05-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 ae12b7eb537f0..d1ac1b7398282 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-05-07 +date: 2024-05-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 540aebf8a97a5..0f5083903f730 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-05-07 +date: 2024-05-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 66fa4bc2ce871..55bf2843a0d5d 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-05-07 +date: 2024-05-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 7190ff432ac1d..d6b517965b9cb 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-05-07 +date: 2024-05-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 35ed6c05c0836..18437e06d74c4 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-05-07 +date: 2024-05-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 e49d818026c38..e9893305bf30d 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-05-07 +date: 2024-05-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 70c36db92992b..f866cfb34cc88 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-05-07 +date: 2024-05-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 f368499e09543..b61e1d4b1f5e5 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-05-07 +date: 2024-05-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_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index ccec2efed99da..0603046cae833 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-05-07 +date: 2024-05-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 f6f3836adf6bb..861d3dce2b527 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-05-07 +date: 2024-05-08 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 7ecaec8ae26f6..fb67fa4907473 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -511,34 +511,6 @@ "deprecated": true, "trackAdoption": false, "references": [ - { - "plugin": "devTools", - "path": "src/plugins/dev_tools/public/application.tsx" - }, - { - "plugin": "devTools", - "path": "src/plugins/dev_tools/public/application.tsx" - }, - { - "plugin": "devTools", - "path": "src/plugins/dev_tools/public/application.tsx" - }, - { - "plugin": "console", - "path": "src/plugins/console/public/shared_imports.ts" - }, - { - "plugin": "crossClusterReplication", - "path": "x-pack/plugins/cross_cluster_replication/public/shared_imports.ts" - }, - { - "plugin": "grokdebugger", - "path": "x-pack/plugins/grokdebugger/public/shared_imports.ts" - }, - { - "plugin": "ingestPipelines", - "path": "x-pack/plugins/ingest_pipelines/public/shared_imports.ts" - }, { "plugin": "infra", "path": "x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx" @@ -551,38 +523,6 @@ "plugin": "infra", "path": "x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx" }, - { - "plugin": "painlessLab", - "path": "x-pack/plugins/painless_lab/public/shared_imports.ts" - }, - { - "plugin": "painlessLab", - "path": "x-pack/plugins/painless_lab/public/application/index.tsx" - }, - { - "plugin": "painlessLab", - "path": "x-pack/plugins/painless_lab/public/application/index.tsx" - }, - { - "plugin": "painlessLab", - "path": "x-pack/plugins/painless_lab/public/application/index.tsx" - }, - { - "plugin": "searchprofiler", - "path": "x-pack/plugins/searchprofiler/public/shared_imports.ts" - }, - { - "plugin": "searchprofiler", - "path": "x-pack/plugins/searchprofiler/public/application/index.tsx" - }, - { - "plugin": "searchprofiler", - "path": "x-pack/plugins/searchprofiler/public/application/index.tsx" - }, - { - "plugin": "searchprofiler", - "path": "x-pack/plugins/searchprofiler/public/application/index.tsx" - }, { "plugin": "metricsDataAccess", "path": "x-pack/plugins/observability_solution/metrics_data_access/public/apps/common_providers.tsx" @@ -1083,38 +1023,6 @@ { "plugin": "observabilityShared", "path": "x-pack/plugins/observability_solution/observability_shared/public/components/header_menu/header_menu_portal.tsx" - }, - { - "plugin": "console", - "path": "src/plugins/console/public/shared_imports.ts" - }, - { - "plugin": "console", - "path": "src/plugins/console/public/application/hooks/use_send_current_request/use_send_current_request.ts" - }, - { - "plugin": "console", - "path": "src/plugins/console/public/application/hooks/use_send_current_request/use_send_current_request.ts" - }, - { - "plugin": "runtimeFields", - "path": "x-pack/plugins/runtime_fields/public/shared_imports.ts" - }, - { - "plugin": "runtimeFields", - "path": "x-pack/plugins/runtime_fields/public/load_editor.tsx" - }, - { - "plugin": "runtimeFields", - "path": "x-pack/plugins/runtime_fields/public/load_editor.tsx" - }, - { - "plugin": "indexManagement", - "path": "x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_datastreams_rollover/use_datastreams_rollover.tsx" - }, - { - "plugin": "indexManagement", - "path": "x-pack/plugins/index_management/public/application/components/component_templates/component_template_wizard/component_template_datastreams_rollover/use_datastreams_rollover.tsx" } ], "children": [ diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index fd5ae16e93647..4a5e447ebc22f 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-05-07 +date: 2024-05-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 d833ed1b4753d..c5987e0625d6b 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-05-07 +date: 2024-05-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 1507d84cf0776..14b69c5f3111c 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-05-07 +date: 2024-05-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 046cee9bacbbc..03bb3fcadeb27 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-05-07 +date: 2024-05-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 d8477b45a31ae..abe562b59fa86 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-05-07 +date: 2024-05-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 992e108882ccd..9d08bf7c6f91b 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-05-07 +date: 2024-05-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 c754936160d91..d9009a3981dee 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-05-07 +date: 2024-05-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 397b3dd856db7..d98527bad0d80 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-05-07 +date: 2024-05-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 d232568385698..601b7ab5b477b 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 2eaacecfeb321..9de811c374e1c 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-05-07 +date: 2024-05-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 bdf0476decc5c..d8f6568f15fa1 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-05-07 +date: 2024-05-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 da966e66eb854..19c68ac040353 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.devdocs.json b/api_docs/maps.devdocs.json index dc828b0c0a133..f10d07d9b6d91 100644 --- a/api_docs/maps.devdocs.json +++ b/api_docs/maps.devdocs.json @@ -1930,6 +1930,83 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "maps", + "id": "def-public.CreateLayerDescriptorParams", + "type": "Interface", + "tags": [], + "label": "CreateLayerDescriptorParams", + "description": [], + "path": "x-pack/plugins/maps/public/classes/sources/es_search_source/create_layer_descriptor.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "maps", + "id": "def-public.CreateLayerDescriptorParams.indexPatternId", + "type": "string", + "tags": [], + "label": "indexPatternId", + "description": [], + "path": "x-pack/plugins/maps/public/classes/sources/es_search_source/create_layer_descriptor.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "maps", + "id": "def-public.CreateLayerDescriptorParams.geoFieldName", + "type": "string", + "tags": [], + "label": "geoFieldName", + "description": [], + "path": "x-pack/plugins/maps/public/classes/sources/es_search_source/create_layer_descriptor.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "maps", + "id": "def-public.CreateLayerDescriptorParams.geoFieldType", + "type": "Enum", + "tags": [], + "label": "geoFieldType", + "description": [], + "signature": [ + { + "pluginId": "maps", + "scope": "common", + "docId": "kibMapsPluginApi", + "section": "def-common.ES_GEO_FIELD_TYPE", + "text": "ES_GEO_FIELD_TYPE" + } + ], + "path": "x-pack/plugins/maps/public/classes/sources/es_search_source/create_layer_descriptor.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "maps", + "id": "def-public.CreateLayerDescriptorParams.query", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.Query", + "text": "Query" + }, + " | undefined" + ], + "path": "x-pack/plugins/maps/public/classes/sources/es_search_source/create_layer_descriptor.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "maps", "id": "def-public.EMSTermJoinConfig", @@ -4583,7 +4660,13 @@ "text": "LayerDescriptor" }, " | null>; createESSearchSourceLayerDescriptor: (params: ", - "CreateLayerDescriptorParams", + { + "pluginId": "maps", + "scope": "public", + "docId": "kibMapsPluginApi", + "section": "def-public.CreateLayerDescriptorParams", + "text": "CreateLayerDescriptorParams" + }, ") => Promise<", { "pluginId": "maps", diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index d43c59cf94f9a..0f0a70ea41240 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 281 | 0 | 276 | 32 | +| 286 | 0 | 281 | 31 | ## Client diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 24dca7a498348..6eb44fae8bfaa 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-05-07 +date: 2024-05-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 82666d05729e4..de788f8c267bd 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-05-07 +date: 2024-05-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 edaa5ccffd7c5..a473604fc3edb 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-05-07 +date: 2024-05-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 b2b2c0b9be4d3..0f94e9167b81e 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-05-07 +date: 2024-05-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 41a2027b427b4..e201d8af7cc80 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-05-07 +date: 2024-05-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 76267b13568a9..27363d5cc4dfa 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-05-07 +date: 2024-05-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 6d31d405e2676..94563328842e4 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-05-07 +date: 2024-05-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 d062507b38d09..7fbe7f674c983 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-05-07 +date: 2024-05-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 c07fd5b69a264..918662ca938ae 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-05-07 +date: 2024-05-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 6d3c1602695d0..ab667349f7f0e 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-05-07 +date: 2024-05-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 66b1efa3f377c..3bcce3480ccbc 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.devdocs.json b/api_docs/observability_a_i_assistant.devdocs.json index c486b0a6cfbe9..f2e981c27e292 100644 --- a/api_docs/observability_a_i_assistant.devdocs.json +++ b/api_docs/observability_a_i_assistant.devdocs.json @@ -6484,12 +6484,12 @@ "label": "meta", "description": [], "signature": [ - "ErrorMetaAttributes[T] | undefined" + "ErrorMetaAttributes[T]" ], "path": "x-pack/plugins/observability_solution/observability_ai_assistant/common/conversation_complete.ts", "deprecated": false, "trackAdoption": false, - "isRequired": false + "isRequired": true } ], "returnComment": [] diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 57ef4d4bbc0da..03f804cda0d7e 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-05-07 +date: 2024-05-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 a3dd697e64e2d..91392d4dcfd45 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-05-07 +date: 2024-05-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 e465044da0b54..b3e994e0b9f14 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-05-07 +date: 2024-05-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 b46e53712ade4..56d47dea88a85 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-05-07 +date: 2024-05-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 14ee93cf35cb3..aef1a9f3af95e 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-05-07 +date: 2024-05-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 6abe52b5fdfe6..bc299e6f40165 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.devdocs.json b/api_docs/osquery.devdocs.json index 25200d49eec76..2d09d029c0772 100644 --- a/api_docs/osquery.devdocs.json +++ b/api_docs/osquery.devdocs.json @@ -301,7 +301,7 @@ "label": "createActionService", "description": [], "signature": [ - "{ create: (params: { agent_ids?: string[] | undefined; agent_all?: boolean | undefined; agent_platforms?: string[] | undefined; agent_policy_ids?: string[] | undefined; query?: string | undefined; queries?: { id: string; query: string; ecs_mapping: { [x: string]: { field?: string | undefined; value?: string | string[] | undefined; }; } | undefined; version: string | undefined; platform: string | undefined; removed: boolean | undefined; snapshot: boolean | undefined; }[] | undefined; saved_query_id?: string | undefined; timeout?: number | undefined; ecs_mapping?: { [x: string]: { field?: string | undefined; value?: string | string[] | undefined; }; } | undefined; pack_id?: string | undefined; alert_ids?: string[] | undefined; case_ids?: string[] | undefined; event_ids?: string[] | undefined; metadata?: object | undefined; }, alertData?: OutputOf> | undefined) => Promise<{ response: { action_id: string; '@timestamp': string; expiration: string; type: string; input_type: string; alert_ids: string[] | undefined; event_ids: string[] | undefined; case_ids: string[] | undefined; agent_ids: string[] | undefined; agent_all: boolean | undefined; agent_platforms: string[] | undefined; agent_policy_ids: string[] | undefined; agents: string[]; user_id: string | undefined; metadata: object | undefined; pack_id: string | undefined; pack_name: string | undefined; pack_prebuilt: boolean | undefined; queries: ", + "[]; }; readonly \"kibana.alert.rule.execution.timestamp\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.rule.parameters\": { readonly array: false; readonly type: \"flattened\"; readonly ignore_above: 4096; readonly required: false; }; readonly \"kibana.alert.rule.tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.start\": { readonly type: \"date\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.time_range\": { readonly type: \"date_range\"; readonly format: \"epoch_millis||strict_date_optional_time\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.url\": { readonly type: \"keyword\"; readonly array: false; readonly index: false; readonly required: false; readonly ignore_above: 2048; }; readonly \"kibana.alert.workflow_assignee_ids\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.alert.workflow_status\": { readonly type: \"keyword\"; readonly array: false; readonly required: false; }; readonly \"kibana.alert.workflow_tags\": { readonly type: \"keyword\"; readonly array: true; readonly required: false; }; readonly \"kibana.version\": { readonly type: \"version\"; readonly array: false; readonly required: false; }; }>> & { _index: string; }) | undefined) => Promise<{ response: { action_id: string; '@timestamp': string; expiration: string; type: string; input_type: string; alert_ids: string[] | undefined; event_ids: string[] | undefined; case_ids: string[] | undefined; agent_ids: string[] | undefined; agent_all: boolean | undefined; agent_platforms: string[] | undefined; agent_policy_ids: string[] | undefined; agents: string[]; user_id: string | undefined; metadata: object | undefined; pack_id: string | undefined; pack_name: string | undefined; pack_prebuilt: boolean | undefined; queries: ", "Dictionary", "[]; }; fleetActionsCount: number; }>; stop: () => void; }" ], diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index ecaa6803dfdb2..d415eb4a742aa 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-05-07 +date: 2024-05-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 acd87b4ee5482..1d47d09d063c4 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-05-07 +date: 2024-05-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 4fe422ca9cfcf..b678d2d9056a8 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 48111 | 241 | 36699 | 1850 | +| 48130 | 241 | 36716 | 1851 | ## Plugin Directory @@ -32,7 +32,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 4 | 0 | 4 | 1 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | AIOps plugin maintained by ML team. | 67 | 0 | 4 | 1 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 862 | 1 | 830 | 54 | -| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 122 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | The user interface for Elastic APM | 29 | 0 | 29 | 123 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Asset manager plugin for entity assets (inventory, topology, etc) | 9 | 0 | 9 | 2 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | - | 2 | 0 | 2 | 0 | @@ -130,7 +130,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes the shared components and APIs to access and visualize logs. | 303 | 0 | 277 | 32 | | logstash | [@elastic/logstash](https://github.com/orgs/elastic/teams/logstash) | - | 0 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 44 | 0 | 44 | 7 | -| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 281 | 0 | 276 | 32 | +| | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 286 | 0 | 281 | 31 | | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | - | 60 | 0 | 60 | 0 | | | [@elastic/obs-knowledge-team](https://github.com/orgs/elastic/teams/obs-knowledge-team) | Exposes utilities for accessing metrics data | 104 | 8 | 104 | 6 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 153 | 3 | 66 | 100 | @@ -247,7 +247,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 22 | 0 | 1 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 18 | 0 | 18 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 4 | 0 | 4 | 0 | -| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 44 | 0 | 44 | 7 | +| | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 49 | 0 | 49 | 8 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 191 | 0 | 191 | 28 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | - | 11 | 0 | 11 | 0 | | | [@elastic/kibana-qa](https://github.com/orgs/elastic/teams/kibana-qa) | - | 12 | 0 | 12 | 0 | @@ -361,7 +361,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 9 | 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) | - | 38 | 0 | 31 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 56 | 0 | 30 | 0 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 61 | 0 | 34 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 9 | 0 | 5 | 2 | | | [@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) | - | 29 | 0 | 25 | 0 | @@ -496,7 +496,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 0 | 52 | 1 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 38 | 0 | 14 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 22 | 0 | 18 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 50 | 0 | 42 | 1 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 54 | 0 | 45 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 0 | 0 | | | [@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) | - | 36 | 0 | 21 | 1 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 063b9cf5e2b71..9e9503f3774e4 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-05-07 +date: 2024-05-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 a6a52059416e8..bc38f1e53691a 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 3f82a29534996..a75f20e8c0c32 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-05-07 +date: 2024-05-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 df964c2871156..5adbf4bec3a77 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-05-07 +date: 2024-05-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 f5df410601e03..2d6e3543b877f 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-05-07 +date: 2024-05-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 ab221e6bfec7f..522da7446a24a 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-05-07 +date: 2024-05-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 27289bf32ec69..85b1516b57059 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-05-07 +date: 2024-05-08 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 d5f57b730b6a1..642c93433b951 100644 --- a/api_docs/rule_registry.devdocs.json +++ b/api_docs/rule_registry.devdocs.json @@ -107,15 +107,7 @@ "label": "get", "description": [], "signature": [ - "({ id, index }: GetAlertParams) => Promise> | undefined>" + "({ id, index }: GetAlertParams) => Promise<{ _index: string; \"@timestamp\"?: string | undefined; \"kibana.alert.rule.rule_type_id\"?: string | undefined; \"kibana.alert.rule.consumer\"?: string | undefined; \"kibana.alert.instance.id\"?: string | undefined; \"kibana.alert.rule.category\"?: string | undefined; \"kibana.alert.rule.name\"?: string | undefined; \"kibana.alert.rule.producer\"?: string | undefined; \"kibana.alert.rule.revision\"?: number | undefined; \"kibana.alert.rule.uuid\"?: string | undefined; \"kibana.alert.status\"?: string | undefined; \"kibana.alert.uuid\"?: string | undefined; \"kibana.space_ids\"?: string[] | undefined; \"event.action\"?: string | undefined; tags?: string[] | undefined; \"kibana.alert.rule.execution.uuid\"?: string | undefined; \"event.kind\"?: string | undefined; \"kibana.alert.action_group\"?: string | undefined; \"kibana.alert.case_ids\"?: string[] | undefined; \"kibana.alert.consecutive_matches\"?: number | undefined; \"kibana.alert.duration.us\"?: number | undefined; \"kibana.alert.end\"?: string | undefined; \"kibana.alert.flapping\"?: boolean | undefined; \"kibana.alert.flapping_history\"?: boolean[] | undefined; \"kibana.alert.last_detected\"?: string | undefined; \"kibana.alert.maintenance_window_ids\"?: string[] | undefined; \"kibana.alert.reason\"?: string | undefined; \"kibana.alert.rule.execution.timestamp\"?: string | undefined; \"kibana.alert.rule.parameters\"?: { [key: string]: unknown; } | undefined; \"kibana.alert.rule.tags\"?: string[] | undefined; \"kibana.alert.start\"?: string | undefined; \"kibana.alert.time_range\"?: unknown; \"kibana.alert.url\"?: string | undefined; \"kibana.alert.workflow_assignee_ids\"?: string[] | undefined; \"kibana.alert.workflow_status\"?: string | undefined; \"kibana.alert.workflow_tags\"?: string[] | undefined; \"kibana.version\"?: string | undefined; \"ecs.version\"?: string | undefined; \"kibana.alert.risk_score\"?: number | undefined; \"kibana.alert.rule.author\"?: string | undefined; \"kibana.alert.rule.created_at\"?: string | undefined; \"kibana.alert.rule.created_by\"?: string | undefined; \"kibana.alert.rule.description\"?: string | undefined; \"kibana.alert.rule.enabled\"?: string | undefined; \"kibana.alert.rule.from\"?: string | undefined; \"kibana.alert.rule.interval\"?: string | undefined; \"kibana.alert.rule.license\"?: string | undefined; \"kibana.alert.rule.note\"?: string | undefined; \"kibana.alert.rule.references\"?: string[] | undefined; \"kibana.alert.rule.rule_id\"?: string | undefined; \"kibana.alert.rule.rule_name_override\"?: string | undefined; \"kibana.alert.rule.to\"?: string | undefined; \"kibana.alert.rule.type\"?: string | undefined; \"kibana.alert.rule.updated_at\"?: string | undefined; \"kibana.alert.rule.updated_by\"?: string | undefined; \"kibana.alert.rule.version\"?: string | undefined; \"kibana.alert.severity\"?: string | undefined; \"kibana.alert.suppression.docs_count\"?: number | undefined; \"kibana.alert.suppression.end\"?: string | undefined; \"kibana.alert.suppression.start\"?: string | undefined; \"kibana.alert.suppression.terms.field\"?: string[] | undefined; \"kibana.alert.suppression.terms.value\"?: string[] | undefined; \"kibana.alert.system_status\"?: string | undefined; \"kibana.alert.workflow_reason\"?: string | undefined; \"kibana.alert.workflow_status_updated_at\"?: string | undefined; \"kibana.alert.workflow_user\"?: string | undefined; }>" ], "path": "x-pack/plugins/rule_registry/server/alert_data_client/alerts_client.ts", "deprecated": false, diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 56bf12a9d113e..3b1b0e7752876 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-05-07 +date: 2024-05-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 cac00818b4148..e06eba1c01efc 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-05-07 +date: 2024-05-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 984a23721fe15..87f00527ef708 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-05-07 +date: 2024-05-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 93a1044b25199..0895892fedb95 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-05-07 +date: 2024-05-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 deb861b0fc118..92e8567148323 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-05-07 +date: 2024-05-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 39e7778ff56bb..4fc36a967196f 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-05-07 +date: 2024-05-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 405e8e22d1da8..bede53d59531f 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-05-07 +date: 2024-05-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 db2f0c595705f..3f9074fb2a169 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-05-07 +date: 2024-05-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 fa3d7f94c17a6..e97edb9dde8e5 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-05-07 +date: 2024-05-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 24062313dc252..2b3918dba22e4 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index cc39a5ab07dd5..8f2f96937f4a5 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index da7c51f45377b..2977c1e7989d7 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-05-07 +date: 2024-05-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 092eef3bfc1b2..367d882d94871 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-05-07 +date: 2024-05-08 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 ce89204dc52e2..60b2295bfb982 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-05-07 +date: 2024-05-08 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 2ce600a624ca8..1298c0bc66463 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -485,7 +485,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantModelEvaluation\" | \"attackDiscoveryEnabled\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" + "\"assistantModelEvaluation\" | \"attackDiscoveryEnabled\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -565,7 +565,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantModelEvaluation\" | \"attackDiscoveryEnabled\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" + "\"assistantModelEvaluation\" | \"attackDiscoveryEnabled\" | \"tGridEnabled\" | \"tGridEventRenderedViewEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"insightsRelatedAlertsByProcessAncestry\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionsEnabled\" | \"endpointResponseActionsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"agentStatusClientEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"alertsPageChartsEnabled\" | \"alertTypeEnabled\" | \"expandableFlyoutInCreateRuleEnabled\" | \"expandableEventFlyoutEnabled\" | \"expandableTimelineFlyoutEnabled\" | \"alertsPageFiltersEnabled\" | \"newUserDetailsFlyout\" | \"newUserDetailsFlyoutManagedUser\" | \"newHostDetailsFlyout\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"jsonPrebuiltRulesDiffingEnabled\" | \"timelineEsqlTabDisabled\" | \"unifiedComponentsInTimelineEnabled\" | \"analyzerDatePickersAndSourcererDisabled\" | \"perFieldPrebuiltRulesDiffingEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"aiAssistantFlyoutMode\" | \"valueListItemsModalEnabled\" | \"bulkCustomHighlightedFieldsEnabled\" | undefined" ], "path": "x-pack/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1964,7 +1964,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly attackDiscoveryEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: 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 jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly attackDiscoveryEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: 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 jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3054,7 +3054,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly attackDiscoveryEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: 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 jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly attackDiscoveryEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: 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 jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3230,7 +3230,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly attackDiscoveryEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: 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 jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" + "{ readonly tGridEnabled: boolean; readonly tGridEventRenderedViewEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly insightsRelatedAlertsByProcessAncestry: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionsEnabled: boolean; readonly endpointResponseActionsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly agentStatusClientEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly alertsPageChartsEnabled: boolean; readonly alertTypeEnabled: boolean; readonly expandableFlyoutInCreateRuleEnabled: boolean; readonly expandableEventFlyoutEnabled: boolean; readonly expandableTimelineFlyoutEnabled: boolean; readonly alertsPageFiltersEnabled: boolean; readonly attackDiscoveryEnabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyout: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly newHostDetailsFlyout: 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 jamfDataInAnalyzerEnabled: boolean; readonly jsonPrebuiltRulesDiffingEnabled: boolean; readonly timelineEsqlTabDisabled: boolean; readonly unifiedComponentsInTimelineEnabled: boolean; readonly analyzerDatePickersAndSourcererDisabled: boolean; readonly perFieldPrebuiltRulesDiffingEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly aiAssistantFlyoutMode: boolean; readonly valueListItemsModalEnabled: boolean; readonly bulkCustomHighlightedFieldsEnabled: boolean; }" ], "path": "x-pack/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3296,7 +3296,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 tGridEnabled: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: false; readonly responseActionsSentinelOneGetFileEnabled: false; readonly agentStatusClientEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly expandableEventFlyoutEnabled: true; readonly expandableTimelineFlyoutEnabled: true; readonly alertsPageFiltersEnabled: true; readonly attackDiscoveryEnabled: false; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyout: true; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: true; 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: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: false; readonly aiAssistantFlyoutMode: false; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: false; }" + "{ readonly tGridEnabled: true; readonly tGridEventRenderedViewEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: true; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly insightsRelatedAlertsByProcessAncestry: true; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionsEnabled: true; readonly endpointResponseActionsEnabled: true; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: false; readonly responseActionsSentinelOneGetFileEnabled: false; readonly agentStatusClientEnabled: false; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: false; readonly alertsPageChartsEnabled: true; readonly alertTypeEnabled: false; readonly expandableFlyoutInCreateRuleEnabled: true; readonly expandableEventFlyoutEnabled: true; readonly expandableTimelineFlyoutEnabled: true; readonly alertsPageFiltersEnabled: true; readonly attackDiscoveryEnabled: false; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyout: true; readonly newUserDetailsFlyoutManagedUser: false; readonly newHostDetailsFlyout: true; 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: false; readonly jamfDataInAnalyzerEnabled: false; readonly jsonPrebuiltRulesDiffingEnabled: true; readonly timelineEsqlTabDisabled: false; readonly unifiedComponentsInTimelineEnabled: false; readonly analyzerDatePickersAndSourcererDisabled: false; readonly perFieldPrebuiltRulesDiffingEnabled: true; readonly malwareOnWriteScanOptionAvailable: false; readonly aiAssistantFlyoutMode: true; readonly valueListItemsModalEnabled: true; readonly bulkCustomHighlightedFieldsEnabled: 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 08b96ce0a8429..a70f8a0547753 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-05-07 +date: 2024-05-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 f59da08d73538..cfe0f17474bc5 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-05-07 +date: 2024-05-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 c14277be9ef2d..ae5b63b94d265 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-05-07 +date: 2024-05-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 0d34ac524e71d..6baed8cb30777 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-05-07 +date: 2024-05-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 7e488cd888441..ea59ceec49bab 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-05-07 +date: 2024-05-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 0b4ca7fe94517..461daf517809d 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-05-07 +date: 2024-05-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 a39633343914d..7fc3002d2eca6 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-05-07 +date: 2024-05-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 8e7cd6bc73892..97b2df157c884 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-05-07 +date: 2024-05-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 b9af365750fff..44a18b30c5fbd 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-05-07 +date: 2024-05-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 1a198ffddd57f..31d2c540f45a3 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-05-07 +date: 2024-05-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 dc4ccd6b61d7d..16cbc76f35084 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-05-07 +date: 2024-05-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 398c602108f66..28495844f9704 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-05-07 +date: 2024-05-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 b780bc73f8036..0445a5baf2905 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 2fc876ce18268..4d613c46b6bb3 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-05-07 +date: 2024-05-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 e32b438a32f33..4269973b07e21 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-05-07 +date: 2024-05-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 5bb462f5ee062..a536545d66574 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index d5c1bf80a808d..80a6ebae54b87 100644 --- a/api_docs/telemetry_collection_xpack.mdx +++ b/api_docs/telemetry_collection_xpack.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionXpack title: "telemetryCollectionXpack" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionXpack plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 1f5d2e0609375..70ad1b531d17d 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index df475489c6d1d..f054fbf7b03b7 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index cacc0d9cbd906..9f639a8013797 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-05-07 +date: 2024-05-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 329a5f23bb0f5..665641a20157f 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-05-07 +date: 2024-05-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 e3aa5f939d5a6..840aaab6087dc 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-05-07 +date: 2024-05-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 848f94d5674f4..dbc666e7c26d8 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-05-07 +date: 2024-05-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 ecd4e86a80293..17b2ee4aa95e8 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-05-07 +date: 2024-05-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 f740435d1095d..05f77c246c3f8 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-05-07 +date: 2024-05-08 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 fc7852338b714..5f9ade7eeec18 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-05-07 +date: 2024-05-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 98a006a8491e8..7486dcb2635df 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-05-07 +date: 2024-05-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 8e3fe86d3c060..c9b605c7285eb 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-05-07 +date: 2024-05-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 a183f9d955251..cb7c06dead6d2 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-05-07 +date: 2024-05-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 a72811ee6f272..6d6c2088c1aac 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-05-07 +date: 2024-05-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 53bd29a071eb0..552d55f1b5722 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-05-07 +date: 2024-05-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 0ba7760f02d7b..8a5a3b8a0295d 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-05-07 +date: 2024-05-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 6a6471e55881b..ab0f426c53d28 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-05-07 +date: 2024-05-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 38a57a2cda4eb..09cfab6e6a817 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-05-07 +date: 2024-05-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 f913b1c15e04e..12bcbdfdcf772 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-05-07 +date: 2024-05-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 6dc7562445401..eb32e545f7a85 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-05-07 +date: 2024-05-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 04c1f0360d917..2f9ccc4572e19 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-05-07 +date: 2024-05-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 7ed5f1478f808..2b1bc6b4d0345 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-05-07 +date: 2024-05-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 6be95d9806641..d4b7d7cb61a53 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-05-07 +date: 2024-05-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 1649e43a3ae9b..261265f9cd663 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-05-07 +date: 2024-05-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 a3dc522271ef7..f608063fff904 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-05-07 +date: 2024-05-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 4416a05f81b20..eea54e65a3ad7 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-05-07 +date: 2024-05-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 e09fee372091f..820464e0da685 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-05-07 +date: 2024-05-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 2ca1fc860febe..cdc3d96d1852f 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-05-07 +date: 2024-05-08 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; From c43da3e4349a6bb13cdab507530efd926147c30b Mon Sep 17 00:00:00 2001 From: Jatin Kathuria Date: Wed, 8 May 2024 08:21:30 +0200 Subject: [PATCH 07/34] [Security Solution] Timeline : Disabling Timeline ESQL feature flag should disable ESQL Tab. (#182816) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary handles https://github.com/elastic/kibana/issues/182798 Recently there was PR : https://github.com/elastic/kibana/pull/181616 which does not disable ES|QL tab in timeline even if feature flag is disabled when : - User has already created a ESQL Query in timeline and saved the timeline. This PR makes sure when below feature flag exists, then `ES|QL` tab will be definitely disabled even when user has a saved timeline with ES|QL Query in it. ```yaml xpack.securitySolution.enableExperimental: - timelineEsqlTabDisabled ``` ## Desk Testing Guidelines 1. Remove above Feature Flag 2. Go to Timeline and Create a Timeline with ESQL Query 3. Save the timeline. 4. Go To advanced Settings and search for `esql` and disable the `enableESQL` setting. 5. Go back to the timeline saved in step 3. 6. ✅ Assert that the `ES|QL` tab is still there. 7. ✅ Assert that the `ES|QL` tab is NOT there in a new timeline. 8. Add above feature flag - which disables the esql Tab. 9. Go back to the timeline saved in step 3. 10. ✅ Assert that the `ES|QL` tab is no longer there. 11. ✅ Assert that the `ES|QL` tab is NOT there in a new timeline. ### 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 --- .../hooks/esql/use_esql_availability.ts | 10 ++- .../components/timeline/tabs/index.test.tsx | 90 ++++++++++++++----- .../components/timeline/tabs/index.tsx | 27 +++++- 3 files changed, 95 insertions(+), 32 deletions(-) diff --git a/x-pack/plugins/security_solution/public/common/hooks/esql/use_esql_availability.ts b/x-pack/plugins/security_solution/public/common/hooks/esql/use_esql_availability.ts index 41fc7084b32bf..3e9bdb658c3e1 100644 --- a/x-pack/plugins/security_solution/public/common/hooks/esql/use_esql_availability.ts +++ b/x-pack/plugins/security_solution/public/common/hooks/esql/use_esql_availability.ts @@ -18,17 +18,19 @@ import { useIsExperimentalFeatureEnabled } from '../use_experimental_features'; export const useEsqlAvailability = () => { const { uiSettings } = useKibana().services; const isEsqlAdvancedSettingEnabled = uiSettings?.get(ENABLE_ESQL); + + const isTimelineEsqlFeatureFlagDisabled = + useIsExperimentalFeatureEnabled('timelineEsqlTabDisabled'); + const isEsqlRuleTypeEnabled = !useIsExperimentalFeatureEnabled('esqlRulesDisabled') && isEsqlAdvancedSettingEnabled; - const isESQLTabInTimelineEnabled = - !useIsExperimentalFeatureEnabled('timelineEsqlTabDisabled') && isEsqlAdvancedSettingEnabled; return useMemo( () => ({ isEsqlAdvancedSettingEnabled, isEsqlRuleTypeEnabled, - isESQLTabInTimelineEnabled, + isTimelineEsqlEnabledByFeatureFlag: !isTimelineEsqlFeatureFlagDisabled, }), - [isESQLTabInTimelineEnabled, isEsqlAdvancedSettingEnabled, isEsqlRuleTypeEnabled] + [isEsqlAdvancedSettingEnabled, isTimelineEsqlFeatureFlagDisabled, isEsqlRuleTypeEnabled] ); }; diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.test.tsx index 7f399aa095a8a..4d0a8f5cfd363 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.test.tsx @@ -18,7 +18,8 @@ import { render, screen, waitFor } from '@testing-library/react'; jest.mock('../../../../common/hooks/esql/use_esql_availability', () => ({ useEsqlAvailability: jest.fn().mockReturnValue({ - isESQLTabInTimelineEnabled: true, + isEsqlAdvancedSettingEnabled: true, + isTimelineEsqlEnabledByFeatureFlag: true, }), })); @@ -44,38 +45,79 @@ describe('Timeline', () => { expect(screen.getByTestId(esqlTabSubj)).toBeVisible(); }); - it('should not show the esql tab when the advanced setting is disabled', async () => { - useEsqlAvailabilityMock.mockReturnValue({ - isESQLTabInTimelineEnabled: false, + describe('no existing esql query is present', () => { + it('should not show the esql tab when the advanced setting is disabled', async () => { + useEsqlAvailabilityMock.mockReturnValue({ + isEsqlAdvancedSettingEnabled: false, + isTimelineEsqlEnabledByFeatureFlag: true, + }); + render( + + + + ); + + await waitFor(() => { + expect(screen.queryByTestId(esqlTabSubj)).toBeNull(); + }); }); - render( - - - - ); + it('should not show the esql tab when the esql is disabled by feature flag', async () => { + useEsqlAvailabilityMock.mockReturnValue({ + isEsqlAdvancedSettingEnabled: false, + isTimelineEsqlEnabledByFeatureFlag: false, + }); + render( + + + + ); - await waitFor(() => { - expect(screen.queryByTestId(esqlTabSubj)).toBeNull(); + await waitFor(() => { + expect(screen.queryByTestId(esqlTabSubj)).toBeNull(); + }); }); }); - it('should show the esql tab when the advanced setting is disabled, but an esql query is present', async () => { - useEsqlAvailabilityMock.mockReturnValue({ - isESQLTabInTimelineEnabled: false, + describe('existing esql query is present', () => { + let mockStore: ReturnType; + beforeEach(() => { + const stateWithSavedSearchId = structuredClone(mockGlobalState); + stateWithSavedSearchId.timeline.timelineById[TimelineId.test].savedSearchId = 'test-id'; + mockStore = createMockStore(stateWithSavedSearchId); }); - const stateWithSavedSearchId = structuredClone(mockGlobalState); - stateWithSavedSearchId.timeline.timelineById[TimelineId.test].savedSearchId = 'test-id'; - const mockStore = createMockStore(stateWithSavedSearchId); + it('should show the esql tab when the advanced setting is disabled', async () => { + useEsqlAvailabilityMock.mockReturnValue({ + isESQLTabInTimelineEnabled: false, + isTimelineEsqlEnabledByFeatureFlag: true, + }); - render( - - - - ); + render( + + + + ); + + await waitFor(() => { + expect(screen.queryByTestId(esqlTabSubj)).toBeVisible(); + }); + }); + + it('should not show the esql tab when the esql is disabled by the feature flag', async () => { + useEsqlAvailabilityMock.mockReturnValue({ + isESQLTabInTimelineEnabled: true, + isTimelineEsqlEnabledByFeatureFlag: false, + }); + + render( + + + + ); - await waitFor(() => { - expect(screen.queryByTestId(esqlTabSubj)).toBeVisible(); + await waitFor(() => { + expect(screen.queryByTestId(esqlTabSubj)).toBeNull(); + }); }); }); }); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.tsx index 2e164677735dd..643a5b54be415 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.tsx @@ -110,11 +110,20 @@ const ActiveTimelineTab = memo( showTimeline, }) => { const { hasAssistantPrivilege } = useAssistantAvailability(); - const { isESQLTabInTimelineEnabled } = useEsqlAvailability(); + const { isTimelineEsqlEnabledByFeatureFlag, isEsqlAdvancedSettingEnabled } = + useEsqlAvailability(); const timelineESQLSavedSearch = useShallowEqualSelector((state) => selectTimelineESQLSavedSearchId(state, timelineId) ); - const shouldShowESQLTab = isESQLTabInTimelineEnabled || timelineESQLSavedSearch != null; + const shouldShowESQLTab = useMemo(() => { + // disabling esql feature from feature flag should unequivocally hide the tab + // irrespective of the fact that the advanced setting is enabled or + // not or existing esql query is present or not + if (!isTimelineEsqlEnabledByFeatureFlag) { + return false; + } + return isEsqlAdvancedSettingEnabled || timelineESQLSavedSearch != null; + }, [isEsqlAdvancedSettingEnabled, isTimelineEsqlEnabledByFeatureFlag, timelineESQLSavedSearch]); const aiAssistantFlyoutMode = useIsExperimentalFeatureEnabled('aiAssistantFlyoutMode'); const getTab = useCallback( (tab: TimelineTabs) => { @@ -271,14 +280,24 @@ const TabsContentComponent: React.FC = ({ const getAppNotes = useMemo(() => getNotesSelector(), []); const getTimelineNoteIds = useMemo(() => getNoteIdsSelector(), []); const getTimelinePinnedEventNotes = useMemo(() => getEventIdToNoteIdsSelector(), []); - const { isESQLTabInTimelineEnabled } = useEsqlAvailability(); + const { isEsqlAdvancedSettingEnabled, isTimelineEsqlEnabledByFeatureFlag } = + useEsqlAvailability(); + const timelineESQLSavedSearch = useShallowEqualSelector((state) => selectTimelineESQLSavedSearchId(state, timelineId) ); const activeTab = useShallowEqualSelector((state) => getActiveTab(state, timelineId)); const showTimeline = useShallowEqualSelector((state) => getShowTimeline(state, timelineId)); - const shouldShowESQLTab = isESQLTabInTimelineEnabled || timelineESQLSavedSearch != null; + const shouldShowESQLTab = useMemo(() => { + // disabling esql feature from feature flag should unequivocally hide the tab + // irrespective of the fact that the advanced setting is enabled or + // not or existing esql query is present or not + if (!isTimelineEsqlEnabledByFeatureFlag) { + return false; + } + return isEsqlAdvancedSettingEnabled || timelineESQLSavedSearch != null; + }, [isEsqlAdvancedSettingEnabled, isTimelineEsqlEnabledByFeatureFlag, timelineESQLSavedSearch]); const numberOfPinnedEvents = useShallowEqualSelector((state) => getNumberOfPinnedEvents(state, timelineId) From 731cfc84b60d40538630736c1587851b873160bb Mon Sep 17 00:00:00 2001 From: Julia Rechkunova Date: Wed, 8 May 2024 08:28:19 +0200 Subject: [PATCH 08/34] [Discover] Unskip data grid serverless tests (#182810) - Closes https://github.com/elastic/kibana/issues/182125 - Closes https://github.com/elastic/kibana/issues/182126 25x https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5869 --- .../test_suites/common/discover/group2/_data_grid_doc_table.ts | 3 +-- .../functional/test_suites/common/discover/group2/index.ts | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group2/_data_grid_doc_table.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group2/_data_grid_doc_table.ts index 3745b1223d615..2ca4c5f856937 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/group2/_data_grid_doc_table.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/group2/_data_grid_doc_table.ts @@ -33,8 +33,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const security = getService('security'); - // FLAKY: https://github.com/elastic/kibana/issues/182125 - describe.skip('discover data grid doc table', function describeIndexTests() { + describe('discover data grid doc table', function describeIndexTests() { before(async function () { await security.testUser.setRoles(['kibana_admin', 'test_logstash_reader']); log.debug('load kibana index with default index pattern'); diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group2/index.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group2/index.ts index be8a043327a7d..658b92845ffca 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/group2/index.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/group2/index.ts @@ -11,8 +11,7 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { const esArchiver = getService('esArchiver'); const browser = getService('browser'); - // FLAKY: https://github.com/elastic/kibana/issues/182126 - describe.skip('discover/group2', function () { + describe('discover/group2', function () { before(async function () { await browser.setWindowSize(1600, 1200); }); From 120bda4ce96268859c3971e9b43bce0fbf4617a3 Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Wed, 8 May 2024 09:16:32 +0200 Subject: [PATCH 09/34] Removes dashboard dependency from maps (#182713) ## Summary The maps plugin is the last consumer of the `allowByValueEmbeddables `. This PR removes it from the plugin. Note: The remaining part is to remove it from the dashboards plugin but I will leave it to the dashboard team to handle it as removing the `dashboard.allowByValueEmbeddables` yml setting might be considered a breaking change. --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/maps/kibana.jsonc | 1 - x-pack/plugins/maps/public/kibana_services.ts | 3 --- x-pack/plugins/maps/public/plugin.ts | 2 -- .../maps/public/routes/map_page/saved_map/saved_map.ts | 6 ++---- .../plugins/maps/public/routes/map_page/top_nav_config.tsx | 3 +-- x-pack/plugins/maps/tsconfig.json | 1 - 6 files changed, 3 insertions(+), 13 deletions(-) diff --git a/x-pack/plugins/maps/kibana.jsonc b/x-pack/plugins/maps/kibana.jsonc index fb0472100e1c2..97b8d1b9cddc2 100644 --- a/x-pack/plugins/maps/kibana.jsonc +++ b/x-pack/plugins/maps/kibana.jsonc @@ -24,7 +24,6 @@ "navigation", "expressions", "visualizations", - "dashboard", "embeddable", "mapsEms", "share", diff --git a/x-pack/plugins/maps/public/kibana_services.ts b/x-pack/plugins/maps/public/kibana_services.ts index 398ff8630f8be..6212c28c60f66 100644 --- a/x-pack/plugins/maps/public/kibana_services.ts +++ b/x-pack/plugins/maps/public/kibana_services.ts @@ -104,6 +104,3 @@ export const getEMSSettings: () => EMSSettings = () => { export const getEmsTileLayerId = () => mapsEms.config.emsTileLayerId; export const getShareService = () => pluginsStart.share; - -export const getIsAllowByValueEmbeddables = () => - pluginsStart.dashboard.dashboardFeatureFlagConfig.allowByValueEmbeddables; diff --git a/x-pack/plugins/maps/public/plugin.ts b/x-pack/plugins/maps/public/plugin.ts index 2eaabaa00aaf6..19ff39b76dd0b 100644 --- a/x-pack/plugins/maps/public/plugin.ts +++ b/x-pack/plugins/maps/public/plugin.ts @@ -10,7 +10,6 @@ import type { Setup as InspectorSetupContract } from '@kbn/inspector-plugin/publ import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; import type { Start as InspectorStartContract } from '@kbn/inspector-plugin/public'; -import type { DashboardStart } from '@kbn/dashboard-plugin/public'; import type { UsageCollectionSetup } from '@kbn/usage-collection-plugin/public'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import type { @@ -125,7 +124,6 @@ export interface MapsPluginStartDependencies { uiActions: UiActionsStart; share: SharePluginStart; visualizations: VisualizationsStart; - dashboard: DashboardStart; savedObjectsTagging?: SavedObjectTaggingPluginStart; presentationUtil: PresentationUtilPluginStart; security?: SecurityPluginStart; diff --git a/x-pack/plugins/maps/public/routes/map_page/saved_map/saved_map.ts b/x-pack/plugins/maps/public/routes/map_page/saved_map/saved_map.ts index b1118fcbf00e8..4d7273c3fd4b2 100644 --- a/x-pack/plugins/maps/public/routes/map_page/saved_map/saved_map.ts +++ b/x-pack/plugins/maps/public/routes/map_page/saved_map/saved_map.ts @@ -41,7 +41,6 @@ import { getCoreChrome, getIndexPatternService, getToasts, - getIsAllowByValueEmbeddables, getSavedObjectsTagging, getTimeFilter, getUsageCollection, @@ -386,8 +385,7 @@ export class SavedMap { public hasSaveAndReturnConfig() { const hasOriginatingApp = this.hasOriginatingApp(); - const isNewMap = !this.getSavedObjectId(); - return getIsAllowByValueEmbeddables() ? hasOriginatingApp : !isNewMap && hasOriginatingApp; + return hasOriginatingApp; } public getTitle(): string { @@ -439,7 +437,7 @@ export class SavedMap { public isByValue(): boolean { const hasSavedObjectId = !!this.getSavedObjectId(); - return getIsAllowByValueEmbeddables() && !!this._originatingApp && !hasSavedObjectId; + return !!this._originatingApp && !hasSavedObjectId; } public async save({ diff --git a/x-pack/plugins/maps/public/routes/map_page/top_nav_config.tsx b/x-pack/plugins/maps/public/routes/map_page/top_nav_config.tsx index 0aabdf877cd42..221d90ac4f2ca 100644 --- a/x-pack/plugins/maps/public/routes/map_page/top_nav_config.tsx +++ b/x-pack/plugins/maps/public/routes/map_page/top_nav_config.tsx @@ -21,7 +21,6 @@ import { ScopedHistory } from '@kbn/core/public'; import { getNavigateToApp, getMapsCapabilities, - getIsAllowByValueEmbeddables, getInspector, getCoreOverlays, getSavedObjectsTagging, @@ -215,7 +214,7 @@ export function getTopNavConfig({ let saveModal; - if (savedMap.hasOriginatingApp() || !getIsAllowByValueEmbeddables()) { + if (savedMap.hasOriginatingApp()) { saveModal = ( Date: Wed, 8 May 2024 00:54:58 -0700 Subject: [PATCH 10/34] [Fleet] Relax privileges for Integrations Settings & Config tab (#182869) ## Summary Resolves https://github.com/elastic/kibana/issues/181131. This PR enforces the following privileges: - Read access to integrations to view Integration > Settings - `writeIntegrationPolicies` and all access to integrations to make changes in Integration > Settings (including marking an integration as auto-upgrade at API level) - Read access to integrations & access to add agents to view Integrations > Config --- x-pack/plugins/fleet/common/authz.ts | 4 +-- .../sections/epm/screens/detail/index.tsx | 4 ++- .../epm/screens/detail/settings/settings.tsx | 29 ++++++++++--------- .../plugins/fleet/server/routes/epm/index.ts | 4 +-- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/x-pack/plugins/fleet/common/authz.ts b/x-pack/plugins/fleet/common/authz.ts index 8c5868616e2d4..463ab7dc90c97 100644 --- a/x-pack/plugins/fleet/common/authz.ts +++ b/x-pack/plugins/fleet/common/authz.ts @@ -158,8 +158,8 @@ export const calculateAuthz = ({ removePackages: writeIntegrationPolicies && integrations.all, uploadPackages: writeIntegrationPolicies && integrations.all, - readPackageSettings: hasFleetAll && integrations.all, - writePackageSettings: hasFleetAll && integrations.all, + readPackageSettings: integrations.read, + writePackageSettings: writeIntegrationPolicies && integrations.all, readIntegrationPolicies, writeIntegrationPolicies, diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/index.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/index.tsx index 8e594f6c8d7d9..c688da76819d4 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/index.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/index.tsx @@ -137,6 +137,7 @@ export function Detail() { const prerelease = useMemo(() => Boolean(queryParams.get('prerelease')), [queryParams]); const authz = useAuthz(); + const canAddAgent = authz.fleet.addAgents; const canInstallPackages = authz.integrations.installPackages; const canReadPackageSettings = authz.integrations.readPackageSettings; const canReadIntegrationPolicies = authz.integrations.readIntegrationPolicies; @@ -268,7 +269,8 @@ export function Detail() { useUIExtension(packageInfoData?.item?.name ?? '', 'package-detail-custom') !== undefined; // Only show config tab if package has `inputs` - const showConfigTab = packageInfo ? packageToPackagePolicyInputs(packageInfo).length > 0 : false; + const showConfigTab = + canAddAgent && (packageInfo ? packageToPackagePolicyInputs(packageInfo).length > 0 : false); // Only show API references tab if it is allowed & has documentation to show const showDocumentationTab = diff --git a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/settings/settings.tsx b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/settings/settings.tsx index 5c7d73f3e6794..aa722b5eb8d48 100644 --- a/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/settings/settings.tsx +++ b/x-pack/plugins/fleet/public/applications/integrations/sections/epm/screens/detail/settings/settings.tsx @@ -81,20 +81,21 @@ const UpdatesAvailableMsg = ({ defaultMessage: 'New version available', })} > - - - - - -

- {'View changelog.'} -

-
-
+ + + + ), + }} + /> ); diff --git a/x-pack/plugins/fleet/server/routes/epm/index.ts b/x-pack/plugins/fleet/server/routes/epm/index.ts index 7d2a756ffd6de..9108ab1df32df 100644 --- a/x-pack/plugins/fleet/server/routes/epm/index.ts +++ b/x-pack/plugins/fleet/server/routes/epm/index.ts @@ -192,7 +192,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { .put({ path: EPM_API_ROUTES.INFO_PATTERN, fleetAuthz: { - integrations: { upgradePackages: true, writePackageSettings: true }, + integrations: { writePackageSettings: true }, }, }) .addVersion( @@ -359,7 +359,7 @@ export const registerRoutes = (router: FleetAuthzRouter) => { path: EPM_API_ROUTES.INFO_PATTERN_DEPRECATED, fleetAuthz: { - integrations: { upgradePackages: true, writePackageSettings: true }, + integrations: { writePackageSettings: true }, }, }) .addVersion( diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 3096ecc47cec2..4814b1be2d6a2 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -17660,7 +17660,6 @@ "xpack.fleet.fleetServerSetupPermissionDeniedErrorMessage": "Le serveur Fleet doit être configuré. Pour cela, le privilège de cluster {roleName} est requis. Contactez votre administrateur.", "xpack.fleet.googleCloudShell.guide.description": "La commande Google Cloud Shell ci-dessous permet de créer toutes les ressources nécessaires à l'évaluation de la sécurité de vos projets GCP. En savoir plus sur {learnMore}.", "xpack.fleet.homeIntegration.tutorialModule.noticeText": "{notePrefix} Une version plus récente de ce module est {availableAsIntegrationLink}. Pour en savoir plus sur les intégrations et le nouvel agent Elastic Agent, lisez notre {blogPostLink}.", - "xpack.fleet.integration.settings.versionInfo.updatesAvailableBody": "Passez à la version {latestVersion} pour bénéficier des fonctionnalités les plus récentes.", "xpack.fleet.integrations.confirmUpdateModal.body.agentCount": "{agentCount, plural, one {# agent} other {# agents}}", "xpack.fleet.integrations.confirmUpdateModal.body.policyCount": "{packagePolicyCount, plural, one {# politique d’intégration} other {# politiques d’intégration}}", "xpack.fleet.integrations.installPackage.installingPackageButtonLabel": "Installation des ressources {title} en cours", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index ddb0f672e86a0..31af4836bd0ff 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -17637,7 +17637,6 @@ "xpack.fleet.fleetServerSetupPermissionDeniedErrorMessage": "Fleetサーバーを設定する必要があります。これには{roleName}クラスター権限が必要です。管理者にお問い合わせください。", "xpack.fleet.googleCloudShell.guide.description": "以下のGoogle Cloud Shellコマンドは、GCPプロジェクトのセキュリティ態勢を評価するために必要なすべてのリソースを作成します。{learnMore}の詳細をご覧ください。", "xpack.fleet.homeIntegration.tutorialModule.noticeText": "{notePrefix}このモジュールの新しいバージョンは{availableAsIntegrationLink}です。統合と新しいElasticエージェントの詳細については、{blogPostLink}をお読みください。", - "xpack.fleet.integration.settings.versionInfo.updatesAvailableBody": "バージョン{latestVersion}にアップグレードして最新の機能を入手してください。", "xpack.fleet.integrations.confirmUpdateModal.body.agentCount": "{agentCount, plural, other {# 個のエージェント}}", "xpack.fleet.integrations.confirmUpdateModal.body.policyCount": "{packagePolicyCount, plural, other {# 個の統合ポリシー}}", "xpack.fleet.integrations.installPackage.installingPackageButtonLabel": "{title} アセットをインストールしています", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 4049a2bfb6b91..ba71fe0550888 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -17665,7 +17665,6 @@ "xpack.fleet.fleetServerSetupPermissionDeniedErrorMessage": "需要设置 Fleet 服务器。这需要 {roleName} 集群权限。请联系您的管理员。", "xpack.fleet.googleCloudShell.guide.description": "以下 Google Cloud Shell 命令将创建所有必要资源来评估您的 GCP 组织的安全态势。详细了解 {learnMore}。", "xpack.fleet.homeIntegration.tutorialModule.noticeText": "{notePrefix} 此模块的较新版本为 {availableAsIntegrationLink}。要详细了解集成和新 Elastic 代理,请阅读我们的{blogPostLink}。", - "xpack.fleet.integration.settings.versionInfo.updatesAvailableBody": "升级到版本 {latestVersion} 可获取最新功能。", "xpack.fleet.integrations.confirmUpdateModal.body.agentCount": "{agentCount, plural, other {# 个代理}}", "xpack.fleet.integrations.confirmUpdateModal.body.policyCount": "{packagePolicyCount, plural, other {# 个集成策略}}", "xpack.fleet.integrations.installPackage.installingPackageButtonLabel": "正在安装 {title} 资产", From f5854558d3b8511e43a80d99df592be3d7fa0641 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Marcondes?= <55978943+cauemarcondes@users.noreply.github.com> Date: Wed, 8 May 2024 09:31:09 +0100 Subject: [PATCH 11/34] [Logs] Adding data access plugin (#181823) closes https://github.com/elastic/kibana/issues/181813 - Adds new logs_data_access plugin - Adds Logs rates services that returns: ``` [serviceName]: { logRate: number | null; logErrorRate: number | null; } ``` --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .github/CODEOWNERS | 1 + docs/developer/plugin-list.asciidoc | 4 + package.json | 1 + .../src/scenarios/traces_logs_assets.ts | 48 ++++++-- tsconfig.base.json | 2 + .../logs_data_access/README.md | 5 + .../logs_data_access/jest.config.js | 14 +++ .../logs_data_access/kibana.jsonc | 16 +++ .../logs_data_access/server/index.ts | 15 +++ .../logs_data_access/server/plugin.ts | 47 ++++++++ .../services/get_logs_rates_service/index.ts | 104 ++++++++++++++++++ .../get_logs_rates_service/utils.test.ts | 39 +++++++ .../services/get_logs_rates_service/utils.ts | 29 +++++ .../server/services/register_services.ts | 20 ++++ .../logs_data_access/server/types.ts | 20 ++++ .../logs_data_access/tsconfig.json | 14 +++ yarn.lock | 4 + 17 files changed, 373 insertions(+), 10 deletions(-) create mode 100644 x-pack/plugins/observability_solution/logs_data_access/README.md create mode 100644 x-pack/plugins/observability_solution/logs_data_access/jest.config.js create mode 100644 x-pack/plugins/observability_solution/logs_data_access/kibana.jsonc create mode 100644 x-pack/plugins/observability_solution/logs_data_access/server/index.ts create mode 100644 x-pack/plugins/observability_solution/logs_data_access/server/plugin.ts create mode 100644 x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/index.ts create mode 100644 x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/utils.test.ts create mode 100644 x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/utils.ts create mode 100644 x-pack/plugins/observability_solution/logs_data_access/server/services/register_services.ts create mode 100644 x-pack/plugins/observability_solution/logs_data_access/server/types.ts create mode 100644 x-pack/plugins/observability_solution/logs_data_access/tsconfig.json diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cdf47d35f9ceb..7ce67b0e5d954 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -532,6 +532,7 @@ examples/locator_examples @elastic/appex-sharedux examples/locator_explorer @elastic/appex-sharedux packages/kbn-logging @elastic/kibana-core packages/kbn-logging-mocks @elastic/kibana-core +x-pack/plugins/observability_solution/logs_data_access @elastic/obs-ux-logs-team x-pack/plugins/observability_solution/logs_explorer @elastic/obs-ux-logs-team x-pack/plugins/observability_solution/logs_shared @elastic/obs-ux-logs-team x-pack/plugins/logstash @elastic/logstash diff --git a/docs/developer/plugin-list.asciidoc b/docs/developer/plugin-list.asciidoc index b5a11cf016bc7..f6653998374a1 100644 --- a/docs/developer/plugin-list.asciidoc +++ b/docs/developer/plugin-list.asciidoc @@ -651,6 +651,10 @@ the infrastructure monitoring use-case within Kibana. using the CURL scripts in the scripts folder. +|{kib-repo}blob/{branch}/x-pack/plugins/observability_solution/logs_data_access/README.md[logsDataAccess] +|Exposes services to access logs data. + + |{kib-repo}blob/{branch}/x-pack/plugins/observability_solution/logs_explorer/README.md[logsExplorer] |This plugin is home to the component and related types. It implements several of the underlying concepts that the Observability Logs Explorer app builds upon. diff --git a/package.json b/package.json index 30095b1c5d591..6e385a82a6a8b 100644 --- a/package.json +++ b/package.json @@ -558,6 +558,7 @@ "@kbn/locator-explorer-plugin": "link:examples/locator_explorer", "@kbn/logging": "link:packages/kbn-logging", "@kbn/logging-mocks": "link:packages/kbn-logging-mocks", + "@kbn/logs-data-access-plugin": "link:x-pack/plugins/observability_solution/logs_data_access", "@kbn/logs-explorer-plugin": "link:x-pack/plugins/observability_solution/logs_explorer", "@kbn/logs-shared-plugin": "link:x-pack/plugins/observability_solution/logs_shared", "@kbn/logstash-plugin": "link:x-pack/plugins/logstash", diff --git a/packages/kbn-apm-synthtrace/src/scenarios/traces_logs_assets.ts b/packages/kbn-apm-synthtrace/src/scenarios/traces_logs_assets.ts index afdec115f5b9e..187be94f62e36 100644 --- a/packages/kbn-apm-synthtrace/src/scenarios/traces_logs_assets.ts +++ b/packages/kbn-apm-synthtrace/src/scenarios/traces_logs_assets.ts @@ -10,6 +10,7 @@ import { ApmFields, generateLongId, generateShortId, + infra, Instance, log, Serializable, @@ -23,16 +24,37 @@ const ENVIRONMENT = getSynthtraceEnvironment(__filename); const scenario: Scenario = async (runOptions) => { const { logger } = runOptions; - const { numServices = 3 } = runOptions.scenarioOpts || {}; + const { numServices = 3, numHosts = 10 } = runOptions.scenarioOpts || {}; return { - generate: ({ range, clients: { apmEsClient, assetsEsClient, logsEsClient } }) => { + generate: ({ + range, + clients: { apmEsClient, assetsEsClient, logsEsClient, infraEsClient }, + }) => { const transactionName = '240rpm/75% 1000ms'; const successfulTimestamps = range.interval('1m').rate(1); const failedTimestamps = range.interval('1m').rate(1); const serviceNames = [...Array(numServices).keys()].map((index) => `synth-node-${index}`); + const HOSTS = Array(numHosts) + .fill(0) + .map((_, idx) => infra.host(`my-host-${idx}`)); + + const hosts = range + .interval('30s') + .rate(1) + .generator((timestamp) => + HOSTS.flatMap((host) => [ + host.cpu().timestamp(timestamp), + host.memory().timestamp(timestamp), + host.network().timestamp(timestamp), + host.load().timestamp(timestamp), + host.filesystem().timestamp(timestamp), + host.diskio().timestamp(timestamp), + ]) + ); + const instances = serviceNames.map((serviceName) => apm .service({ name: serviceName, environment: ENVIRONMENT, agentName: 'nodejs' }) @@ -97,6 +119,12 @@ const scenario: Scenario = async (runOptions) => { return [...successfulTraceEvents, ...failedTraceEvents, ...metricsets]; }; + const MESSAGE_LOG_LEVELS = [ + { message: 'A simple log with something random in the middle', level: 'info' }, + { message: 'Yet another debug log', level: 'debug' }, + { message: 'Error with certificate: "ca_trusted_fingerprint"', level: 'error' }, + ]; + const logsWithTraces = range .interval('1m') .rate(1) @@ -104,10 +132,8 @@ const scenario: Scenario = async (runOptions) => { return Array(3) .fill(0) .map(() => { - const { message, level } = { - message: 'A simple log with something random in the middle', - level: 'info', - }; + const index = Math.floor(Math.random() * 3); + const { message, level } = MESSAGE_LOG_LEVELS[index]; const CLUSTER = { clusterId: generateShortId(), clusterName: 'synth-cluster-2', @@ -145,10 +171,8 @@ const scenario: Scenario = async (runOptions) => { return Array(3) .fill(0) .map(() => { - const { message, level } = { - message: 'A simple log with something random in the middle', - level: 'info', - }; + const index = Math.floor(Math.random() * 3); + const { message, level } = MESSAGE_LOG_LEVELS[index]; const CLUSTER = { clusterId: generateShortId(), clusterName: 'synth-cluster-2', @@ -206,6 +230,10 @@ const scenario: Scenario = async (runOptions) => { apmEsClient, logger.perf('generating_apm_events', () => tracesGen) ), + withClient( + infraEsClient, + logger.perf('generating_infra_hosts', () => hosts) + ), ]; }, }; diff --git a/tsconfig.base.json b/tsconfig.base.json index 9dddb7c5d67d5..c034da408f82f 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1058,6 +1058,8 @@ "@kbn/logging/*": ["packages/kbn-logging/*"], "@kbn/logging-mocks": ["packages/kbn-logging-mocks"], "@kbn/logging-mocks/*": ["packages/kbn-logging-mocks/*"], + "@kbn/logs-data-access-plugin": ["x-pack/plugins/observability_solution/logs_data_access"], + "@kbn/logs-data-access-plugin/*": ["x-pack/plugins/observability_solution/logs_data_access/*"], "@kbn/logs-explorer-plugin": ["x-pack/plugins/observability_solution/logs_explorer"], "@kbn/logs-explorer-plugin/*": ["x-pack/plugins/observability_solution/logs_explorer/*"], "@kbn/logs-shared-plugin": ["x-pack/plugins/observability_solution/logs_shared"], diff --git a/x-pack/plugins/observability_solution/logs_data_access/README.md b/x-pack/plugins/observability_solution/logs_data_access/README.md new file mode 100644 index 0000000000000..a1b0505cb5934 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_data_access/README.md @@ -0,0 +1,5 @@ +# Logs data access + +Exposes services to access logs data. + +Services are registered during plugin [start](./server/plugin.ts) phase and defined in the [services](./server/services/) folder. diff --git a/x-pack/plugins/observability_solution/logs_data_access/jest.config.js b/x-pack/plugins/observability_solution/logs_data_access/jest.config.js new file mode 100644 index 0000000000000..08c16628e15ca --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_data_access/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; 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/logs_data_access'], +}; diff --git a/x-pack/plugins/observability_solution/logs_data_access/kibana.jsonc b/x-pack/plugins/observability_solution/logs_data_access/kibana.jsonc new file mode 100644 index 0000000000000..0636aac3e5c96 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_data_access/kibana.jsonc @@ -0,0 +1,16 @@ +{ + "type": "plugin", + "id": "@kbn/logs-data-access-plugin", + "owner": "@elastic/obs-ux-logs-team", + "plugin": { + "id": "logsDataAccess", + "server": true, + "browser": false, + "requiredPlugins": [ + "data", + "dataViews" + ], + "optionalPlugins": [], + "requiredBundles": [] + } +} diff --git a/x-pack/plugins/observability_solution/logs_data_access/server/index.ts b/x-pack/plugins/observability_solution/logs_data_access/server/index.ts new file mode 100644 index 0000000000000..ee394c191c276 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_data_access/server/index.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 type { PluginInitializerContext } from '@kbn/core/server'; +import type { LogsDataAccessPluginSetup, LogsDataAccessPluginStart } from './plugin'; + +export type { LogsDataAccessPluginSetup, LogsDataAccessPluginStart }; + +export async function plugin(initializerContext: PluginInitializerContext) { + const { LogsDataAccessPlugin } = await import('./plugin'); + return new LogsDataAccessPlugin(initializerContext); +} diff --git a/x-pack/plugins/observability_solution/logs_data_access/server/plugin.ts b/x-pack/plugins/observability_solution/logs_data_access/server/plugin.ts new file mode 100644 index 0000000000000..13977e869b233 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_data_access/server/plugin.ts @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { + CoreSetup, + CoreStart, + Logger, + Plugin, + PluginInitializerContext, +} from '@kbn/core/server'; +import { registerServices } from './services/register_services'; +import { LogsDataAccessPluginStartDeps, LogsDataAccessPluginSetupDeps } from './types'; + +export type LogsDataAccessPluginSetup = ReturnType; +export type LogsDataAccessPluginStart = ReturnType; + +export class LogsDataAccessPlugin + implements + Plugin< + LogsDataAccessPluginSetup, + LogsDataAccessPluginStart, + LogsDataAccessPluginSetupDeps, + LogsDataAccessPluginStartDeps + > +{ + private readonly logger: Logger; + + constructor(initializerContext: PluginInitializerContext) { + this.logger = initializerContext.logger.get(); + } + public setup(core: CoreSetup, plugins: LogsDataAccessPluginSetupDeps) {} + + public start(core: CoreStart, plugins: LogsDataAccessPluginStartDeps) { + const services = registerServices({ + logger: this.logger, + deps: {}, + }); + + return { + services, + }; + } +} diff --git a/x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/index.ts b/x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/index.ts new file mode 100644 index 0000000000000..1634270309689 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/index.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 { ElasticsearchClient } from '@kbn/core/server'; +import { estypes } from '@elastic/elasticsearch'; +import { RegisterServicesParams } from '../register_services'; +import { getLogErrorRate, getLogRatePerMinute } from './utils'; + +export interface LogsRatesServiceParams { + esClient: ElasticsearchClient; + serviceNames: string[]; + identifyingMetadata: string; + timeFrom: number; + timeTo: number; +} + +interface LogErrorsAggregation extends estypes.AggregationsStringRareTermsBucketKeys { + logErrors: estypes.AggregationsTermsAggregateBase; +} + +interface LogRateQueryAggregation { + services: estypes.AggregationsTermsAggregateBase; +} + +export interface LogsRatesServiceReturnType { + [serviceName: string]: { + logRatePerMinute: number; + logErrorRate: null | number; + }; +} + +export function createGetLogsRatesService(params: RegisterServicesParams) { + return async ({ + esClient, + identifyingMetadata, + serviceNames, + timeFrom, + timeTo, + }: LogsRatesServiceParams): Promise => { + const esResponse = await esClient.search({ + index: 'logs-*-*', + size: 0, + query: { + bool: { + filter: [ + { + terms: { + [identifyingMetadata]: serviceNames, + }, + }, + { + range: { + ['@timestamp']: { + gte: timeFrom, + lte: timeTo, + format: 'epoch_millis', + }, + }, + }, + ], + }, + }, + aggs: { + services: { + terms: { + field: identifyingMetadata, + }, + aggs: { + logErrors: { + terms: { + field: 'log.level', + include: ['error', 'ERROR'], + }, + }, + }, + }, + }, + }); + const aggregations = esResponse.aggregations as LogRateQueryAggregation | undefined; + const buckets = aggregations?.services.buckets as LogErrorsAggregation[] | undefined; + + return buckets + ? buckets.reduce((acc, bucket) => { + const logCount = bucket.doc_count; + const logErrorBuckets = bucket.logErrors + .buckets as estypes.AggregationsStringRareTermsBucketKeys[]; + + const logErrorCount = logErrorBuckets[0]?.doc_count; + + return { + ...acc, + [bucket.key]: { + logRatePerMinute: getLogRatePerMinute({ logCount, timeFrom, timeTo }), + logErrorRate: logErrorCount ? getLogErrorRate({ logCount, logErrorCount }) : null, + }, + }; + }, {}) + : {}; + }; +} diff --git a/x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/utils.test.ts b/x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/utils.test.ts new file mode 100644 index 0000000000000..e1fbd84e7177b --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/utils.test.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { getLogRatePerMinute, getLogErrorRate } from './utils'; + +describe('getLogRatePerMinute', () => { + it('should log rate per minute for one minute period', () => { + expect(getLogRatePerMinute({ logCount: 60, timeFrom: 0, timeTo: 60000 })).toBe(60); + }); + + it('should log rate per minute for five minutes period', () => { + expect(getLogRatePerMinute({ logCount: 60, timeFrom: 0, timeTo: 300000 })).toBe(12); + }); + + it('should handle zero log count', () => { + expect(getLogRatePerMinute({ logCount: 0, timeFrom: 0, timeTo: 60000 })).toBe(0); + }); +}); + +describe('getLogErrorRate', () => { + it('should return the correct log error rate', () => { + expect(getLogErrorRate({ logCount: 100, logErrorCount: 10 })).toBe(0.1); + }); + + it('should handle zero error count', () => { + expect(getLogErrorRate({ logCount: 100, logErrorCount: 0 })).toBe(0); + }); + + it('should handle no error count provided', () => { + expect(getLogErrorRate({ logCount: 100 })).toBe(0); + }); + + it('should handle error count exceeding log count', () => { + expect(getLogErrorRate({ logCount: 100, logErrorCount: 150 })).toBe(1.5); + }); +}); diff --git a/x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/utils.ts b/x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/utils.ts new file mode 100644 index 0000000000000..c56f7114999ad --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_data_access/server/services/get_logs_rates_service/utils.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export function getLogRatePerMinute({ + logCount, + timeFrom, + timeTo, +}: { + logCount: number; + timeFrom: number; + timeTo: number; +}) { + const durationAsMinutes = (timeTo - timeFrom) / 1000 / 60; + return logCount / durationAsMinutes; +} + +export function getLogErrorRate({ + logCount, + logErrorCount = 0, +}: { + logCount: number; + logErrorCount?: number; +}) { + return logErrorCount / logCount; +} diff --git a/x-pack/plugins/observability_solution/logs_data_access/server/services/register_services.ts b/x-pack/plugins/observability_solution/logs_data_access/server/services/register_services.ts new file mode 100644 index 0000000000000..c35b30783b5f4 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_data_access/server/services/register_services.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 { Logger } from '@kbn/logging'; +import { createGetLogsRatesService } from './get_logs_rates_service'; + +export interface RegisterServicesParams { + logger: Logger; + deps: {}; +} + +export function registerServices(params: RegisterServicesParams) { + return { + getLogsRatesService: createGetLogsRatesService(params), + }; +} diff --git a/x-pack/plugins/observability_solution/logs_data_access/server/types.ts b/x-pack/plugins/observability_solution/logs_data_access/server/types.ts new file mode 100644 index 0000000000000..12346d6ab7f57 --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_data_access/server/types.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 { + PluginSetup as DataPluginSetup, + PluginStart as DataPluginStart, +} from '@kbn/data-plugin/server'; +import { PluginStart as DataViewsPluginStart } from '@kbn/data-views-plugin/server'; + +export interface LogsDataAccessPluginSetupDeps { + data: DataPluginSetup; +} + +export interface LogsDataAccessPluginStartDeps { + data: DataPluginStart; + dataViews: DataViewsPluginStart; +} diff --git a/x-pack/plugins/observability_solution/logs_data_access/tsconfig.json b/x-pack/plugins/observability_solution/logs_data_access/tsconfig.json new file mode 100644 index 0000000000000..9bd4031c7a39e --- /dev/null +++ b/x-pack/plugins/observability_solution/logs_data_access/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": ["common/**/*", "server/**/*", "jest.config.js"], + "exclude": ["target/**/*"], + "kbn_references": [ + "@kbn/core", + "@kbn/logging", + "@kbn/data-plugin", + "@kbn/data-views-plugin", + ] +} diff --git a/yarn.lock b/yarn.lock index 17e5466fc27db..ba830c1cdb1b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5166,6 +5166,10 @@ version "0.0.0" uid "" +"@kbn/logs-data-access-plugin@link:x-pack/plugins/observability_solution/logs_data_access": + version "0.0.0" + uid "" + "@kbn/logs-explorer-plugin@link:x-pack/plugins/observability_solution/logs_explorer": version "0.0.0" uid "" From 1798e7b7abdfa9ec505184650eeefa06c0939638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Louv-Jansen?= Date: Wed, 8 May 2024 10:38:20 +0200 Subject: [PATCH 12/34] Add Observability AI Assistant test suites to CODEOWNERS file (#182716) This adds the Obs AI Assistant team as code owners for the api and functional tests related to Obs AI Assistant --- .github/CODEOWNERS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7ce67b0e5d954..de091b2a82ede 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1029,6 +1029,10 @@ packages/kbn-monaco/src/esql @elastic/kibana-esql ### Observability Plugins +# Observability AI Assistant +x-pack/test/observability_ai_assistant_api_integration @elastic/obs-ai-assistant +x-pack/test/observability_ai_assistant_functional @elastic/obs-ai-assistant + # Infra Monitoring ## This plugin mostly contains the codebase for the infra services, but also includes some code for the Logs UI app. ## To keep @elastic/obs-ux-logs-team as codeowner of the plugin manifest without requiring a review for all the other code changes From 25098d9a72f97a7a35b44df3af4c323279c8bda5 Mon Sep 17 00:00:00 2001 From: elena-shostak <165678770+elena-shostak@users.noreply.github.com> Date: Wed, 8 May 2024 10:52:35 +0200 Subject: [PATCH 13/34] [Roles] Support for remote_cluster field in ES role definition (#182377) ## Summary Added support for `remote_cluster` field in ES role definition. The change is needed for running queries with `ENRICH` keyword that are sent over CCS. - Updated GET and PUT APIs, documentation and corresponding data models. - Added UI section to support the new API features. - Extracted remote clusters ComboBox to a separate component [RemoteClusterComboBox](https://github.com/elastic/kibana/pull/182377/files#diff-6b3189b6d802fd2196bcc445dc5c6021af70cf165fe3f8c4d4a5e6a4df651309R22) to share it between the remote clusters and remote index privilege views. https://github.com/elastic/kibana/assets/165678770/d3cf8b9c-e83d-4ace-ba2e-f8e028977f2d ### 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 - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed ([Report](https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5855)) - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [x] This renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) ### For maintainers - [x] This was checked for breaking API changes and was [labeled appropriately](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) __Fixes: https://github.com/elastic/kibana/issues/182035__ ## Release note Added support for `remote_cluster` field in ES role definition. --- docs/api/role-management/put.asciidoc | 8 +- .../security/plugin_types_common/index.ts | 1 + .../src/authorization/index.ts | 1 + .../src/authorization/role.ts | 6 + .../src/licensing/license_features.ts | 5 + .../src/authorization/role_schema.ts | 13 ++ x-pack/plugins/security/common/index.ts | 1 + .../common/licensing/license_service.test.ts | 9 + .../common/licensing/license_service.ts | 3 + .../common/model/builtin_es_privileges.ts | 1 + .../role_mappings/role_mappings_api_client.ts | 1 + .../roles/edit_role/edit_role_page.tsx | 5 +- .../elasticsearch_privileges.test.tsx.snap | 4 + .../index_privileges.test.tsx.snap | 1 + .../remote_cluster_privileges.test.tsx.snap | 52 +++++ ...mote_cluster_privileges_form.test.tsx.snap | 116 +++++++++++ .../remote_clusters_combo_box.test.tsx.snap | 146 ++++++++++++++ .../privileges/es/cluster_privileges.test.tsx | 3 + .../es/elasticsearch_privileges.test.tsx | 17 +- .../es/elasticsearch_privileges.tsx | 37 ++++ .../es/index_privilege_form.test.tsx | 64 ------ .../privileges/es/index_privilege_form.tsx | 46 +---- .../privileges/es/index_privileges.test.tsx | 4 + .../es/remote_cluster_privileges.test.tsx | 175 +++++++++++++++++ .../es/remote_cluster_privileges.tsx | 147 ++++++++++++++ .../remote_cluster_privileges_form.test.tsx | 182 ++++++++++++++++++ .../es/remote_cluster_privileges_form.tsx | 170 ++++++++++++++++ .../es/remote_clusters_combo_box.test.tsx | 106 ++++++++++ .../es/remote_clusters_combo_box.tsx | 87 +++++++++ .../roles/edit_role/validate_role.ts | 85 +++++++- .../roles/elasticsearch_role.test.ts | 11 ++ .../authorization/roles/elasticsearch_role.ts | 2 + .../privilege_deprecations.test.ts | 2 + .../authorization/privileges/get_builtin.ts | 5 +- .../roles/model/put_payload.test.ts | 82 +++++++- .../authorization/roles/model/put_payload.ts | 2 + .../routes/authorization/roles/put.test.ts | 55 ++++++ .../routes/role_mapping/feature_check.test.ts | 7 + .../routes/role_mapping/feature_check.ts | 3 +- .../server/routes/views/login.test.ts | 1 + .../apis/security/builtin_es_privileges.ts | 2 +- x-pack/test/functional/apps/security/index.ts | 1 + .../security/remote_cluster_security_roles.ts | 90 +++++++++ .../functional/page_objects/security_page.ts | 65 ++++++- 44 files changed, 1694 insertions(+), 130 deletions(-) create mode 100644 x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_cluster_privileges.test.tsx.snap create mode 100644 x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_cluster_privileges_form.test.tsx.snap create mode 100644 x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_clusters_combo_box.test.tsx.snap create mode 100644 x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges.test.tsx create mode 100644 x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges.tsx create mode 100644 x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges_form.test.tsx create mode 100644 x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges_form.tsx create mode 100644 x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_clusters_combo_box.test.tsx create mode 100644 x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_clusters_combo_box.tsx create mode 100644 x-pack/test/functional/apps/security/remote_cluster_security_roles.ts diff --git a/docs/api/role-management/put.asciidoc b/docs/api/role-management/put.asciidoc index 5061276078295..ce293f75b63ae 100644 --- a/docs/api/role-management/put.asciidoc +++ b/docs/api/role-management/put.asciidoc @@ -26,7 +26,7 @@ To use the create or update role API, you must have the `manage_security` cluste `elasticsearch`:: (Optional, object) {es} cluster and index privileges. Valid keys include - `cluster`, `indices`, `remote_indices`, and `run_as`. For more information, see + `cluster`, `indices`, `remote_indices`, `remote_cluster`, and `run_as`. For more information, see {ref}/defining-roles.html[Defining roles]. `kibana`:: @@ -210,6 +210,12 @@ $ curl -X PUT api/security/role/my_kibana_role "names": [ "remote_index1", "remote_index2" ], "privileges": [ "all" ] } + ], + "remote_cluster": [ + { + "clusters": [ "remote_cluster1" ], + "privileges": [ "monitor_enrich" ] + } ] }, "kibana": [ diff --git a/x-pack/packages/security/plugin_types_common/index.ts b/x-pack/packages/security/plugin_types_common/index.ts index c5771f6982807..9d4d690e524a0 100644 --- a/x-pack/packages/security/plugin_types_common/index.ts +++ b/x-pack/packages/security/plugin_types_common/index.ts @@ -16,6 +16,7 @@ export type { RoleIndexPrivilege, RoleKibanaPrivilege, RoleRemoteIndexPrivilege, + RoleRemoteClusterPrivilege, FeaturesPrivileges, } from './src/authorization'; export type { SecurityLicense, SecurityLicenseFeatures, LoginLayout } from './src/licensing'; diff --git a/x-pack/packages/security/plugin_types_common/src/authorization/index.ts b/x-pack/packages/security/plugin_types_common/src/authorization/index.ts index 29cb395ccfe4f..89857a18865af 100644 --- a/x-pack/packages/security/plugin_types_common/src/authorization/index.ts +++ b/x-pack/packages/security/plugin_types_common/src/authorization/index.ts @@ -11,4 +11,5 @@ export type { RoleKibanaPrivilege, RoleIndexPrivilege, RoleRemoteIndexPrivilege, + RoleRemoteClusterPrivilege, } from './role'; diff --git a/x-pack/packages/security/plugin_types_common/src/authorization/role.ts b/x-pack/packages/security/plugin_types_common/src/authorization/role.ts index cce0b811c5875..3a20b64d4d06c 100644 --- a/x-pack/packages/security/plugin_types_common/src/authorization/role.ts +++ b/x-pack/packages/security/plugin_types_common/src/authorization/role.ts @@ -28,11 +28,17 @@ export interface RoleKibanaPrivilege { _reserved?: string[]; } +export interface RoleRemoteClusterPrivilege { + clusters: string[]; + privileges: string[]; +} + export interface Role { name: string; description?: string; elasticsearch: { cluster: string[]; + remote_cluster?: RoleRemoteClusterPrivilege[]; indices: RoleIndexPrivilege[]; remote_indices?: RoleRemoteIndexPrivilege[]; run_as: string[]; diff --git a/x-pack/packages/security/plugin_types_common/src/licensing/license_features.ts b/x-pack/packages/security/plugin_types_common/src/licensing/license_features.ts index c5f05c83c8e48..58fb081a5760d 100644 --- a/x-pack/packages/security/plugin_types_common/src/licensing/license_features.ts +++ b/x-pack/packages/security/plugin_types_common/src/licensing/license_features.ts @@ -59,6 +59,11 @@ export interface SecurityLicenseFeatures { */ readonly allowRoleRemoteIndexPrivileges: boolean; + /** + * Indicates whether we allow users to define remote cluster privileges in roles. + */ + readonly allowRemoteClusterPrivileges: boolean; + /** * Indicates whether we allow Role-based access control (RBAC). */ diff --git a/x-pack/packages/security/plugin_types_server/src/authorization/role_schema.ts b/x-pack/packages/security/plugin_types_server/src/authorization/role_schema.ts index ea7f896927905..3d673fa25dc5f 100644 --- a/x-pack/packages/security/plugin_types_server/src/authorization/role_schema.ts +++ b/x-pack/packages/security/plugin_types_server/src/authorization/role_schema.ts @@ -22,6 +22,19 @@ export const elasticsearchRoleSchema = schema.object({ */ cluster: schema.maybe(schema.arrayOf(schema.string())), + /** + * An optional list of remote cluster privileges. These privileges define the remote cluster level actions that + * users with this role are able to execute + */ + remote_cluster: schema.maybe( + schema.arrayOf( + schema.object({ + privileges: schema.arrayOf(schema.string(), { minSize: 1 }), + clusters: schema.arrayOf(schema.string(), { minSize: 1 }), + }) + ) + ), + /** * An optional list of indices permissions entries. */ diff --git a/x-pack/plugins/security/common/index.ts b/x-pack/plugins/security/common/index.ts index de3e6e8cac0ca..1a767f778fb7a 100644 --- a/x-pack/plugins/security/common/index.ts +++ b/x-pack/plugins/security/common/index.ts @@ -31,6 +31,7 @@ export type { RoleIndexPrivilege, RoleKibanaPrivilege, RoleRemoteIndexPrivilege, + RoleRemoteClusterPrivilege, FeaturesPrivileges, LoginLayout, SecurityLicenseFeatures, diff --git a/x-pack/plugins/security/common/licensing/license_service.test.ts b/x-pack/plugins/security/common/licensing/license_service.test.ts index 8bf9f4a030051..f1b80db5cba2d 100644 --- a/x-pack/plugins/security/common/licensing/license_service.test.ts +++ b/x-pack/plugins/security/common/licensing/license_service.test.ts @@ -26,6 +26,7 @@ describe('license features', function () { allowRoleDocumentLevelSecurity: false, allowRoleFieldLevelSecurity: false, allowRoleRemoteIndexPrivileges: false, + allowRemoteClusterPrivileges: false, layout: 'error-es-unavailable', allowRbac: false, allowSubFeaturePrivileges: false, @@ -50,6 +51,7 @@ describe('license features', function () { allowRoleDocumentLevelSecurity: false, allowRoleFieldLevelSecurity: false, allowRoleRemoteIndexPrivileges: false, + allowRemoteClusterPrivileges: false, layout: 'error-xpack-unavailable', allowRbac: false, allowSubFeaturePrivileges: false, @@ -78,6 +80,7 @@ describe('license features', function () { "allowAuditLogging": false, "allowLogin": false, "allowRbac": false, + "allowRemoteClusterPrivileges": false, "allowRoleDocumentLevelSecurity": false, "allowRoleFieldLevelSecurity": false, "allowRoleRemoteIndexPrivileges": false, @@ -101,6 +104,7 @@ describe('license features', function () { "allowAuditLogging": true, "allowLogin": true, "allowRbac": true, + "allowRemoteClusterPrivileges": true, "allowRoleDocumentLevelSecurity": true, "allowRoleFieldLevelSecurity": true, "allowRoleRemoteIndexPrivileges": true, @@ -137,6 +141,7 @@ describe('license features', function () { allowRoleDocumentLevelSecurity: false, allowRoleFieldLevelSecurity: false, allowRoleRemoteIndexPrivileges: false, + allowRemoteClusterPrivileges: false, allowRbac: true, allowSubFeaturePrivileges: false, allowAuditLogging: false, @@ -164,6 +169,7 @@ describe('license features', function () { allowRoleDocumentLevelSecurity: false, allowRoleFieldLevelSecurity: false, allowRoleRemoteIndexPrivileges: false, + allowRemoteClusterPrivileges: false, allowRbac: false, allowSubFeaturePrivileges: false, allowAuditLogging: false, @@ -190,6 +196,7 @@ describe('license features', function () { allowRoleDocumentLevelSecurity: false, allowRoleFieldLevelSecurity: false, allowRoleRemoteIndexPrivileges: false, + allowRemoteClusterPrivileges: false, allowRbac: true, allowSubFeaturePrivileges: false, allowAuditLogging: false, @@ -216,6 +223,7 @@ describe('license features', function () { allowRoleDocumentLevelSecurity: false, allowRoleFieldLevelSecurity: false, allowRoleRemoteIndexPrivileges: false, + allowRemoteClusterPrivileges: false, allowRbac: true, allowSubFeaturePrivileges: true, allowAuditLogging: true, @@ -242,6 +250,7 @@ describe('license features', function () { allowRoleDocumentLevelSecurity: true, allowRoleFieldLevelSecurity: true, allowRoleRemoteIndexPrivileges: true, + allowRemoteClusterPrivileges: true, allowRbac: true, allowSubFeaturePrivileges: true, allowAuditLogging: true, diff --git a/x-pack/plugins/security/common/licensing/license_service.ts b/x-pack/plugins/security/common/licensing/license_service.ts index 70b84e1712e08..3066d32a72695 100644 --- a/x-pack/plugins/security/common/licensing/license_service.ts +++ b/x-pack/plugins/security/common/licensing/license_service.ts @@ -77,6 +77,7 @@ export class SecurityLicenseService { allowRoleDocumentLevelSecurity: false, allowRoleFieldLevelSecurity: false, allowRoleRemoteIndexPrivileges: false, + allowRemoteClusterPrivileges: false, allowRbac: false, allowSubFeaturePrivileges: false, allowUserProfileCollaboration: false, @@ -98,6 +99,7 @@ export class SecurityLicenseService { allowRoleDocumentLevelSecurity: false, allowRoleFieldLevelSecurity: false, allowRoleRemoteIndexPrivileges: false, + allowRemoteClusterPrivileges: false, allowRbac: false, allowSubFeaturePrivileges: false, allowUserProfileCollaboration: false, @@ -119,6 +121,7 @@ export class SecurityLicenseService { allowRoleDocumentLevelSecurity: isLicensePlatinumOrBetter, allowRoleFieldLevelSecurity: isLicensePlatinumOrBetter, allowRoleRemoteIndexPrivileges: isLicensePlatinumOrBetter, + allowRemoteClusterPrivileges: isLicensePlatinumOrBetter, allowRbac: true, allowUserProfileCollaboration: isLicenseStandardOrBetter, }; diff --git a/x-pack/plugins/security/common/model/builtin_es_privileges.ts b/x-pack/plugins/security/common/model/builtin_es_privileges.ts index b6b5791a4477d..c2b6801e52961 100644 --- a/x-pack/plugins/security/common/model/builtin_es_privileges.ts +++ b/x-pack/plugins/security/common/model/builtin_es_privileges.ts @@ -8,4 +8,5 @@ export interface BuiltinESPrivileges { cluster: string[]; index: string[]; + remote_cluster: string[]; } diff --git a/x-pack/plugins/security/public/management/role_mappings/role_mappings_api_client.ts b/x-pack/plugins/security/public/management/role_mappings/role_mappings_api_client.ts index bab0222222dec..c2b1f08d90319 100644 --- a/x-pack/plugins/security/public/management/role_mappings/role_mappings_api_client.ts +++ b/x-pack/plugins/security/public/management/role_mappings/role_mappings_api_client.ts @@ -15,6 +15,7 @@ export interface CheckRoleMappingFeaturesResponse { canUseStoredScripts: boolean; hasCompatibleRealms: boolean; canUseRemoteIndices: boolean; + canUseRemoteClusters: boolean; } type DeleteRoleMappingsResponse = Array<{ diff --git a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx index 745cb2d68ab07..56fb561443e82 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx @@ -211,7 +211,7 @@ function useRole( ? rolesAPIClient.getRole(roleName) : Promise.resolve({ name: '', - elasticsearch: { cluster: [], indices: [], run_as: [] }, + elasticsearch: { cluster: [], indices: [], run_as: [], remote_cluster: [] }, kibana: [], _unrecognized_applications: [], } as Role); @@ -529,6 +529,9 @@ export const EditRolePage: FunctionComponent = ({ canUseRemoteIndices={ buildFlavor === 'traditional' && featureCheckState.value?.canUseRemoteIndices } + canUseRemoteClusters={ + buildFlavor === 'traditional' && featureCheckState.value?.canUseRemoteClusters + } isDarkMode={isDarkMode} buildFlavor={buildFlavor} /> diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/elasticsearch_privileges.test.tsx.snap b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/elasticsearch_privileges.test.tsx.snap index 6bd0c97b5e8ac..7732ac20b4ee9 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/elasticsearch_privileges.test.tsx.snap +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/elasticsearch_privileges.test.tsx.snap @@ -59,6 +59,7 @@ exports[`it renders correctly in serverless mode 1`] = ` "elasticsearch": Object { "cluster": Array [], "indices": Array [], + "remote_cluster": Array [], "run_as": Array [], }, "kibana": Array [], @@ -141,6 +142,7 @@ exports[`it renders correctly in serverless mode 1`] = ` "elasticsearch": Object { "cluster": Array [], "indices": Array [], + "remote_cluster": Array [], "run_as": Array [], }, "kibana": Array [], @@ -215,6 +217,7 @@ exports[`it renders without crashing 1`] = ` "elasticsearch": Object { "cluster": Array [], "indices": Array [], + "remote_cluster": Array [], "run_as": Array [], }, "kibana": Array [], @@ -346,6 +349,7 @@ exports[`it renders without crashing 1`] = ` "elasticsearch": Object { "cluster": Array [], "indices": Array [], + "remote_cluster": Array [], "run_as": Array [], }, "kibana": Array [], diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/index_privileges.test.tsx.snap b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/index_privileges.test.tsx.snap index d99dac15df58f..c3df729a7e3ee 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/index_privileges.test.tsx.snap +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/index_privileges.test.tsx.snap @@ -36,6 +36,7 @@ exports[`it renders without crashing 1`] = ` "elasticsearch": Object { "cluster": Array [], "indices": Array [], + "remote_cluster": Array [], "run_as": Array [], }, "kibana": Array [], diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_cluster_privileges.test.tsx.snap b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_cluster_privileges.test.tsx.snap new file mode 100644 index 0000000000000..e0939f7f55e02 --- /dev/null +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_cluster_privileges.test.tsx.snap @@ -0,0 +1,52 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`it renders without crashing 1`] = ` + +`; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_cluster_privileges_form.test.tsx.snap b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_cluster_privileges_form.test.tsx.snap new file mode 100644 index 0000000000000..6f48ce3b977aa --- /dev/null +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_cluster_privileges_form.test.tsx.snap @@ -0,0 +1,116 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`it renders without crashing 1`] = ` + + + + + + + + + } + labelType="label" + > + + + + + + } + labelType="label" + > + + + + + + + + + + + +`; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_clusters_combo_box.test.tsx.snap b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_clusters_combo_box.test.tsx.snap new file mode 100644 index 0000000000000..158d4882f457c --- /dev/null +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/__snapshots__/remote_clusters_combo_box.test.tsx.snap @@ -0,0 +1,146 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`it renders without crashing 1`] = ` + + } + type="warning" + />, + "disabled": true, + "label": "test1", + }, + ] + } + selectedOptions={Array []} + singleSelection={false} + sortMatchesBy="none" +/> +`; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/cluster_privileges.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/cluster_privileges.test.tsx index 81edde34b4d28..0793083ca21df 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/cluster_privileges.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/cluster_privileges.test.tsx @@ -17,6 +17,7 @@ test('it renders without crashing', () => { const role: Role = { name: '', elasticsearch: { + remote_cluster: [], cluster: [], indices: [], run_as: [], @@ -39,6 +40,7 @@ test('it renders fields as disabled when not editable', () => { name: '', elasticsearch: { cluster: [], + remote_cluster: [], indices: [], run_as: [], }, @@ -61,6 +63,7 @@ test('it allows for custom cluster privileges', () => { name: '', elasticsearch: { cluster: ['existing-custom', 'monitor'], + remote_cluster: [], indices: [], run_as: [], }, diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/elasticsearch_privileges.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/elasticsearch_privileges.test.tsx index 3850e55f9211c..ef914c58522c0 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/elasticsearch_privileges.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/elasticsearch_privileges.test.tsx @@ -30,6 +30,7 @@ function getProps() { name: '', elasticsearch: { cluster: [], + remote_cluster: [], indices: [], run_as: [], }, @@ -43,6 +44,7 @@ function getProps() { builtinESPrivileges: { cluster: ['all', 'manage', 'monitor'], index: ['all', 'read', 'write', 'index'], + remote_cluster: [], }, indicesAPIClient: indicesAPIClientMock.create(), docLinks, @@ -75,13 +77,26 @@ test('it renders remote index privileges section when `canUseRemoteIndices` is e expect(wrapper.find('IndexPrivileges[indexType="remote_indices"]')).toHaveLength(1); }); +test('it does not render remote cluster privileges section by default', () => { + const wrapper = shallowWithIntl(); + expect(wrapper.find('RemoteClusterPrivileges')).toHaveLength(0); +}); + +test('it renders remote index privileges section when `canUseRemoteClusters` is enabled', () => { + const wrapper = shallowWithIntl(); + expect(wrapper.find('RemoteClusterPrivileges')).toHaveLength(1); +}); + test('it renders fields as disabled when not editable', () => { - const wrapper = shallowWithIntl(); + const wrapper = shallowWithIntl( + + ); expect(wrapper.find('EuiComboBox').prop('isDisabled')).toBe(true); expect(wrapper.find('ClusterPrivileges').prop('editable')).toBe(false); expect( wrapper.find('IndexPrivileges').everyWhere((component) => component.prop('editable')) ).toBe(false); + expect(wrapper.find('RemoteClusterPrivileges').prop('editable')).toBe(false); }); test('it renders correctly in serverless mode', () => { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/elasticsearch_privileges.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/elasticsearch_privileges.tsx index 0aa4900e8715b..1ff2ede4c575c 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/elasticsearch_privileges.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/elasticsearch_privileges.tsx @@ -25,6 +25,7 @@ import type { PublicMethodsOf } from '@kbn/utility-types'; import { ClusterPrivileges } from './cluster_privileges'; import { IndexPrivileges } from './index_privileges'; +import { RemoteClusterPrivileges } from './remote_cluster_privileges'; import type { BuiltinESPrivileges, Role, SecurityLicense } from '../../../../../../common'; import type { IndicesAPIClient } from '../../../indices_api_client'; import { CollapsiblePanel } from '../../collapsible_panel'; @@ -43,6 +44,7 @@ interface Props { indexPatterns: string[]; remoteClusters?: Cluster[]; canUseRemoteIndices?: boolean; + canUseRemoteClusters?: boolean; isDarkMode?: boolean; buildFlavor: BuildFlavor; } @@ -69,6 +71,7 @@ export class ElasticsearchPrivileges extends Component { license, builtinESPrivileges, canUseRemoteIndices, + canUseRemoteClusters, buildFlavor, } = this.props; @@ -219,6 +222,40 @@ export class ElasticsearchPrivileges extends Component { /> )} + {buildFlavor === 'traditional' && canUseRemoteClusters && ( + <> + + + + +

+ +

+
+ + +

+ + {this.learnMore(docLinks.links.security.clusterPrivileges)} +

+
+ + + )} ); }; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privilege_form.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privilege_form.test.tsx index fa1bbe2f8c447..dc7ebaf3b3069 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privilege_form.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privilege_form.test.tsx @@ -107,70 +107,6 @@ test('should not render clusters field for local indices', () => { expect(wrapper.find('[data-test-subj="clustersInput0"]')).toHaveLength(0); }); -test('should render clusters field for remote indices', () => { - const wrapper = shallowWithIntl( - - ); - const clustersInput = wrapper.find('[data-test-subj="clustersInput0"]'); - expect(clustersInput).toHaveLength(1); - expect(clustersInput.prop('options')).toEqual([ - { label: 'test2' }, - { label: expect.anything(), isGroupLabelOption: true }, - { - label: 'test1', - disabled: true, - append: expect.anything(), - }, - ]); -}); - describe('delete button', () => { const props = { indexType: 'indices' as const, diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privilege_form.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privilege_form.tsx index 30e1c6423d1ff..f89195e624f5b 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privilege_form.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privilege_form.tsx @@ -12,7 +12,6 @@ import { EuiFlexGroup, EuiFlexItem, EuiFormRow, - EuiIconTip, EuiPanel, EuiSpacer, EuiSwitch, @@ -27,6 +26,7 @@ import type { monaco } from '@kbn/monaco'; import type { Cluster } from '@kbn/remote-clusters-plugin/public'; import type { PublicMethodsOf } from '@kbn/utility-types'; +import { RemoteClusterComboBox } from './remote_clusters_combo_box'; import type { RoleIndexPrivilege, RoleRemoteIndexPrivilege } from '../../../../../../common'; import type { IndicesAPIClient } from '../../../indices_api_client'; import type { RoleValidator } from '../../validate_role'; @@ -125,45 +125,6 @@ export class IndexPrivilegeForm extends Component { } private getPrivilegeForm = () => { - const remoteClusterOptions: EuiComboBoxOptionOption[] = []; - if (this.props.remoteClusters) { - const incompatibleOptions: EuiComboBoxOptionOption[] = []; - this.props.remoteClusters.forEach((item, i) => { - const disabled = item.securityModel !== 'api_key'; - if (!disabled) { - remoteClusterOptions.push({ - label: item.name, - }); - } else { - incompatibleOptions.push({ - label: item.name, - disabled, - append: disabled ? ( - - } - /> - ) : undefined, - }); - } - }); - if (incompatibleOptions.length) { - remoteClusterOptions.push( - { - label: 'Incompatible clusters', - isGroupLabelOption: true, - }, - ...incompatibleOptions - ); - } - } - return ( <> @@ -181,9 +142,8 @@ export class IndexPrivilegeForm extends Component { this.props.indexPrivilege as RoleRemoteIndexPrivilege )} > - { 'xpack.security.management.editRole.indexPrivilegeForm.clustersPlaceholder', { defaultMessage: 'Add a remote cluster…' } )} + remoteClusters={this.props.remoteClusters ?? []} + type="remote_indexes" fullWidth /> diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privileges.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privileges.test.tsx index 05ddf9d7d5514..ab125c1ca7076 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privileges.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/index_privileges.test.tsx @@ -38,6 +38,7 @@ test('it renders without crashing', async () => { kibana: [], elasticsearch: { cluster: [], + remote_cluster: [], indices: [], run_as: [], }, @@ -75,6 +76,7 @@ test('it renders an IndexPrivilegeForm for each index privilege on the role', as kibana: [], elasticsearch: { cluster: [], + remote_cluster: [], indices: [ { names: ['foo*'], @@ -129,6 +131,7 @@ test('it renders an IndexPrivilegeForm for each remote index privilege on the ro kibana: [], elasticsearch: { cluster: [], + remote_cluster: [], indices: [], remote_indices: [ { @@ -183,6 +186,7 @@ test('it renders fields as disabled when not editable', async () => { kibana: [], elasticsearch: { cluster: [], + remote_cluster: [], indices: [ { names: ['foo*'], diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges.test.tsx new file mode 100644 index 0000000000000..5739c0ca2e1d2 --- /dev/null +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges.test.tsx @@ -0,0 +1,175 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { coreMock } from '@kbn/core/public/mocks'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import type { SecurityLicenseFeatures } from '@kbn/security-plugin-types-common'; +import { mountWithIntl, shallowWithIntl } from '@kbn/test-jest-helpers'; +import '@kbn/code-editor-mock/jest_helper'; + +import { RemoteClusterPrivileges } from './remote_cluster_privileges'; +import { RemoteClusterPrivilegesForm } from './remote_cluster_privileges_form'; +import { licenseMock } from '../../../../../../common/licensing/index.mock'; +import { RoleValidator } from '../../validate_role'; + +test('it renders without crashing', async () => { + const wrapper = shallowWithIntl( + + + + ); + + expect(wrapper.children()).toMatchSnapshot(); +}); + +test('it renders an RemoteClusterPrivilegesForm for each remote cluster privilege on the role', async () => { + const wrapper = mountWithIntl( + + + + ); + + expect(wrapper.find(RemoteClusterPrivilegesForm)).toHaveLength(3); +}); + +test('it renders fields as disabled when not editable', async () => { + const props = { + role: { + name: '', + kibana: [], + elasticsearch: { + cluster: [], + remote_cluster: [ + { + clusters: ['cluster1', 'cluster2'], + privileges: ['monitor_enrich'], + }, + { + clusters: ['cluster3', 'cluster4'], + privileges: ['monitor_enrich'], + }, + ], + indices: [], + run_as: [], + }, + }, + onChange: jest.fn(), + editable: false, + validator: new RoleValidator(), + availableRemoteClusterPrivileges: ['monitor_enrich'], + license: licenseMock.create(), + }; + const wrapper = mountWithIntl( + + + + ); + + expect( + wrapper + .find('RemoteClusterPrivilegesForm') + .everyWhere((component) => component.prop('isRoleReadOnly')) + ).toBe(true); +}); + +test('it renders fields as disabled when `allowRemoteClusterPrivileges` is set to false', async () => { + const license = licenseMock.create(); + + license.getFeatures.mockReturnValue({ + allowRemoteClusterPrivileges: false, + } as SecurityLicenseFeatures); + + const props = { + role: { + name: '', + kibana: [], + elasticsearch: { + cluster: [], + remote_cluster: [ + { + clusters: ['cluster1', 'cluster2'], + privileges: ['monitor_enrich'], + }, + { + clusters: ['cluster3', 'cluster4'], + privileges: ['monitor_enrich'], + }, + ], + indices: [], + run_as: [], + }, + }, + onChange: jest.fn(), + editable: false, + validator: new RoleValidator(), + availableRemoteClusterPrivileges: ['monitor_enrich'], + license: licenseMock.create(), + }; + const wrapper = mountWithIntl( + + + + ); + + expect( + wrapper + .find('RemoteClusterPrivilegesForm') + .everyWhere((component) => component.prop('isRoleReadOnly')) + ).toBe(true); +}); diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges.tsx new file mode 100644 index 0000000000000..7b6096356dd63 --- /dev/null +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges.tsx @@ -0,0 +1,147 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiButton, EuiFlexGroup, EuiFlexItem, EuiIconTip, EuiSpacer } from '@elastic/eui'; +import React, { useCallback, useMemo } from 'react'; + +import { FormattedMessage } from '@kbn/i18n-react'; +import type { Cluster } from '@kbn/remote-clusters-plugin/public'; + +import { RemoteClusterPrivilegesForm } from './remote_cluster_privileges_form'; +import type { Role, RoleRemoteClusterPrivilege, SecurityLicense } from '../../../../../../common'; +import { isRoleReadOnly } from '../../../../../../common/model'; +import type { RoleValidator } from '../../validate_role'; + +interface Props { + remoteClusters?: Cluster[]; + role: Role; + availableRemoteClusterPrivileges: string[]; + license: SecurityLicense; + onChange: (role: Role) => void; + validator: RoleValidator; + editable?: boolean; +} + +export const RemoteClusterPrivileges: React.FunctionComponent = ({ + remoteClusters, + license, + availableRemoteClusterPrivileges, + role, + editable, + onChange, + validator, +}) => { + const remoteClusterPrivileges = useMemo(() => role.elasticsearch.remote_cluster ?? [], [role]); + const remoteClusterPrivilegesDisabled = useMemo(() => { + const { allowRemoteClusterPrivileges } = license.getFeatures(); + + return !allowRemoteClusterPrivileges; + }, [license]); + + const isReadOnly = useMemo( + () => !editable || isRoleReadOnly(role) || remoteClusterPrivilegesDisabled, + [role, editable, remoteClusterPrivilegesDisabled] + ); + + const onRoleChange = useCallback( + (remoteCluster: RoleRemoteClusterPrivilege[]) => { + const roleDraft = { + ...role, + elasticsearch: { + ...role.elasticsearch, + remote_cluster: remoteCluster, + }, + }; + + onChange(roleDraft); + }, + [onChange, role] + ); + + const addRemoteClusterPrivilege = useCallback(() => { + const newRemoteClusterPrivileges = [ + ...remoteClusterPrivileges, + { + clusters: [], + privileges: [], + }, + ]; + + onRoleChange(newRemoteClusterPrivileges); + }, [onRoleChange, remoteClusterPrivileges]); + + const onRemoteClusterPrivilegeChange = useCallback( + (privilegeIndex: number) => (updatedPrivilege: RoleRemoteClusterPrivilege) => { + const newRemoteClusterPrivileges = [...remoteClusterPrivileges]; + newRemoteClusterPrivileges[privilegeIndex] = updatedPrivilege; + + onRoleChange(newRemoteClusterPrivileges); + }, + [onRoleChange, remoteClusterPrivileges] + ); + + const onRemoteClusterPrivilegeDelete = useCallback( + (privilegeIndex: number) => () => { + const newRemoteClusterPrivileges = [...remoteClusterPrivileges]; + newRemoteClusterPrivileges.splice(privilegeIndex, 1); + + onRoleChange(newRemoteClusterPrivileges); + }, + [onRoleChange, remoteClusterPrivileges] + ); + + return ( + <> + {remoteClusterPrivileges.map((remoteClusterPrivilege, i) => ( + + ))} + {editable && ( + <> + + + + + + + + {remoteClusterPrivilegesDisabled && ( + + + } + position="right" + /> + + )} + + + )} + + ); +}; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges_form.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges_form.test.tsx new file mode 100644 index 0000000000000..c1bbc330a9070 --- /dev/null +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges_form.test.tsx @@ -0,0 +1,182 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 } from '@elastic/eui'; +import type { EuiComboBoxProps } from '@elastic/eui'; +import React from 'react'; + +import '@kbn/code-editor-mock/jest_helper'; +import { mountWithIntl, shallowWithIntl } from '@kbn/test-jest-helpers'; + +import { RemoteClusterPrivilegesForm } from './remote_cluster_privileges_form'; +import { RoleValidator } from '../../validate_role'; + +test('it renders without crashing', () => { + const wrapper = shallowWithIntl( + + ); + expect(wrapper).toMatchSnapshot(); +}); + +test('it allows for custom remote cluster input', () => { + const onChange = jest.fn(); + const wrapper = mountWithIntl( + + ); + + const privilegesSelect = wrapper.find( + 'EuiComboBox[data-test-subj="remoteClusterClustersInput0"]' + ); + + (privilegesSelect.props() as any).onCreateOption('custom-cluster'); + + expect(onChange).toHaveBeenCalledWith( + expect.objectContaining({ clusters: ['cluster1', 'custom-cluster'] }) + ); +}); + +test('it does not allow for custom remote cluster privileges', () => { + const onChange = jest.fn(); + const wrapper = mountWithIntl( + + ); + + const privilegesSelect = wrapper.find( + 'EuiComboBox[data-test-subj="remoteClusterPrivilegesInput0"]' + ); + + expect((privilegesSelect.props() as EuiComboBoxProps).onCreateOption).toBe(undefined); +}); + +test('it allows for custom remote cluster clusters input', () => { + const onChange = jest.fn(); + const wrapper = mountWithIntl( + + ); + + const clustersSelect = wrapper.find('EuiComboBox[data-test-subj="remoteClusterClustersInput0"]'); + + (clustersSelect.props() as any).onCreateOption('cluster2'); + + expect(onChange).toHaveBeenCalledWith( + expect.objectContaining({ clusters: ['cluster1', 'cluster2'] }) + ); +}); + +test('it renders fields as disabled when isRoleReadOnly is true', () => { + const onChange = jest.fn(); + const wrapper = mountWithIntl( + + ); + + const privilegesSelect = wrapper.find( + 'EuiComboBox[data-test-subj="remoteClusterPrivilegesInput0"]' + ); + expect(privilegesSelect.prop('isDisabled')).toBe(true); + + const clustersSelect = wrapper.find('EuiComboBox[data-test-subj="remoteClusterClustersInput0"]'); + expect(clustersSelect.prop('isDisabled')).toBe(true); +}); + +describe('delete button', () => { + const props = { + remoteClusterPrivilege: { + clusters: ['cluster1'], + privileges: ['monitor_enrich'], + }, + formIndex: 0, + availableRemoteClusterPrivileges: ['monitor_enrich'], + isRoleReadOnly: false, + validator: new RoleValidator(), + onChange: jest.fn(), + onDelete: jest.fn(), + intl: {} as any, + }; + + test('it is hidden when isRoleReadOnly is true', () => { + const testProps = { + ...props, + isRoleReadOnly: true, + }; + const wrapper = mountWithIntl(); + expect(wrapper.find(EuiButtonIcon)).toHaveLength(0); + }); + + test('it is shown when isRoleReadOnly is false', () => { + const testProps = { + ...props, + isRoleReadOnly: false, + }; + const wrapper = mountWithIntl(); + expect(wrapper.find(EuiButtonIcon)).toHaveLength(1); + }); + + test('it invokes onDelete when clicked', () => { + const testProps = { + ...props, + isRoleReadOnly: false, + }; + const wrapper = mountWithIntl(); + wrapper.find(EuiButtonIcon).simulate('click'); + expect(testProps.onDelete).toHaveBeenCalledTimes(1); + }); +}); diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges_form.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges_form.tsx new file mode 100644 index 0000000000000..5e55ebaf1d281 --- /dev/null +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_cluster_privileges_form.tsx @@ -0,0 +1,170 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { EuiComboBoxOptionOption } from '@elastic/eui'; +import { + EuiButtonIcon, + EuiComboBox, + EuiFlexGroup, + EuiFlexItem, + EuiFormRow, + EuiPanel, + EuiSpacer, +} from '@elastic/eui'; +import React, { Fragment, useCallback } from 'react'; + +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import type { Cluster } from '@kbn/remote-clusters-plugin/public'; + +import { RemoteClusterComboBox } from './remote_clusters_combo_box'; +import type { RoleRemoteClusterPrivilege } from '../../../../../../common'; +import type { RoleValidator } from '../../validate_role'; + +const fromOption = (option: EuiComboBoxOptionOption) => option.label; +const toOption = (value: string): EuiComboBoxOptionOption => ({ label: value }); + +interface Props { + formIndex: number; + remoteClusterPrivilege: RoleRemoteClusterPrivilege; + remoteClusters?: Cluster[]; + availableRemoteClusterPrivileges: string[]; + onChange: (remoteClusterPrivilege: RoleRemoteClusterPrivilege) => void; + onDelete: () => void; + isRoleReadOnly: boolean; + validator: RoleValidator; +} + +export const RemoteClusterPrivilegesForm: React.FunctionComponent = ({ + isRoleReadOnly, + remoteClusters = [], + formIndex, + validator, + remoteClusterPrivilege, + availableRemoteClusterPrivileges, + onChange, + onDelete, +}) => { + const onCreateClusterOption = useCallback( + (option: string) => { + const nextClusters = (remoteClusterPrivilege.clusters ?? []).concat([option]); + + onChange({ + ...remoteClusterPrivilege, + clusters: nextClusters, + }); + }, + [remoteClusterPrivilege, onChange] + ); + + const onClustersChange = useCallback( + (nextOptions: EuiComboBoxOptionOption[]) => { + const clusters = nextOptions.map(fromOption); + onChange({ + ...remoteClusterPrivilege, + clusters, + }); + }, + [onChange, remoteClusterPrivilege] + ); + + const onPrivilegeChange = useCallback( + (newPrivileges: EuiComboBoxOptionOption[]) => { + onChange({ + ...remoteClusterPrivilege, + privileges: newPrivileges.map(fromOption), + }); + }, + [remoteClusterPrivilege, onChange] + ); + + return ( + + + + + + + + + } + fullWidth + {...validator.validateRemoteClusterPrivilegeClusterField(remoteClusterPrivilege)} + > + + + + + + } + fullWidth + {...validator.validateRemoteClusterPrivilegePrivilegesField( + remoteClusterPrivilege + )} + > + + + + + + + {!isRoleReadOnly && ( + + + + )} + + + ); +}; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_clusters_combo_box.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_clusters_combo_box.test.tsx new file mode 100644 index 0000000000000..4cf918d4c8c1c --- /dev/null +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_clusters_combo_box.test.tsx @@ -0,0 +1,106 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 '@kbn/code-editor-mock/jest_helper'; +import { shallowWithIntl } from '@kbn/test-jest-helpers'; + +import { RemoteClusterComboBox } from './remote_clusters_combo_box'; + +test('it renders without crashing', () => { + const wrapper = shallowWithIntl( + + ); + expect(wrapper).toMatchSnapshot(); +}); + +test('should render clusters field', () => { + const wrapper = shallowWithIntl( + + ); + const clustersInput = wrapper.find('EuiComboBox'); + expect(clustersInput.prop('options')).toEqual([ + { label: 'test2' }, + { label: expect.anything(), isGroupLabelOption: true }, + { + label: 'test1', + disabled: true, + append: expect.anything(), + }, + ]); +}); diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_clusters_combo_box.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_clusters_combo_box.tsx new file mode 100644 index 0000000000000..30efc78f0aaf1 --- /dev/null +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/es/remote_clusters_combo_box.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 type { EuiComboBoxOptionOption, EuiComboBoxProps } from '@elastic/eui'; +import { EuiComboBox, EuiIconTip } from '@elastic/eui'; +import React, { useMemo } from 'react'; + +import { FormattedMessage } from '@kbn/i18n-react'; +import type { Cluster } from '@kbn/remote-clusters-plugin/public'; + +const API_KEY_SECURITY_MODEL = 'api_key'; + +interface Props extends Omit, 'options'> { + remoteClusters: Cluster[]; + type: 'remote_cluster' | 'remote_indexes'; +} + +export const RemoteClusterComboBox: React.FunctionComponent = ({ + remoteClusters, + type, + ...restProps +}) => { + const remoteClusterOptions = useMemo(() => { + const { incompatible, remote } = remoteClusters.reduce<{ + remote: EuiComboBoxOptionOption[]; + incompatible: EuiComboBoxOptionOption[]; + }>( + (data, item) => { + const disabled = item.securityModel !== API_KEY_SECURITY_MODEL; + + if (!disabled) { + data.remote.push({ label: item.name }); + + return data; + } + + data.incompatible.push({ + label: item.name, + disabled, + append: disabled ? ( + + ) : ( + + ) + } + /> + ) : undefined, + }); + + return data; + }, + { + incompatible: [], + remote: [], + } + ); + + if (incompatible.length) { + remote.push( + { + label: 'Incompatible clusters', + isGroupLabelOption: true, + }, + ...incompatible + ); + } + + return remote; + }, [remoteClusters, type]); + + return ; +}; diff --git a/x-pack/plugins/security/public/management/roles/edit_role/validate_role.ts b/x-pack/plugins/security/public/management/roles/edit_role/validate_role.ts index 18728994a5e4e..bf85f80df1fc1 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/validate_role.ts +++ b/x-pack/plugins/security/public/management/roles/edit_role/validate_role.ts @@ -7,7 +7,12 @@ import { i18n } from '@kbn/i18n'; -import type { Role, RoleIndexPrivilege, RoleRemoteIndexPrivilege } from '../../../../common'; +import type { + Role, + RoleIndexPrivilege, + RoleRemoteClusterPrivilege, + RoleRemoteIndexPrivilege, +} from '../../../../common'; import { MAX_NAME_LENGTH, NAME_REGEX } from '../../../../common/constants'; interface RoleValidatorOptions { @@ -81,6 +86,27 @@ export class RoleValidator { return valid(); } + public validateRemoteClusterPrivileges(role: Role): RoleValidationResult { + if (!this.shouldValidate) { + return valid(); + } + + const areRemoteClustersInvalid = role.elasticsearch.remote_cluster?.some( + (remoteClusterPrivilege) => { + return ( + this.validateRemoteClusterPrivilegeClusterField(remoteClusterPrivilege).isInvalid || + this.validateRemoteClusterPrivilegePrivilegesField(remoteClusterPrivilege).isInvalid + ); + } + ); + + if (areRemoteClustersInvalid) { + return invalid(); + } + + return valid(); + } + public validateIndexPrivileges(role: Role): RoleValidationResult { if (!this.shouldValidate) { return valid(); @@ -239,6 +265,58 @@ export class RoleValidator { return valid(); } + public validateRemoteClusterPrivilegeClusterField( + remoteClusterPrivilege: RoleRemoteClusterPrivilege + ): RoleValidationResult { + if (!this.shouldValidate) { + return valid(); + } + + // Ignore if all other fields are empty + if (!remoteClusterPrivilege.privileges.length) { + return valid(); + } + + if (!remoteClusterPrivilege.clusters.length) { + return invalid( + i18n.translate( + 'xpack.security.management.editRole.validateRole.oneClusterRequiredWarningMessage', + { + defaultMessage: 'Enter or select at least one cluster', + } + ) + ); + } + + return valid(); + } + + public validateRemoteClusterPrivilegePrivilegesField( + remoteClusterPrivilege: RoleRemoteClusterPrivilege + ): RoleValidationResult { + if (!this.shouldValidate) { + return valid(); + } + + // Ignore if all other fields are empty + if (!remoteClusterPrivilege.clusters.length) { + return valid(); + } + + if (!remoteClusterPrivilege.privileges.length) { + return invalid( + i18n.translate( + 'xpack.security.management.editRole.validateRole.oneRemoteClusterPrivilegeRequiredWarningMessage', + { + defaultMessage: 'Enter or select at least one privilege', + } + ) + ); + } + + return valid(); + } + public validateSelectedSpaces( spaceIds: string[], privilege: string | null @@ -313,12 +391,15 @@ export class RoleValidator { const { isInvalid: areIndicesInvalid } = this.validateIndexPrivileges(role); const { isInvalid: areRemoteIndicesInvalid } = this.validateRemoteIndexPrivileges(role); const { isInvalid: areSpacePrivilegesInvalid } = this.validateSpacePrivileges(role); + const { isInvalid: areRemoteClusterPrivilegesInvalid } = + this.validateRemoteClusterPrivileges(role); if ( isNameInvalid || areIndicesInvalid || areRemoteIndicesInvalid || - areSpacePrivilegesInvalid + areSpacePrivilegesInvalid || + areRemoteClusterPrivilegesInvalid ) { return invalid(); } diff --git a/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts b/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts index 47947d2fb2adc..bb8b43c45f272 100644 --- a/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts +++ b/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.test.ts @@ -16,6 +16,7 @@ const roles = [ { name: 'global-base-all', cluster: [], + remote_cluster: [], indices: [], applications: [ { @@ -33,6 +34,7 @@ const roles = [ { name: 'global-base-read', cluster: [], + remote_cluster: [], indices: [], applications: [ { @@ -50,6 +52,7 @@ const roles = [ { name: 'global-foo-all', cluster: [], + remote_cluster: [], indices: [], applications: [ { @@ -67,6 +70,7 @@ const roles = [ { name: 'global-foo-read', cluster: [], + remote_cluster: [], indices: [], applications: [ { @@ -84,6 +88,7 @@ const roles = [ { name: 'global-malformed', cluster: [], + remote_cluster: [], indices: [], applications: [ { @@ -101,6 +106,7 @@ const roles = [ { name: 'default-base-all', cluster: [], + remote_cluster: [], indices: [], applications: [ { @@ -118,6 +124,7 @@ const roles = [ { name: 'default-base-read', cluster: [], + remote_cluster: [], indices: [], applications: [ { @@ -135,6 +142,7 @@ const roles = [ { name: 'default-foo-all', cluster: [], + remote_cluster: [], indices: [], applications: [ { @@ -152,6 +160,7 @@ const roles = [ { name: 'default-foo-read', cluster: [], + remote_cluster: [], indices: [], applications: [ { @@ -169,6 +178,7 @@ const roles = [ { name: 'default-malformed', cluster: [], + remote_cluster: [], indices: [], applications: [ { @@ -294,6 +304,7 @@ describe('#transformElasticsearchRoleToRole', () => { const role = { name: 'global-all', cluster: [], + remote_cluster: [], indices: [], applications: [ { diff --git a/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts b/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts index 9477fa8be9084..e06c9938b078f 100644 --- a/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts +++ b/x-pack/plugins/security/server/authorization/roles/elasticsearch_role.ts @@ -28,6 +28,7 @@ export type ElasticsearchRole = Pick< resources: string[]; }>; cluster: Role['elasticsearch']['cluster']; + remote_cluster: Role['elasticsearch']['remote_cluster']; indices: Role['elasticsearch']['indices']; remote_indices?: Role['elasticsearch']['remote_indices']; run_as: Role['elasticsearch']['run_as']; @@ -56,6 +57,7 @@ export function transformElasticsearchRoleToRole( transient_metadata: elasticsearchRole.transient_metadata, elasticsearch: { cluster: elasticsearchRole.cluster, + remote_cluster: elasticsearchRole.remote_cluster, indices: elasticsearchRole.indices, remote_indices: elasticsearchRole.remote_indices, run_as: elasticsearchRole.run_as, diff --git a/x-pack/plugins/security/server/deprecations/privilege_deprecations.test.ts b/x-pack/plugins/security/server/deprecations/privilege_deprecations.test.ts index 2ab306ce82108..f62bdc52e6d4c 100644 --- a/x-pack/plugins/security/server/deprecations/privilege_deprecations.test.ts +++ b/x-pack/plugins/security/server/deprecations/privilege_deprecations.test.ts @@ -66,6 +66,7 @@ describe('#getPrivilegeDeprecationsService', () => { "elasticsearch": Object { "cluster": Array [], "indices": Array [], + "remote_cluster": undefined, "remote_indices": undefined, "run_as": Array [], }, @@ -139,6 +140,7 @@ describe('#getPrivilegeDeprecationsService', () => { "elasticsearch": Object { "cluster": Array [], "indices": Array [], + "remote_cluster": undefined, "remote_indices": undefined, "run_as": Array [], }, diff --git a/x-pack/plugins/security/server/routes/authorization/privileges/get_builtin.ts b/x-pack/plugins/security/server/routes/authorization/privileges/get_builtin.ts index e51e8e1d5ae51..98b1f33bd5b38 100644 --- a/x-pack/plugins/security/server/routes/authorization/privileges/get_builtin.ts +++ b/x-pack/plugins/security/server/routes/authorization/privileges/get_builtin.ts @@ -21,7 +21,10 @@ export function defineGetBuiltinPrivilegesRoutes({ router }: RouteDefinitionPara : [privileges.index]; privileges.index = indexPriviledges.filter((privilege) => privilege !== 'none'); - return response.ok({ body: privileges }); + // TODO: remove hardcoded value once ES returns built-in privileges for remote_cluster + const remoteClusterPrivileges = ['monitor_enrich']; + + return response.ok({ body: { ...privileges, remote_cluster: remoteClusterPrivileges } }); } ); } diff --git a/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts b/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts index 717170567a550..b9e772e6451db 100644 --- a/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts +++ b/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.test.ts @@ -108,10 +108,10 @@ describe('Put payload schema', () => { kibana: [{ spaces: ['foo-*'] }], }) ).toThrowErrorMatchingInlineSnapshot(` -"[kibana.0.spaces]: types that failed validation: -- [kibana.0.spaces.0.0]: expected value to equal [*] -- [kibana.0.spaces.1.0]: must be lower case, a-z, 0-9, '_', and '-' are allowed" -`); + "[kibana.0.spaces]: types that failed validation: + - [kibana.0.spaces.0.0]: expected value to equal [*] + - [kibana.0.spaces.1.0]: must be lower case, a-z, 0-9, '_', and '-' are allowed" + `); }); test(`can't assign space and global in same entry`, () => { @@ -120,10 +120,10 @@ describe('Put payload schema', () => { kibana: [{ spaces: ['*', 'foo-space'] }], }) ).toThrowErrorMatchingInlineSnapshot(` -"[kibana.0.spaces]: types that failed validation: -- [kibana.0.spaces.0.1]: expected value to equal [*] -- [kibana.0.spaces.1.0]: must be lower case, a-z, 0-9, '_', and '-' are allowed" -`); + "[kibana.0.spaces]: types that failed validation: + - [kibana.0.spaces.0.1]: expected value to equal [*] + - [kibana.0.spaces.1.0]: must be lower case, a-z, 0-9, '_', and '-' are allowed" + `); }); test(`only allows known Kibana space base privileges`, () => { @@ -424,8 +424,72 @@ describe('Put payload schema', () => { `); }); + test('passes through remote_cluster when specified', () => { + expect( + getPutPayloadSchema(() => basePrivilegeNamesMap).validate({ + elasticsearch: { + remote_cluster: [ + { + privileges: ['monitor_enrich'], + clusters: ['my_remote*'], + }, + ], + }, + }) + ).toMatchInlineSnapshot(` + Object { + "elasticsearch": Object { + "remote_cluster": Array [ + Object { + "clusters": Array [ + "my_remote*", + ], + "privileges": Array [ + "monitor_enrich", + ], + }, + ], + }, + } + `); + }); + + test(`doesn't allow empty privilege for remote_cluster`, () => { + expect(() => + getPutPayloadSchema(() => basePrivilegeNamesMap).validate({ + elasticsearch: { + remote_cluster: [ + { + privileges: [], + clusters: ['cluster1'], + }, + ], + }, + }) + ).toThrowErrorMatchingInlineSnapshot( + `"[elasticsearch.remote_cluster.0.privileges]: array size is [0], but cannot be smaller than [1]"` + ); + }); + + test(`doesn't allow empty clusters for remote_cluster`, () => { + expect(() => + getPutPayloadSchema(() => basePrivilegeNamesMap).validate({ + elasticsearch: { + remote_cluster: [ + { + privileges: ['enrich_monitor'], + clusters: [], + }, + ], + }, + }) + ).toThrowErrorMatchingInlineSnapshot( + `"[elasticsearch.remote_cluster.0.clusters]: array size is [0], but cannot be smaller than [1]"` + ); + }); + // This is important for backwards compatibility - test('does not set default value for remote_indices when not specified', () => { + test('does not set default value for remote_indices/remote_cluster when not specified', () => { expect(getPutPayloadSchema(() => basePrivilegeNamesMap).validate({})).toMatchInlineSnapshot(` Object { "elasticsearch": Object {}, diff --git a/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.ts b/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.ts index 9d0a82c1e6ac8..52c8178a651a7 100644 --- a/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.ts +++ b/x-pack/plugins/security/server/routes/authorization/roles/model/put_payload.ts @@ -19,6 +19,7 @@ export const transformPutPayloadToElasticsearchRole = ( ) => { const { elasticsearch = { + remote_cluster: undefined, cluster: undefined, indices: undefined, remote_indices: undefined, @@ -34,6 +35,7 @@ export const transformPutPayloadToElasticsearchRole = ( ...(rolePayload.description && { description: rolePayload.description }), metadata: rolePayload.metadata, cluster: elasticsearch.cluster || [], + remote_cluster: elasticsearch.remote_cluster, indices: elasticsearch.indices || [], remote_indices: elasticsearch.remote_indices, run_as: elasticsearch.run_as || [], diff --git a/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts b/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts index 4591bfaaea4aa..642aec90c4748 100644 --- a/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts +++ b/x-pack/plugins/security/server/routes/authorization/roles/put.test.ts @@ -325,6 +325,7 @@ describe('PUT role', () => { body: { cluster: [], indices: [], + remote_cluster: undefined, remote_indices: undefined, run_as: [], applications: [], @@ -936,5 +937,59 @@ describe('PUT role', () => { result: undefined, }, }); + + putRoleTest(`creates role with remote_cluster privileges`, { + name: 'foo-role-remote-cluster', + payload: { + kibana: [], + elasticsearch: { + remote_cluster: [ + { + clusters: ['cluster1', 'cluster2'], + privileges: ['monitor_enrich'], + }, + { + clusters: ['cluster3', 'cluster4'], + privileges: ['monitor_enrich'], + }, + ], + }, + }, + apiResponses: { + get: () => ({}), + put: () => {}, + }, + asserts: { + recordSubFeaturePrivilegeUsage: false, + apiArguments: { + get: [{ name: 'foo-role-remote-cluster' }, { ignore: [404] }], + put: [ + { + name: 'foo-role-remote-cluster', + body: { + applications: [], + cluster: [], + indices: [], + remote_indices: undefined, + run_as: [], + remote_cluster: [ + { + clusters: ['cluster1', 'cluster2'], + privileges: ['monitor_enrich'], + }, + { + clusters: ['cluster3', 'cluster4'], + privileges: ['monitor_enrich'], + }, + ], + metadata: undefined, + }, + }, + ], + }, + statusCode: 204, + result: undefined, + }, + }); }); }); diff --git a/x-pack/plugins/security/server/routes/role_mapping/feature_check.test.ts b/x-pack/plugins/security/server/routes/role_mapping/feature_check.test.ts index d18fd1ff1d314..c0bf0041ed0ac 100644 --- a/x-pack/plugins/security/server/routes/role_mapping/feature_check.test.ts +++ b/x-pack/plugins/security/server/routes/role_mapping/feature_check.test.ts @@ -98,6 +98,7 @@ describe('GET role mappings feature check', () => { canUseStoredScripts: true, hasCompatibleRealms: true, canUseRemoteIndices: true, + canUseRemoteClusters: true, }, }, }); @@ -122,6 +123,7 @@ describe('GET role mappings feature check', () => { canUseStoredScripts: true, hasCompatibleRealms: true, canUseRemoteIndices: true, + canUseRemoteClusters: true, }, }, }); @@ -141,6 +143,7 @@ describe('GET role mappings feature check', () => { canUseStoredScripts: true, hasCompatibleRealms: true, canUseRemoteIndices: false, + canUseRemoteClusters: false, }, }, } @@ -166,6 +169,7 @@ describe('GET role mappings feature check', () => { canUseStoredScripts: false, hasCompatibleRealms: true, canUseRemoteIndices: true, + canUseRemoteClusters: true, }, }, }); @@ -190,6 +194,7 @@ describe('GET role mappings feature check', () => { canUseStoredScripts: true, hasCompatibleRealms: true, canUseRemoteIndices: true, + canUseRemoteClusters: true, }, }, }); @@ -218,6 +223,7 @@ describe('GET role mappings feature check', () => { canUseStoredScripts: true, hasCompatibleRealms: false, canUseRemoteIndices: true, + canUseRemoteClusters: true, }, }, }); @@ -249,6 +255,7 @@ describe('GET role mappings feature check', () => { canUseStoredScripts: true, hasCompatibleRealms: false, canUseRemoteIndices: false, + canUseRemoteClusters: false, }, }, } diff --git a/x-pack/plugins/security/server/routes/role_mapping/feature_check.ts b/x-pack/plugins/security/server/routes/role_mapping/feature_check.ts index 309cdfbeab456..6aca083dab1e2 100644 --- a/x-pack/plugins/security/server/routes/role_mapping/feature_check.ts +++ b/x-pack/plugins/security/server/routes/role_mapping/feature_check.ts @@ -131,7 +131,8 @@ async function getEnabledRoleMappingsFeatures(esClient: ElasticsearchClient, log hasCompatibleRealms, canUseStoredScripts, canUseInlineScripts, - canUseRemoteIndices: !!xpackUsage.remote_clusters, + canUseRemoteIndices: Boolean(xpackUsage.remote_clusters), + canUseRemoteClusters: Boolean(xpackUsage.remote_clusters), }; } diff --git a/x-pack/plugins/security/server/routes/views/login.test.ts b/x-pack/plugins/security/server/routes/views/login.test.ts index 086c0c785e6bc..87e9bf9e4495b 100644 --- a/x-pack/plugins/security/server/routes/views/login.test.ts +++ b/x-pack/plugins/security/server/routes/views/login.test.ts @@ -167,6 +167,7 @@ describe('Login view routes', () => { allowRoleDocumentLevelSecurity: true, allowRoleFieldLevelSecurity: false, allowRoleRemoteIndexPrivileges: false, + allowRemoteClusterPrivileges: false, layout: 'error-es-unavailable', showLinks: false, showRoleMappingsManagement: true, diff --git a/x-pack/test/api_integration/apis/security/builtin_es_privileges.ts b/x-pack/test/api_integration/apis/security/builtin_es_privileges.ts index 89587fe259683..8087ded821b5b 100644 --- a/x-pack/test/api_integration/apis/security/builtin_es_privileges.ts +++ b/x-pack/test/api_integration/apis/security/builtin_es_privileges.ts @@ -24,7 +24,7 @@ export default function ({ getService }: FtrProviderContext) { const sampleOfExpectedIndexPrivileges = ['create', 'index', 'delete']; const payload = response.body; - expect(Object.keys(payload).sort()).to.eql(['cluster', 'index']); + expect(Object.keys(payload).sort()).to.eql(['cluster', 'index', 'remote_cluster']); sampleOfExpectedClusterPrivileges.forEach((privilege) => expect(payload.cluster).to.contain(privilege) diff --git a/x-pack/test/functional/apps/security/index.ts b/x-pack/test/functional/apps/security/index.ts index 3260e61e67cbf..009c270d3c2a3 100644 --- a/x-pack/test/functional/apps/security/index.ts +++ b/x-pack/test/functional/apps/security/index.ts @@ -17,5 +17,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./field_level_security')); loadTestFile(require.resolve('./user_email')); loadTestFile(require.resolve('./role_mappings')); + loadTestFile(require.resolve('./remote_cluster_security_roles')); }); } diff --git a/x-pack/test/functional/apps/security/remote_cluster_security_roles.ts b/x-pack/test/functional/apps/security/remote_cluster_security_roles.ts new file mode 100644 index 0000000000000..1525406b2fa02 --- /dev/null +++ b/x-pack/test/functional/apps/security/remote_cluster_security_roles.ts @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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 { keyBy } from 'lodash'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +const EDIT_ROLES_PATH = 'security/roles/edit'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const esArchiver = getService('esArchiver'); + const browser = getService('browser'); + const log = getService('log'); + const security = getService('security'); + const PageObjects = getPageObjects(['security', 'common', 'header', 'discover', 'settings']); + const kibanaServer = getService('kibanaServer'); + + describe('Remote Cluster Privileges', function () { + const customRole = 'rc-custom-role'; + + before('initialize tests', async () => { + await kibanaServer.savedObjects.cleanStandardList(); + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/security/dlstest'); + await browser.setWindowSize(1600, 1000); + + await PageObjects.common.navigateToApp('settings'); + await PageObjects.settings.createIndexPattern('dlstest', null); + + await security.testUser.setRoles(['cluster_security_manager', 'kibana_admin']); + await PageObjects.settings.navigateTo(); + await PageObjects.security.clickElasticsearchRoles(); + }); + + it(`should add new role ${customRole} with remote cluster privileges`, async function () { + await PageObjects.security.addRole(customRole, { + elasticsearch: { + indices: [ + { + names: ['dlstest'], + privileges: ['read', 'view_index_metadata'], + }, + ], + remote_cluster: [ + { + clusters: ['cluster1', 'cluster2'], + privileges: ['monitor_enrich'], + }, + ], + }, + }); + const roles = keyBy(await PageObjects.security.getElasticsearchRoles(), 'rolename'); + log.debug('actualRoles = %j', roles); + expect(roles).to.have.key(customRole); + expect(roles[customRole].reserved).to.be(false); + }); + + it(`should update role ${customRole} with remote cluster privileges`, async function () { + await PageObjects.settings.clickLinkText(customRole); + const currentUrl = await browser.getCurrentUrl(); + + expect(currentUrl).to.contain(EDIT_ROLES_PATH); + + const { clusters: currentClusters, privileges: currentPrivileges } = + await PageObjects.security.getRemoteClusterPrivilege(0); + + expect(currentClusters).to.eql(['cluster1', 'cluster2']); + expect(currentPrivileges).to.eql(['monitor_enrich']); + + await PageObjects.security.deleteRemoteClusterPrivilege(0); + + await PageObjects.security.addRemoteClusterPrivilege({ + clusters: ['cluster3', 'cluster4'], + privileges: ['monitor_enrich'], + }); + + await PageObjects.security.saveRole(); + }); + + after('logout', async () => { + // NOTE: Logout needs to happen before anything else to avoid flaky behavior + await PageObjects.security.forceLogout(); + await security.role.delete(customRole); + await security.testUser.restoreDefaults(); + }); + }); +} diff --git a/x-pack/test/functional/page_objects/security_page.ts b/x-pack/test/functional/page_objects/security_page.ts index dc5ee34475ae6..f839bc3e49914 100644 --- a/x-pack/test/functional/page_objects/security_page.ts +++ b/x-pack/test/functional/page_objects/security_page.ts @@ -6,7 +6,7 @@ */ import { adminTestUser } from '@kbn/test'; -import { AuthenticatedUser, Role } from '@kbn/security-plugin/common'; +import { AuthenticatedUser, Role, RoleRemoteClusterPrivilege } from '@kbn/security-plugin/common'; import type { UserFormValues } from '@kbn/security-plugin/public/management/users/edit_user/user_form'; import { Key } from 'selenium-webdriver'; import { FtrService } from '../ftr_provider_context'; @@ -600,9 +600,54 @@ export class SecurityPageObject extends FtrService { return confirmText; } + async addRemoteClusterPrivilege(privilege: RoleRemoteClusterPrivilege, index = 0) { + this.log.debug('addRemoteClusterPrivilege, index = ', index); + + await this.testSubjects.click('addRemoteClusterPrivilegesButton'); + + for (const cluster of privilege.clusters) { + await this.comboBox.setCustom(`remoteClusterClustersInput${index}`, cluster); + } + + for (const clusterPrivilege of privilege.privileges) { + await this.comboBox.setCustom(`remoteClusterPrivilegesInput${index}`, clusterPrivilege); + } + } + + async saveRole() { + this.log.debug('click save button'); + await this.testSubjects.click('roleFormSaveButton'); + + // Signifies that the role management page redirected back to the role grid page, + // and successfully refreshed the grid + await this.testSubjects.existOrFail('roleRow'); + } + + async deleteRemoteClusterPrivilege(index: number) { + this.log.debug('deleteRemoteClusterPrivilege, index = ', index); + + await this.testSubjects.click(`deleteRemoteClusterPrivilegesButton${index}`); + } + + async getRemoteClusterPrivilege(index: number) { + this.log.debug('getRemoteClusterPrivilege, index = ', index); + const clusterOptions = await this.comboBox.getComboBoxSelectedOptions( + `remoteClusterClustersInput${index}` + ); + + const privilegeOptions = await this.comboBox.getComboBoxSelectedOptions( + `remoteClusterPrivilegesInput${index}` + ); + + return { + clusters: clusterOptions, + privileges: privilegeOptions, + }; + } + async addRole( roleName: string, - roleObj: { elasticsearch: Pick } + roleObj: { elasticsearch: Pick } ) { const self = this; @@ -667,12 +712,18 @@ export class SecurityPageObject extends FtrService { await addGrantedField(roleObj.elasticsearch.indices[0].field_security!.grant!); } - this.log.debug('click save button'); - await this.testSubjects.click('roleFormSaveButton'); + if (roleObj.elasticsearch.remote_cluster) { + this.log.debug('adding remote_cluster privileges'); - // Signifies that the role management page redirected back to the role grid page, - // and successfully refreshed the grid - await this.testSubjects.existOrFail('roleRow'); + for (const [ + index, + remoteClusterPrivilege, + ] of roleObj.elasticsearch.remote_cluster.entries()) { + await this.addRemoteClusterPrivilege(remoteClusterPrivilege, index); + } + } + + await this.saveRole(); } async selectRole(role: string) { From d87e04dad2ead85743ae6ee3f408e4e584276183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Fern=C3=A1ndez=20Haro?= Date: Wed, 8 May 2024 10:55:26 +0200 Subject: [PATCH 14/34] [Core Telemetry] Add more memory indicators (#182872) --- .../src/core_usage_data_service.test.ts | 3 ++ .../src/core_usage_data_service.ts | 3 ++ .../src/core_usage_data_service.mock.ts | 3 ++ .../src/core_usage_data.ts | 3 ++ .../collectors/core/core_usage_collector.ts | 14 +++++++ src/plugins/telemetry/schema/oss_plugins.json | 38 ++++++++++++++----- 6 files changed, 54 insertions(+), 10 deletions(-) diff --git a/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.test.ts b/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.test.ts index 11602704cf0f0..a2f5baacca07a 100644 --- a/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.test.ts +++ b/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.test.ts @@ -377,9 +377,12 @@ describe('CoreUsageDataService', () => { }, "environment": Object { "memory": Object { + "arrayBuffersBytes": 1, + "externalBytes": 1, "heapSizeLimit": 1, "heapTotalBytes": 1, "heapUsedBytes": 1, + "residentSetSizeBytes": 1, }, }, "services": Object { diff --git a/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.ts b/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.ts index 261db435a1a73..eaa2b0888147b 100644 --- a/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.ts +++ b/packages/core/usage-data/core-usage-data-server-internal/src/core_usage_data_service.ts @@ -333,6 +333,9 @@ export class CoreUsageDataService }, environment: { memory: { + arrayBuffersBytes: this.opsMetrics.process.memory.array_buffers_in_bytes, + residentSetSizeBytes: this.opsMetrics.process.memory.resident_set_size_in_bytes, + externalBytes: this.opsMetrics.process.memory.external_in_bytes, heapSizeLimit: this.opsMetrics.process.memory.heap.size_limit, heapTotalBytes: this.opsMetrics.process.memory.heap.total_in_bytes, heapUsedBytes: this.opsMetrics.process.memory.heap.used_in_bytes, diff --git a/packages/core/usage-data/core-usage-data-server-mocks/src/core_usage_data_service.mock.ts b/packages/core/usage-data/core-usage-data-server-mocks/src/core_usage_data_service.mock.ts index 3b81d25460d9d..1c13f607912dc 100644 --- a/packages/core/usage-data/core-usage-data-server-mocks/src/core_usage_data_service.mock.ts +++ b/packages/core/usage-data/core-usage-data-server-mocks/src/core_usage_data_service.mock.ts @@ -128,6 +128,9 @@ const createStartContractMock = () => { }, environment: { memory: { + arrayBuffersBytes: 1, + externalBytes: 1, + residentSetSizeBytes: 1, heapSizeLimit: 1, heapTotalBytes: 1, heapUsedBytes: 1, diff --git a/packages/core/usage-data/core-usage-data-server/src/core_usage_data.ts b/packages/core/usage-data/core-usage-data-server/src/core_usage_data.ts index c10ad14d9f7f3..f3905c9879c66 100644 --- a/packages/core/usage-data/core-usage-data-server/src/core_usage_data.ts +++ b/packages/core/usage-data/core-usage-data-server/src/core_usage_data.ts @@ -38,6 +38,9 @@ export interface CoreServicesUsageData { */ export interface CoreEnvironmentUsageData { memory: { + arrayBuffersBytes: number; + residentSetSizeBytes: number; + externalBytes: number; heapTotalBytes: number; heapUsedBytes: number; /** V8 heap size limit */ diff --git a/src/plugins/kibana_usage_collection/server/collectors/core/core_usage_collector.ts b/src/plugins/kibana_usage_collection/server/collectors/core/core_usage_collector.ts index 8d5f0db7a669d..e8a6050b9ce59 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/core/core_usage_collector.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/core/core_usage_collector.ts @@ -342,6 +342,20 @@ export function getCoreUsageCollector( }, environment: { memory: { + arrayBuffersBytes: { + type: 'long', + _meta: { + description: + 'Memory allocated for array buffers. This is also included in the external value.', + }, + }, + externalBytes: { + type: 'long', + _meta: { + description: 'Memory usage of C++ objects bound to JavaScript objects managed by V8.', + }, + }, + residentSetSizeBytes: { type: 'long', _meta: { description: 'Node RSS.' } }, heapSizeLimit: { type: 'long', _meta: { description: 'Host memory heap size limit.' } }, heapTotalBytes: { type: 'long', diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index f5eb21f859bca..9810432cc3ab3 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -8017,6 +8017,24 @@ "properties": { "memory": { "properties": { + "arrayBuffersBytes": { + "type": "long", + "_meta": { + "description": "Memory allocated for array buffers. This is also included in the external value." + } + }, + "externalBytes": { + "type": "long", + "_meta": { + "description": "Memory usage of C++ objects bound to JavaScript objects managed by V8." + } + }, + "residentSetSizeBytes": { + "type": "long", + "_meta": { + "description": "Node RSS." + } + }, "heapSizeLimit": { "type": "long", "_meta": { @@ -10161,15 +10179,6 @@ "description": "Non-default value of setting." } }, - "observability:logsExplorer:allowedDataViews": { - "type": "array", - "items": { - "type": "keyword", - "_meta": { - "description": "Non-default value of setting." - } - } - }, "observability:aiAssistantLogsIndexPattern": { "type": "keyword", "_meta": { @@ -10188,6 +10197,15 @@ "description": "Non-default value of setting." } }, + "observability:logsExplorer:allowedDataViews": { + "type": "array", + "items": { + "type": "keyword", + "_meta": { + "description": "Non-default value of setting." + } + } + }, "banners:placement": { "type": "keyword", "_meta": { @@ -11893,4 +11911,4 @@ } } } -} \ No newline at end of file +} From eb5e32938289dbac7749ded47f5753a0a1b01317 Mon Sep 17 00:00:00 2001 From: Cristina Amico Date: Wed, 8 May 2024 10:58:24 +0200 Subject: [PATCH 15/34] [Fleet] Add support_agentless property in agent policy schema and preconfiguration (#182709) Closes https://github.com/elastic/kibana/issues/180377 ## Summary Add a new `support_agentless` property in agent policy and in preconfiguration; this property is only allowed when the environment has both `isServerless` set to `true` and `agentless` feature flag enabled, otherwise policy creation/update will throw error `supports_agentless is only allowed in serverless environments that support agentless feature`. No UI change is required for now as this property will be needed as part of a wider support to agentless policies. ## Testing ### Serverless - Run serverless env configured for agentless following [this guide](https://docs.elastic.dev/security-solution/cloud-security/serverless/develop-for-kibana#agentless-local-set-up) - Make sure to have `agentless` feature flag enabled - Create an agent policy with `support_agentless` property: ``` POST kbn:/api/fleet/agent_policies { "name": "New agent policy", "namespace": "default", "supports_agentless": true } ``` - Update an existing agent policy with the new property: ``` PUT kbn:/api/fleet/agent_policies/ { "name": "New agent policy", "supports_agentless": true } ``` - Create a preconfigured agent policy in kibana.dev.yml, and verify it that it's correct via `GET kbn:/api/fleet/agent_policies`: ``` xpack.fleet.agentPolicies: [ { "name": "Agentless Policy", "id": "agentless", "is_managed": true, "namespace": "default", "supports_agentless": true, }, ] ``` - Note that if `agentless` feature flag is disabled, any of the above will throw an error. ### Stateful Spin up a stateful env and verify that all of the previous commands fail with `400` and above error message. ### Checklist - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> --- .../src/constants.ts | 2 +- .../current_fields.json | 1 + .../current_mappings.json | 3 + .../check_registered_types.test.ts | 2 +- .../plugins/fleet/common/openapi/bundled.json | 4 + .../plugins/fleet/common/openapi/bundled.yaml | 5 + .../components/schemas/agent_policy.yaml | 3 + .../fleet/common/types/models/agent_policy.ts | 1 + .../fleet/server/saved_objects/index.ts | 11 ++ .../server/services/agent_policy.test.ts | 158 +++++++++++++++++- .../fleet/server/services/agent_policy.ts | 25 ++- .../server/services/preconfiguration.test.ts | 116 ++++++++++++- .../fleet/server/services/preconfiguration.ts | 16 +- .../fleet/server/types/models/agent_policy.ts | 1 + 14 files changed, 336 insertions(+), 12 deletions(-) diff --git a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts index f39d0d8ab26a8..d4861ae5808ad 100644 --- a/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts +++ b/packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts @@ -182,7 +182,7 @@ export const HASH_TO_VERSION_MAP = { 'infrastructure-monitoring-log-view|c50526fc6040c5355ed027d34d05b35c': '10.0.0', 'infrastructure-ui-source|3d1b76c39bfb2cc8296b024d73854724': '10.0.0', 'ingest_manager_settings|b91ffb075799c78ffd7dbd51a279c8c9': '10.1.0', - 'ingest-agent-policies|0fd93cd11c019b118e93a9157c22057b': '10.1.0', + 'ingest-agent-policies|0ab9774bc7728d0c0f37d841570f2872': '10.2.0', 'ingest-download-sources|0b0f6828e59805bd07a650d80817c342': '10.0.0', 'ingest-outputs|b1237f7fdc0967709e75d65d208ace05': '10.6.0', 'ingest-package-policies|ca63c4c5a946704f045803a6b975dbc6': '10.9.0', diff --git a/packages/kbn-check-mappings-update-cli/current_fields.json b/packages/kbn-check-mappings-update-cli/current_fields.json index 8d0f793317f5c..65fd6af2ce919 100644 --- a/packages/kbn-check-mappings-update-cli/current_fields.json +++ b/packages/kbn-check-mappings-update-cli/current_fields.json @@ -510,6 +510,7 @@ "revision", "schema_version", "status", + "supports_agentless", "unenroll_timeout", "updated_at", "updated_by" diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 4a1016cf62224..03a189b1549be 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -1711,6 +1711,9 @@ "status": { "type": "keyword" }, + "supports_agentless": { + "type": "boolean" + }, "unenroll_timeout": { "type": "integer" }, diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index 46893ca263afc..2fa22873190e5 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -108,7 +108,7 @@ describe('checking migration metadata changes on all registered SO types', () => "infra-custom-dashboards": "1a5994f2e05bb8a1609825ddbf5012f77c5c67f3", "infrastructure-monitoring-log-view": "5f86709d3c27aed7a8379153b08ee5d3d90d77f5", "infrastructure-ui-source": "113182d6895764378dfe7fa9fa027244f3a457c4", - "ingest-agent-policies": "d2ee0bf36a512c2ac744b0def1c822b7880f1f83", + "ingest-agent-policies": "803dc27e106440c41e8f3c3d8ee8bbb0821bcde2", "ingest-download-sources": "279a68147e62e4d8858c09ad1cf03bd5551ce58d", "ingest-outputs": "daafff49255ab700e07491376fe89f04fc998b91", "ingest-package-policies": "d63e091b2b3cf2eecaa46ae2533bdd5214a983fc", diff --git a/x-pack/plugins/fleet/common/openapi/bundled.json b/x-pack/plugins/fleet/common/openapi/bundled.json index 1e8a9ba75b0e8..38647d8218941 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.json +++ b/x-pack/plugins/fleet/common/openapi/bundled.json @@ -7602,6 +7602,10 @@ "type": "object", "description": "Advanced settings stored in the agent policy, e.g. agent_limits_go_max_procs", "nullable": true + }, + "supports_agentless": { + "type": "boolean", + "description": "Indicates whether the agent policy supports agentless integrations. Only allowed in a serverless environment." } }, "required": [ diff --git a/x-pack/plugins/fleet/common/openapi/bundled.yaml b/x-pack/plugins/fleet/common/openapi/bundled.yaml index 4f48786da4fbf..5b1cb40243649 100644 --- a/x-pack/plugins/fleet/common/openapi/bundled.yaml +++ b/x-pack/plugins/fleet/common/openapi/bundled.yaml @@ -4894,6 +4894,11 @@ components: Advanced settings stored in the agent policy, e.g. agent_limits_go_max_procs nullable: true + supports_agentless: + type: boolean + description: >- + Indicates whether the agent policy supports agentless integrations. + Only allowed in a serverless environment. required: - id - status diff --git a/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml b/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml index 070d72a5ec353..633e4e4ba89b8 100644 --- a/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml +++ b/x-pack/plugins/fleet/common/openapi/components/schemas/agent_policy.yaml @@ -73,6 +73,9 @@ properties: type: object description: Advanced settings stored in the agent policy, e.g. agent_limits_go_max_procs nullable: true + supports_agentless: + type: boolean + description: Indicates whether the agent policy supports agentless integrations. Only allowed in a serverless environment. required: - id - status diff --git a/x-pack/plugins/fleet/common/types/models/agent_policy.ts b/x-pack/plugins/fleet/common/types/models/agent_policy.ts index 1bff10bcdf564..a67293ebdecaa 100644 --- a/x-pack/plugins/fleet/common/types/models/agent_policy.ts +++ b/x-pack/plugins/fleet/common/types/models/agent_policy.ts @@ -41,6 +41,7 @@ export interface NewAgentPolicy { overrides?: { [key: string]: any } | null; advanced_settings?: { [key: string]: any } | null; keep_monitoring_alive?: boolean | null; + supports_agentless?: boolean | null; } // SO definition for this type is declared in server/types/interfaces diff --git a/x-pack/plugins/fleet/server/saved_objects/index.ts b/x-pack/plugins/fleet/server/saved_objects/index.ts index 6124205017dc5..22b5aa3f5fddb 100644 --- a/x-pack/plugins/fleet/server/saved_objects/index.ts +++ b/x-pack/plugins/fleet/server/saved_objects/index.ts @@ -164,6 +164,7 @@ export const getSavedObjectTypes = ( overrides: { type: 'flattened', index: false }, keep_monitoring_alive: { type: 'boolean' }, advanced_settings: { type: 'flattened', index: false }, + supports_agentless: { type: 'boolean' }, }, }, migrations: { @@ -184,6 +185,16 @@ export const getSavedObjectTypes = ( }, ], }, + '2': { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + supports_agentless: { type: 'boolean' }, + }, + }, + ], + }, }, }, [OUTPUT_SAVED_OBJECT_TYPE]: { diff --git a/x-pack/plugins/fleet/server/services/agent_policy.test.ts b/x-pack/plugins/fleet/server/services/agent_policy.test.ts index f844fce46c83e..1f6ae15606c46 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.test.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.test.ts @@ -17,6 +17,7 @@ import { PackagePolicyRestrictionRelatedError, FleetUnauthorizedError, HostedAgentPolicyRestrictionRelatedError, + AgentPolicyInvalidError, } from '../errors'; import type { AgentPolicy, @@ -114,7 +115,7 @@ function getAgentPolicyCreateMock() { return soClient; } let mockedLogger: jest.Mocked; -describe('agent policy', () => { +describe('Agent policy', () => { beforeEach(() => { mockedLogger = loggerMock.create(); mockedAppContextService.getLogger.mockReturnValue(mockedLogger); @@ -228,6 +229,74 @@ describe('agent policy', () => { new FleetUnauthorizedError('Tamper protection requires Platinum license') ); }); + + it('should throw AgentPolicyInvalidError if support_agentless is defined in stateful', async () => { + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ agentless: false } as any); + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isServerlessEnabled: false } as any); + + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await expect( + agentPolicyService.create(soClient, esClient, { + name: 'test', + namespace: 'default', + supports_agentless: true, + }) + ).rejects.toThrowError( + new AgentPolicyInvalidError( + 'supports_agentless is only allowed in serverless environments that support the agentless feature' + ) + ); + }); + + it('should throw AgentPolicyInvalidError if agentless feature flag is disabled in serverless', async () => { + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ agentless: false } as any); + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isServerlessEnabled: true } as any); + + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await expect( + agentPolicyService.create(soClient, esClient, { + name: 'test', + namespace: 'default', + supports_agentless: true, + }) + ).rejects.toThrowError( + new AgentPolicyInvalidError( + 'supports_agentless is only allowed in serverless environments that support the agentless feature' + ) + ); + }); + + it('should not throw error if support_agentless is set if agentless feature flag is set in serverless', async () => { + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ agentless: true } as any); + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isServerlessEnabled: true } as any); + + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await expect( + agentPolicyService.create(soClient, esClient, { + name: 'test', + namespace: 'default', + supports_agentless: true, + }) + ).resolves.not.toThrow(); + }); }); // TODO: Add more test coverage to `get` service method @@ -781,6 +850,93 @@ describe('agent policy', () => { }) ).rejects.toThrowError(new Error('Cannot enable Agent Tamper Protection: reason')); }); + + it('should throw AgentPolicyInvalidError if support_agentless is defined in stateful', async () => { + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ agentless: false } as any); + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isServerlessEnabled: false } as any); + + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + soClient.get.mockResolvedValue({ + attributes: {}, + id: 'test-id', + type: 'mocked', + references: [], + }); + + await expect( + agentPolicyService.update(soClient, esClient, 'test-id', { + name: 'test', + namespace: 'default', + supports_agentless: true, + }) + ).rejects.toThrowError( + new AgentPolicyInvalidError( + 'supports_agentless is only allowed in serverless environments that support the agentless feature' + ) + ); + }); + + it('should throw AgentPolicyInvalidError if agentless flag is disabled in serverless', async () => { + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ agentless: false } as any); + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isServerlessEnabled: true } as any); + + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + soClient.get.mockResolvedValue({ + attributes: {}, + id: 'test-id', + type: 'mocked', + references: [], + }); + + await expect( + agentPolicyService.update(soClient, esClient, 'test-id', { + name: 'test', + namespace: 'default', + supports_agentless: true, + }) + ).rejects.toThrowError( + new AgentPolicyInvalidError( + 'supports_agentless is only allowed in serverless environments that support the agentless feature' + ) + ); + }); + + it('should not throw in serverless if support_agentless is set and agentless feature flag is set', async () => { + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ agentless: true } as any); + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isServerlessEnabled: true } as any); + + const soClient = getAgentPolicyCreateMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + soClient.get.mockResolvedValue({ + attributes: {}, + id: 'test-id', + type: 'mocked', + references: [], + }); + + await expect( + agentPolicyService.update(soClient, esClient, 'test-id', { + name: 'test', + namespace: 'default', + supports_agentless: true, + }) + ).resolves.not.toThrow(); + }); }); describe('deployPolicy', () => { diff --git a/x-pack/plugins/fleet/server/services/agent_policy.ts b/x-pack/plugins/fleet/server/services/agent_policy.ts index 51b3e0d7972c1..a75028be59548 100644 --- a/x-pack/plugins/fleet/server/services/agent_policy.ts +++ b/x-pack/plugins/fleet/server/services/agent_policy.ts @@ -71,13 +71,12 @@ import type { FetchAllAgentPoliciesOptions, FetchAllAgentPolicyIdsOptions, FleetServerPolicy, - Installation, - Output, PackageInfo, } from '../../common/types'; import { AgentPolicyNameExistsError, AgentPolicyNotFoundError, + AgentPolicyInvalidError, FleetError, FleetUnauthorizedError, HostedAgentPolicyRestrictionRelatedError, @@ -88,6 +87,8 @@ import type { FullAgentConfigMap } from '../../common/types/models/agent_cm'; import { fullAgentConfigMapToYaml } from '../../common/services/agent_cm_to_yaml'; +import { appContextService } from '.'; + import { mapAgentPolicySavedObjectToAgentPolicy } from './agent_policies/utils'; import { @@ -102,7 +103,6 @@ import { incrementPackagePolicyCopyName } from './package_policies'; import { outputService } from './output'; import { agentPolicyUpdateEventHandler } from './agent_policy_update'; import { escapeSearchQueryPhrase, normalizeKuery } from './saved_object'; -import { appContextService } from './app_context'; import { getFullAgentPolicy, validateOutputForPolicy } from './agent_policies'; import { auditLoggingService } from './audit_logging'; import { licenseService } from './license'; @@ -317,6 +317,8 @@ class AgentPolicyService { ); } + this.checkAgentless(agentPolicy); + await this.requireUniqueName(soClient, agentPolicy); await validateOutputForPolicy(soClient, agentPolicy); @@ -581,6 +583,7 @@ class AgentPolicyService { } } this.checkTamperProtectionLicense(agentPolicy); + this.checkAgentless(agentPolicy); await this.checkForValidUninstallToken(agentPolicy, id); if (agentPolicy?.is_protected && !policyHasEndpointSecurity(existingAgentPolicy)) { @@ -653,6 +656,7 @@ class AgentPolicyService { 'monitoring_output_id', 'download_source_id', 'fleet_server_host_id', + 'supports_agentless', ]), ...newAgentPolicyProps, }, @@ -1474,17 +1478,26 @@ class AgentPolicyService { } } } + private checkAgentless(agentPolicy: Partial) { + const cloudSetup = appContextService.getCloud(); + if ( + (!cloudSetup?.isServerlessEnabled || + !appContextService.getExperimentalFeatures().agentless) && + agentPolicy?.supports_agentless !== undefined + ) { + throw new AgentPolicyInvalidError( + 'supports_agentless is only allowed in serverless environments that support the agentless feature' + ); + } + } } export const agentPolicyService = new AgentPolicyService(); -// TODO: remove unused parameters export async function addPackageToAgentPolicy( soClient: SavedObjectsClientContract, esClient: ElasticsearchClient, - packageToInstall: Installation, agentPolicy: AgentPolicy, - defaultOutput: Output, packageInfo: PackageInfo, packagePolicyName?: string, packagePolicyId?: string | number, diff --git a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts index fd5dfad737241..004d4b83a460a 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration.test.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration.test.ts @@ -22,6 +22,8 @@ import type { AgentPolicy, NewPackagePolicy, Output, DownloadSource } from '../t import { AGENT_POLICY_SAVED_OBJECT_TYPE } from '../constants'; +import { appContextService } from './app_context'; + import * as agentPolicy from './agent_policy'; import { @@ -300,6 +302,10 @@ jest.mock('./app_context', () => ({ generateTokenForPolicyId: jest.fn(), }), getExternalCallbacks: jest.fn(), + getCloud: jest.fn(), + getExperimentalFeatures: jest.fn().mockReturnValue({ + agentless: false, + }), }, })); @@ -461,7 +467,7 @@ describe('policy preconfiguration', () => { ); }); - it('should install prelease packages if needed', async () => { + it('should install prerelease packages if needed', async () => { const soClient = getPutPreconfiguredPackagesMock(); const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; @@ -845,6 +851,7 @@ describe('policy preconfiguration', () => { it('should not create a policy and throw an error if package is not installed for an unknown reason', async () => { const soClient = getPutPreconfiguredPackagesMock(); const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + const policies: PreconfiguredAgentPolicy[] = [ { name: 'Test policy', @@ -875,6 +882,113 @@ describe('policy preconfiguration', () => { ); }); + it('should return a non fatal error if support_agentless is defined in stateful', async () => { + const soClient = getPutPreconfiguredPackagesMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.mocked(appContextService.getExperimentalFeatures).mockReturnValue({ + agentless: true, + } as any); + + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isServerlessEnabled: false } as any); + + const policies: PreconfiguredAgentPolicy[] = [ + { + name: 'Test policy', + namespace: 'default', + id: 'test-id', + supports_agentless: true, + package_policies: [], + }, + ]; + + const { nonFatalErrors } = await ensurePreconfiguredPackagesAndPolicies( + soClient, + esClient, + policies, + [{ name: 'CANNOT_MATCH', version: 'x.y.z' }], + mockDefaultOutput, + mockDefaultDownloadService, + DEFAULT_SPACE_ID + ); + // @ts-ignore-next-line + expect(nonFatalErrors[0].error.toString()).toEqual( + 'FleetError: `supports_agentless` is only allowed in serverless environments that support the agentless feature' + ); + }); + + it('should not return an error if support_agentless is defined in serverless and agentless is enabled', async () => { + const soClient = getPutPreconfiguredPackagesMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.mocked(appContextService.getExperimentalFeatures).mockReturnValue({ + agentless: true, + } as any); + + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isServerlessEnabled: true } as any); + + const policies: PreconfiguredAgentPolicy[] = [ + { + name: 'Test policy', + namespace: 'default', + id: 'test-id', + supports_agentless: true, + package_policies: [], + }, + ]; + + const { policies: resPolicies, nonFatalErrors } = + await ensurePreconfiguredPackagesAndPolicies( + soClient, + esClient, + policies, + [{ name: 'CANNOT_MATCH', version: 'x.y.z' }], + mockDefaultOutput, + mockDefaultDownloadService, + DEFAULT_SPACE_ID + ); + expect(nonFatalErrors.length).toBe(0); + expect(resPolicies[0].id).toEqual('test-id'); + }); + + it('should return an error if agentless feature flag is disabled on serverless', async () => { + const soClient = getPutPreconfiguredPackagesMock(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + jest.mocked(appContextService.getExperimentalFeatures).mockReturnValue({ + agentless: false, + } as any); + + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isServerlessEnabled: true } as any); + + const policies: PreconfiguredAgentPolicy[] = [ + { + name: 'Test policy', + namespace: 'default', + id: 'test-id', + supports_agentless: true, + package_policies: [], + }, + ]; + + const { nonFatalErrors } = await ensurePreconfiguredPackagesAndPolicies( + soClient, + esClient, + policies, + [{ name: 'CANNOT_MATCH', version: 'x.y.z' }], + mockDefaultOutput, + mockDefaultDownloadService, + DEFAULT_SPACE_ID + ); + // @ts-ignore-next-line + expect(nonFatalErrors[0].error.toString()).toEqual( + 'FleetError: `supports_agentless` is only allowed in serverless environments that support the agentless feature' + ); + }); + it('should not attempt to recreate or modify an agent policy if its ID is unchanged', async () => { const soClient = getPutPreconfiguredPackagesMock(); const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; diff --git a/x-pack/plugins/fleet/server/services/preconfiguration.ts b/x-pack/plugins/fleet/server/services/preconfiguration.ts index 877fb343b6507..26f633cc8f021 100644 --- a/x-pack/plugins/fleet/server/services/preconfiguration.ts +++ b/x-pack/plugins/fleet/server/services/preconfiguration.ts @@ -59,6 +59,7 @@ export async function ensurePreconfiguredPackagesAndPolicies( spaceId: string ): Promise { const logger = appContextService.getLogger(); + const cloudSetup = appContextService.getCloud(); // Validate configured packages to ensure there are no version conflicts const packageNames = groupBy(packages, (pkg) => pkg.name); @@ -160,6 +161,19 @@ export async function ensurePreconfiguredPackagesAndPolicies( ); } + if ( + (!cloudSetup?.isServerlessEnabled || + !appContextService.getExperimentalFeatures().agentless) && + preconfiguredAgentPolicy?.supports_agentless !== undefined + ) { + throw new FleetError( + i18n.translate('xpack.fleet.preconfiguration.support_agentless', { + defaultMessage: + '`supports_agentless` is only allowed in serverless environments that support the agentless feature', + }) + ); + } + const { created, policy } = await agentPolicyService.ensurePreconfiguredAgentPolicy( soClient, esClient, @@ -372,9 +386,7 @@ async function addPreconfiguredPolicyPackages( await addPackageToAgentPolicy( soClient, esClient, - installedPackage, agentPolicy, - defaultOutput, packageInfo, name, id, diff --git a/x-pack/plugins/fleet/server/types/models/agent_policy.ts b/x-pack/plugins/fleet/server/types/models/agent_policy.ts index 748a5c81c1bfb..ed2a50854c58b 100644 --- a/x-pack/plugins/fleet/server/types/models/agent_policy.ts +++ b/x-pack/plugins/fleet/server/types/models/agent_policy.ts @@ -83,6 +83,7 @@ export const AgentPolicyBaseSchema = { ) ), ...getSettingsAPISchema('AGENT_POLICY_ADVANCED_SETTINGS'), + supports_agentless: schema.maybe(schema.boolean({ defaultValue: false })), }; export const NewAgentPolicySchema = schema.object({ From 810e8201187bdb1c3066e26d042a2edd8d67154b Mon Sep 17 00:00:00 2001 From: Marco Liberati Date: Wed, 8 May 2024 11:43:32 +0200 Subject: [PATCH 16/34] Fix treeshake on shared-ux packages (#182790) ## Summary This PR should fix some regression due to some previous tree-shake configs from #182348 . The fix tells now webpack to always import css, so final bundle size will increase back again (not all of it, but a good 70%). --- packages/shared-ux/avatar/solution/package.json | 2 +- packages/shared-ux/button/exit_full_screen/package.json | 2 +- packages/shared-ux/chrome/navigation/package.json | 2 +- packages/shared-ux/file/file_picker/impl/package.json | 2 +- packages/shared-ux/page/solution_nav/package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/shared-ux/avatar/solution/package.json b/packages/shared-ux/avatar/solution/package.json index 84cd3fb6e597d..7ebb65ba7cd32 100644 --- a/packages/shared-ux/avatar/solution/package.json +++ b/packages/shared-ux/avatar/solution/package.json @@ -3,5 +3,5 @@ "private": true, "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "sideEffects": false + "sideEffects": ["*.scss"] } \ No newline at end of file diff --git a/packages/shared-ux/button/exit_full_screen/package.json b/packages/shared-ux/button/exit_full_screen/package.json index 0cbd7067a2465..338264b5ecbf5 100644 --- a/packages/shared-ux/button/exit_full_screen/package.json +++ b/packages/shared-ux/button/exit_full_screen/package.json @@ -3,5 +3,5 @@ "private": true, "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "sideEffects": false + "sideEffects": ["*.scss"] } \ No newline at end of file diff --git a/packages/shared-ux/chrome/navigation/package.json b/packages/shared-ux/chrome/navigation/package.json index 3409c5e815049..74a4a5b42a923 100644 --- a/packages/shared-ux/chrome/navigation/package.json +++ b/packages/shared-ux/chrome/navigation/package.json @@ -3,5 +3,5 @@ "private": true, "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "sideEffects": false + "sideEffects": ["*.scss"] } \ No newline at end of file diff --git a/packages/shared-ux/file/file_picker/impl/package.json b/packages/shared-ux/file/file_picker/impl/package.json index b2e7d0fb87403..1f6ae6648a081 100644 --- a/packages/shared-ux/file/file_picker/impl/package.json +++ b/packages/shared-ux/file/file_picker/impl/package.json @@ -3,5 +3,5 @@ "private": true, "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "sideEffects": false + "sideEffects": ["*.scss"] } diff --git a/packages/shared-ux/page/solution_nav/package.json b/packages/shared-ux/page/solution_nav/package.json index f133dbd40daab..53a5979da78b1 100644 --- a/packages/shared-ux/page/solution_nav/package.json +++ b/packages/shared-ux/page/solution_nav/package.json @@ -3,5 +3,5 @@ "private": true, "version": "1.0.0", "license": "SSPL-1.0 OR Elastic License 2.0", - "sideEffects": false + "sideEffects": ["*.scss"] } \ No newline at end of file From 216ecd774e7c041e806dfa624d456716f4c1fbfb Mon Sep 17 00:00:00 2001 From: Katerina Date: Wed, 8 May 2024 13:30:30 +0300 Subject: [PATCH 17/34] [APM] Add advanced setting for enabling multi signal views in APM (#182862) ## Summary close #182678 key: `observability:apmEnableMultiSignal` ![image](https://github.com/elastic/kibana/assets/3369346/d45a60f2-4d7e-42d8-9a29-2af69bcb0326) --- .../settings/setting_ids/index.ts | 1 + .../settings/observability_project/index.ts | 1 + .../server/collectors/management/schema.ts | 4 ++++ .../server/collectors/management/types.ts | 1 + src/plugins/telemetry/schema/oss_plugins.json | 6 ++++++ .../observability/common/ui_settings_keys.ts | 1 + .../observability/server/ui_settings.ts | 18 ++++++++++++++++++ 7 files changed, 32 insertions(+) diff --git a/packages/kbn-management/settings/setting_ids/index.ts b/packages/kbn-management/settings/setting_ids/index.ts index f4a30dac6cb12..93646978aa1a6 100644 --- a/packages/kbn-management/settings/setting_ids/index.ts +++ b/packages/kbn-management/settings/setting_ids/index.ts @@ -139,6 +139,7 @@ export const OBSERVABILITY_APM_ENABLE_SERVICE_INVENTORY_TABLE_SEARCH_BAR = 'observability:apmEnableServiceInventoryTableSearchBar'; export const OBSERVABILITY_LOGS_EXPLORER_ALLOWED_DATA_VIEWS_ID = 'observability:logsExplorer:allowedDataViews'; +export const OBSERVABILITY_APM_ENABLE_MULTI_SIGNAL = 'observability:apmEnableMultiSignal'; // Reporting settings export const XPACK_REPORTING_CUSTOM_PDF_LOGO_ID = 'xpackReporting:customPdfLogo'; diff --git a/packages/serverless/settings/observability_project/index.ts b/packages/serverless/settings/observability_project/index.ts index b6cd0a21fb0f3..e9b5ceeee5eed 100644 --- a/packages/serverless/settings/observability_project/index.ts +++ b/packages/serverless/settings/observability_project/index.ts @@ -32,4 +32,5 @@ export const OBSERVABILITY_PROJECT_SETTINGS = [ settings.OBSERVABILITY_LOGS_EXPLORER_ALLOWED_DATA_VIEWS_ID, settings.OBSERVABILITY_APM_ENABLE_TABLE_SEARCH_BAR, settings.OBSERVABILITY_APM_ENABLE_SERVICE_INVENTORY_TABLE_SEARCH_BAR, + settings.OBSERVABILITY_APM_ENABLE_MULTI_SIGNAL, ]; 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 1cf68fdf92f36..fc4786dd5ca3f 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts @@ -468,6 +468,10 @@ export const stackManagementSchema: MakeSchemaFrom = { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, }, + 'observability:apmEnableMultiSignal': { + type: 'boolean', + _meta: { description: 'Non-default value of setting.' }, + }, 'observability:apmAWSLambdaPriceFactor': { 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 8464207aaa1d6..bc1c315edae29 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts @@ -161,6 +161,7 @@ export interface UsageStats { 'observability:apmTraceExplorerTab': boolean; 'observability:apmEnableCriticalPath': boolean; 'observability:apmEnableProfilingIntegration': boolean; + 'observability:apmEnableMultiSignal': boolean; 'observability:profilingShowErrorFrames': boolean; 'securitySolution:enableGroupedNav': boolean; 'securitySolution:showRelatedIntegrations': boolean; diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index 9810432cc3ab3..717e5ebabbe1b 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -10167,6 +10167,12 @@ "description": "Non-default value of setting." } }, + "observability:apmEnableMultiSignal": { + "type": "boolean", + "_meta": { + "description": "Non-default value of setting." + } + }, "observability:apmAWSLambdaPriceFactor": { "type": "text", "_meta": { diff --git a/x-pack/plugins/observability_solution/observability/common/ui_settings_keys.ts b/x-pack/plugins/observability_solution/observability/common/ui_settings_keys.ts index 87f60b977691c..46bbfa2c08757 100644 --- a/x-pack/plugins/observability_solution/observability/common/ui_settings_keys.ts +++ b/x-pack/plugins/observability_solution/observability/common/ui_settings_keys.ts @@ -24,6 +24,7 @@ export const enableInfrastructureAssetCustomDashboards = export const enableAwsLambdaMetrics = 'observability:enableAwsLambdaMetrics'; export const enableAgentExplorerView = 'observability:apmAgentExplorerView'; export const apmEnableTableSearchBar = 'observability:apmEnableTableSearchBar'; +export const apmEnableMultiSignal = 'observability:apmEnableMultiSignal'; export const apmEnableServiceInventoryTableSearchBar = 'observability:apmEnableServiceInventoryTableSearchBar'; export const apmAWSLambdaPriceFactor = 'observability:apmAWSLambdaPriceFactor'; diff --git a/x-pack/plugins/observability_solution/observability/server/ui_settings.ts b/x-pack/plugins/observability_solution/observability/server/ui_settings.ts index 2b5468e0715f8..6ce519dbbc496 100644 --- a/x-pack/plugins/observability_solution/observability/server/ui_settings.ts +++ b/x-pack/plugins/observability_solution/observability/server/ui_settings.ts @@ -21,6 +21,7 @@ import { apmLabsButton, enableAgentExplorerView, apmEnableTableSearchBar, + apmEnableMultiSignal, enableAwsLambdaMetrics, apmAWSLambdaPriceFactor, apmAWSLambdaRequestCostPerMillion, @@ -326,6 +327,23 @@ export const uiSettings: Record = { requiresPageReload: true, type: 'boolean', }, + [apmEnableMultiSignal]: { + category: [observabilityFeatureId], + name: i18n.translate('xpack.observability.apmEnableMultiSignal', { + defaultMessage: 'Multi signal APM', + }), + description: i18n.translate('xpack.observability.apmEnableMultiSignalDescription', { + defaultMessage: + '{technicalPreviewLabel} Enable the multi-signal feature in APM, which allows you to monitor services from logs and traces.', + values: { + technicalPreviewLabel: `[${technicalPreviewLabel}]`, + }, + }), + schema: schema.boolean(), + value: false, + requiresPageReload: true, + type: 'boolean', + }, [apmEnableServiceInventoryTableSearchBar]: { category: [observabilityFeatureId], name: i18n.translate('xpack.observability.apmEnableServiceInventoryTableSearchBar', { From aa1df6d911993dde6ab434aafc74d73c690f897c Mon Sep 17 00:00:00 2001 From: Jan Monschke Date: Wed, 8 May 2024 12:34:23 +0200 Subject: [PATCH 18/34] [Threat Hunting Investigations] Show the correct stats in unified field list (#180850) ## Summary Fixes https://github.com/elastic/security-team/issues/9077 Enables correct rendering of top values in the unified field list through a new `dataService` for timeline. This `timelineDataService` is synced with the current timeline's range filter, the selected `indexPattern` and the special `combinedQuery` that timeline is based on. ### Example Two values for `event.category` are present in the current timeline's alerts (`behavior` and `process`): Screenshot 2024-04-15 at 22 06 33 When filtering for a specific `_id`, only the `process` value is showing and the counts are also correct (`1`): Screenshot 2024-04-15 at 22 06 56 ### A wild bugfix appeared While working on this change, I noticed some irregularities that stemmed from a race condition between updates of the filters in redux and in filter manager. In a worst case scenario, this race condition could lead to marking unchanged timelines as changed when opened. Before this fix/refactoring, `filterManager` updates where propagated from a subscription in `QueryBarTimeline`, which is quite deep in the component tree. This resulted in prop drilling (`setFilter`) and bubbling up of changes to where they are handled (`QueryBarTimeline` -> `SearchOrFilter` -> `StatefulSearchOrFilter`). Before: ```mermaid flowchart TD subgraph Redux Store end Store -- filters,setFilters --> StatefulSearchOrFilter StatefulSearchOrFilter -. setFilters(filters) .-> Store StatefulSearchOrFilter -- prop:filters,onFiltersUpdated --> FilterItems --> FilterItem FilterItem -. onRemove .-> FilterItems FilterItems -. onFiltersUpdated(filters) .-> StatefulSearchOrFilter StatefulSearchOrFilter -- prop:setFilters,filters --> SearchOrFilter SearchOrFilter -. setFilters(filters) .-> StatefulSearchOrFilter SearchOrFilter -- prop:setFilters,filters --> QueryBarTimeline QueryBarTimeline -. setFilters(filters) .-> SearchOrFilter QueryBarTimeline ==> |subscribe| TimelineFilterManager TimelineFilterManager -.-> |next| QueryBarTimeline FilterIn ~~~ TimelineFilterManager FilterOut ~~~ TimelineFilterManager DisableFilter ~~~ TimelineFilterManager FilterIn -.-> TimelineFilterManager FilterOut -.-> TimelineFilterManager DisableFilter -.-> TimelineFilterManager ``` In this refactoring, `StatefulSearchOrFilter` is directly subscribing to filter manager changes and `setFilters` has been removed, making `QueryBarTimeline` a proper leaf node. `StatefulSearchOrFilter` now also contains all of the synchronization code between filter manager and redux. After: ```mermaid flowchart TD subgraph Redux Store end Store -- filters,setFilters --> StatefulSearchOrFilter StatefulSearchOrFilter -. setFilters(filters) .-> Store StatefulSearchOrFilter -- prop:filters,onFiltersUpdated --> FilterItems FilterItems -. onFiltersUpdated(filters) .-> StatefulSearchOrFilter StatefulSearchOrFilter -- prop:filters --> SearchOrFilter SearchOrFilter -- prop:setFilters,filters --> QueryBarTimeline StatefulSearchOrFilter ==> |subscribe| TimelineFilterManager TimelineFilterManager -.-> |next| StatefulSearchOrFilter subgraph FilterManager FilterIn ~~~ TimelineFilterManager FilterOut ~~~ TimelineFilterManager DisableFilter ~~~ TimelineFilterManager FilterIn -.-> TimelineFilterManager FilterOut -.-> TimelineFilterManager DisableFilter -.-> TimelineFilterManager end ``` ### - make sure `unifiedComponentsInTimelineEnabled` is enabled before testing this PR ### Checklist - [x] memoize `combinedQueries` - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- x-pack/plugins/security_solution/kibana.jsonc | 1 + .../filter/cell_action/filter_in.test.ts | 6 +- .../actions/filter/cell_action/filter_in.ts | 5 +- .../filter/cell_action/filter_out.test.ts | 10 ++- .../actions/filter/cell_action/filter_out.ts | 5 +- .../actions/filter/lens/create_action.test.ts | 2 +- .../actions/filter/lens/create_action.ts | 13 +++- .../hover_actions/use_hover_action_items.tsx | 5 +- .../containers/sourcerer/index.test.tsx | 28 +++++++++ .../common/containers/sourcerer/index.tsx | 17 +++-- .../common/lib/kibana/kibana_react.mock.ts | 13 ++-- .../public/common/lib/kuery/index.ts | 10 ++- .../public/plugin_services.ts | 45 ++++++++++--- .../timelines/components/timeline/helpers.tsx | 6 ++ .../timeline/query_bar/eql/index.tsx | 8 +-- .../timeline/query_bar/index.test.tsx | 9 +-- .../components/timeline/query_bar/index.tsx | 50 ++------------- .../timeline/search_or_filter/index.tsx | 36 ++++++++--- .../search_or_filter/search_or_filter.tsx | 3 - .../components/timeline/tabs/index.test.tsx | 8 +++ .../timeline/tabs/query/index.test.tsx | 4 ++ .../components/timeline/tabs/query/index.tsx | 63 ++++++++++++++----- .../unified_components/index.test.tsx | 7 +-- .../timeline/unified_components/index.tsx | 12 ++-- .../plugins/security_solution/public/types.ts | 4 +- .../cypress/tasks/search_bar.ts | 3 + 26 files changed, 244 insertions(+), 129 deletions(-) diff --git a/x-pack/plugins/security_solution/kibana.jsonc b/x-pack/plugins/security_solution/kibana.jsonc index c9f4b85b8c3d8..14741ec4c37e0 100644 --- a/x-pack/plugins/security_solution/kibana.jsonc +++ b/x-pack/plugins/security_solution/kibana.jsonc @@ -53,6 +53,7 @@ "notifications", "savedSearch", "unifiedDocViewer", + "charts" ], "optionalPlugins": [ "cloudExperiments", diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts index 178757d835785..bb395829bcdff 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.test.ts @@ -108,7 +108,7 @@ describe('createFilterInCellActionFactory', () => { it('should execute using generic filterManager', async () => { await filterInAction.execute(dataTableContext); expect(mockGlobalFilterManager.addFilters).toHaveBeenCalled(); - expect(services.timelineFilterManager.addFilters).not.toHaveBeenCalled(); + expect(services.timelineDataService.query.filterManager.addFilters).not.toHaveBeenCalled(); }); it('should show warning if value type is unsupported', async () => { @@ -122,7 +122,7 @@ describe('createFilterInCellActionFactory', () => { ], }); expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled(); - expect(services.timelineFilterManager.addFilters).not.toHaveBeenCalled(); + expect(services.timelineDataService.query.filterManager.addFilters).not.toHaveBeenCalled(); expect(mockWarningToast).toHaveBeenCalled(); }); }); @@ -135,7 +135,7 @@ describe('createFilterInCellActionFactory', () => { it('should execute using timeline filterManager', async () => { await filterInAction.execute(timelineContext); - expect(services.timelineFilterManager.addFilters).toHaveBeenCalled(); + expect(services.timelineDataService.query.filterManager.addFilters).toHaveBeenCalled(); expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled(); }); }); diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts index fb85c32963d01..3a92021089361 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_in.ts @@ -29,6 +29,9 @@ export const createFilterInCellActionFactory = ({ }) => { const { filterManager } = services.data.query; const { notifications } = services; + const { + query: { filterManager: timelineFilterManager }, + } = services.timelineDataService; const genericFilterInActionFactory = createFilterInActionFactory({ filterManager, notifications, @@ -65,7 +68,7 @@ export const createFilterInCellActionFactory = ({ const addFilter = metadata?.negateFilters === true ? addFilterOut : addFilterIn; if (metadata?.scopeId && isTimelineScope(metadata.scopeId)) { - addFilter({ filterManager: services.timelineFilterManager, fieldName, value, dataViewId }); + addFilter({ filterManager: timelineFilterManager, fieldName, value, dataViewId }); } else { addFilter({ filterManager, fieldName, value, dataViewId }); } diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts index 23e7fb7e3f662..43238b1d988e8 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.test.ts @@ -105,7 +105,9 @@ describe('createFilterOutCellActionFactory', () => { it('should execute using generic filterManager', async () => { await filterOutAction.execute(dataTableContext); expect(mockGlobalFilterManager.addFilters).toHaveBeenCalled(); - expect(mockServices.timelineFilterManager.addFilters).not.toHaveBeenCalled(); + expect( + mockServices.timelineDataService.query.filterManager.addFilters + ).not.toHaveBeenCalled(); }); it('should show warning if value type is unsupported', async () => { @@ -119,7 +121,9 @@ describe('createFilterOutCellActionFactory', () => { ], }); expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled(); - expect(mockServices.timelineFilterManager.addFilters).not.toHaveBeenCalled(); + expect( + mockServices.timelineDataService.query.filterManager.addFilters + ).not.toHaveBeenCalled(); expect(mockWarningToast).toHaveBeenCalled(); }); }); @@ -132,7 +136,7 @@ describe('createFilterOutCellActionFactory', () => { it('should execute using timeline filterManager', async () => { await filterOutAction.execute(timelineContext); - expect(mockServices.timelineFilterManager.addFilters).toHaveBeenCalled(); + expect(mockServices.timelineDataService.query.filterManager.addFilters).toHaveBeenCalled(); expect(mockGlobalFilterManager.addFilters).not.toHaveBeenCalled(); }); }); diff --git a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts index bbc433e94256b..f177413901448 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/cell_action/filter_out.ts @@ -29,6 +29,9 @@ export const createFilterOutCellActionFactory = ({ }) => { const { filterManager } = services.data.query; const { notifications } = services; + const { + query: { filterManager: timelineFilterManager }, + } = services.timelineDataService; const genericFilterOutActionFactory = createFilterOutActionFactory({ filterManager, @@ -65,7 +68,7 @@ export const createFilterOutCellActionFactory = ({ const addFilter = metadata?.negateFilters === true ? addFilterIn : addFilterOut; if (metadata?.scopeId && isTimelineScope(metadata.scopeId)) { - addFilter({ filterManager: services.timelineFilterManager, fieldName, value, dataViewId }); + addFilter({ filterManager: timelineFilterManager, fieldName, value, dataViewId }); } else { addFilter({ filterManager, fieldName, value, dataViewId }); } diff --git a/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.test.ts b/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.test.ts index 1efbbc9960146..d8f004f063ecb 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.test.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.test.ts @@ -26,7 +26,7 @@ jest.mock('../../../timelines/store', () => ({ describe('createFilterLensAction', () => { const mockServices = { - timelineFilterManager: 'mockTimelineFilterManager', + timelineDataService: { query: { filterManager: 'mockTimelineFilterManager' } }, data: { query: { filterManager: 'mockFilterManager' } }, application: { currentAppId$: of('appId') }, topValuesPopover: { diff --git a/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts b/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts index ecfe71bc3a112..a6d69bf1b3530 100644 --- a/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts +++ b/x-pack/plugins/security_solution/public/actions/filter/lens/create_action.ts @@ -46,7 +46,16 @@ export const createFilterLensAction = ({ services, negate, }: CreateFilterLensActionParams) => { - const { application, notifications, data: dataService, topValuesPopover } = services; + const { + application, + notifications, + data: dataService, + topValuesPopover, + timelineDataService, + } = services; + const { + query: { filterManager: timelineFilterManager }, + } = timelineDataService; let currentAppId: string | undefined; application.currentAppId$.subscribe((appId) => { @@ -93,7 +102,7 @@ export const createFilterLensAction = ({ const timeline = getTimelineById(store.getState(), TimelineId.active); // timeline is open add the filter to timeline, otherwise add filter to global filters const filterManager = timeline?.show - ? services.timelineFilterManager + ? timelineFilterManager : dataService.query.filterManager; // If value type is value_count, we want to filter an `Exists` filter instead of a `Term` filter diff --git a/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx b/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx index 866acee43b6d5..188a10c06036c 100644 --- a/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx +++ b/x-pack/plugins/security_solution/public/common/components/hover_actions/use_hover_action_items.tsx @@ -82,7 +82,10 @@ export const useHoverActionItems = ({ }: UseHoverActionItemsProps): UseHoverActionItems => { const kibana = useKibana(); const dispatch = useDispatch(); - const { timelines, timelineFilterManager, analytics, i18n, theme } = kibana.services; + const { timelines, timelineDataService, analytics, i18n, theme } = kibana.services; + const { + query: { filterManager: timelineFilterManager }, + } = timelineDataService; const dataViewId = useDataViewId(getSourcererScopeId(scopeId ?? '')); // Common actions used by the alert table and alert flyout diff --git a/x-pack/plugins/security_solution/public/common/containers/sourcerer/index.test.tsx b/x-pack/plugins/security_solution/public/common/containers/sourcerer/index.test.tsx index eb218e626f176..88b58e46adbf8 100644 --- a/x-pack/plugins/security_solution/public/common/containers/sourcerer/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/containers/sourcerer/index.test.tsx @@ -664,6 +664,34 @@ describe('Sourcerer Hooks', () => { expect(result.current.indexPattern).toHaveProperty('getName'); }); }); + + it('should update the title of the data view according to the selected patterns', async () => { + const { result, rerender } = renderHook( + () => useSourcererDataView(), + { + wrapper: ({ children }) => {children}, + } + ); + + expect(result.current.sourcererDataView?.title).toBe( + 'apm-*-transaction*,auditbeat-*,endgame-*,filebeat-*,logs-*,packetbeat-*,traces-apm*,winlogbeat-*,-*elastic-cloud-logs-*' + ); + + const testPatterns = ['anotherTestPattern', 'justATestPattern']; + await act(async () => { + store.dispatch( + sourcererActions.setSelectedDataView({ + id: SourcererScopeName.default, + selectedDataViewId: 'security-solution-default', + selectedPatterns: testPatterns, + }) + ); + + await rerender(); + + expect(result.current.sourcererDataView?.title).toBe(testPatterns.join(',')); + }); + }); }); }); diff --git a/x-pack/plugins/security_solution/public/common/containers/sourcerer/index.tsx b/x-pack/plugins/security_solution/public/common/containers/sourcerer/index.tsx index 0a8985d5bfb86..6ae176890291d 100644 --- a/x-pack/plugins/security_solution/public/common/containers/sourcerer/index.tsx +++ b/x-pack/plugins/security_solution/public/common/containers/sourcerer/index.tsx @@ -445,11 +445,18 @@ export const useSourcererDataView = ( } }, [missingPatterns, selectedDataView, selectedPatterns]); - const sourcererDataView = useMemo( - () => - selectedDataView == null || missingPatterns.length > 0 ? legacyDataView : selectedDataView, - [legacyDataView, missingPatterns.length, selectedDataView] - ); + const sourcererDataView = useMemo(() => { + const _dv = + selectedDataView == null || missingPatterns.length > 0 ? legacyDataView : selectedDataView; + // Make sure the title is up to date, so that the correct index patterns are used everywhere + return { + ..._dv, + dataView: { + ..._dv.dataView, + title: selectedPatterns.join(','), + }, + }; + }, [legacyDataView, missingPatterns.length, selectedDataView, selectedPatterns]); const indicesExist = useMemo(() => { if (loading || sourcererDataView.loading) { diff --git a/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts b/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts index d3aa07d0f6cda..f20679d68884c 100644 --- a/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts +++ b/x-pack/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts @@ -14,7 +14,6 @@ import { coreMock, themeServiceMock } from '@kbn/core/public/mocks'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { securityMock } from '@kbn/security-plugin/public/mocks'; -import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock'; import { DEFAULT_APP_REFRESH_INTERVAL, @@ -128,7 +127,7 @@ export const createStartServicesMock = ( const guidedOnboarding = guidedOnboardingMock.createStart(); const cloud = cloudMock.createStart(); const mockSetHeaderActionMenu = jest.fn(); - const mockTimelineFilterManager = createFilterManagerMock(); + const timelineDataService = dataPluginMock.createStartContract(); const alerting = alertingPluginMock.createStartContract(); /* @@ -136,17 +135,17 @@ export const createStartServicesMock = ( * when data service is passed through as a prop * * */ - data.query.timefilter.timefilter.getAbsoluteTime = jest.fn(() => ({ + timelineDataService.query.timefilter.timefilter.getAbsoluteTime = jest.fn(() => ({ from: '2021-08-31T22:00:00.000Z', to: '2022-09-01T09:16:29.553Z', })); - data.query.timefilter.timefilter.getTime = jest.fn(() => { + timelineDataService.query.timefilter.timefilter.getTime = jest.fn(() => { return { from: 'now-15m', to: 'now' }; }); - data.query.timefilter.timefilter.getRefreshInterval = jest.fn(() => { + timelineDataService.query.timefilter.timefilter.getRefreshInterval = jest.fn(() => { return { pause: true, value: 1000 }; }); - data.query.timefilter.timefilter.calculateBounds = jest.fn(calculateBounds); + timelineDataService.query.timefilter.timefilter.calculateBounds = jest.fn(calculateBounds); /** ************************************************* */ return { @@ -251,7 +250,7 @@ export const createStartServicesMock = ( fieldFormats: fieldFormatsMock, dataViewFieldEditor: indexPatternFieldEditorPluginMock.createStartContract(), upselling: new UpsellingService(), - timelineFilterManager: mockTimelineFilterManager, + timelineDataService, alerting, } as unknown as StartServices; }; diff --git a/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts b/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts index 487917f381b9b..5018abe6bdf62 100644 --- a/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts +++ b/x-pack/plugins/security_solution/public/common/lib/kuery/index.ts @@ -231,6 +231,12 @@ export const convertToBuildEsQuery = ({ } }; +export interface CombinedQuery { + filterQuery: string | undefined; + kqlError: Error | undefined; + baseKqlQuery: Query; +} + export const combineQueries = ({ config, dataProviders = [], @@ -239,7 +245,7 @@ export const combineQueries = ({ filters = [], kqlQuery, kqlMode, -}: CombineQueries): { filterQuery: string | undefined; kqlError: Error | undefined } | null => { +}: CombineQueries): CombinedQuery | null => { const kuery: Query = { query: '', language: kqlQuery.language }; if (isDataProviderEmpty(dataProviders) && isEmpty(kqlQuery.query) && isEmpty(filters)) { return null; @@ -254,6 +260,7 @@ export const combineQueries = ({ return { filterQuery, kqlError, + baseKqlQuery: kuery, }; } @@ -281,5 +288,6 @@ export const combineQueries = ({ return { filterQuery, kqlError, + baseKqlQuery: kuery, }; }; diff --git a/x-pack/plugins/security_solution/public/plugin_services.ts b/x-pack/plugins/security_solution/public/plugin_services.ts index dceb1597715cf..1ce2292e2d9bf 100644 --- a/x-pack/plugins/security_solution/public/plugin_services.ts +++ b/x-pack/plugins/security_solution/public/plugin_services.ts @@ -6,7 +6,7 @@ */ import type { AppMountParameters, CoreSetup, CoreStart, PackageInfo } from '@kbn/core/public'; -import { FilterManager, NowProvider, QueryService } from '@kbn/data-plugin/public'; +import { NowProvider, QueryService } from '@kbn/data-plugin/public'; import type { DataPublicPluginStart, QueryStart } from '@kbn/data-plugin/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; import { initTelemetry, TelemetryService } from './common/lib/telemetry'; @@ -31,6 +31,7 @@ import type { export class PluginServices { private readonly telemetry: TelemetryService = new TelemetryService(); private readonly queryService: QueryService = new QueryService(); + private readonly timelineQueryService: QueryService = new QueryService(); private readonly storage = new Storage(localStorage); private readonly sessionStorage = new Storage(sessionStorage); @@ -69,7 +70,13 @@ export class PluginServices { { prebuiltRulesPackageVersion: this.prebuiltRulesPackageVersion } ); - this.queryService?.setup({ + this.queryService.setup({ + uiSettings: coreSetup.uiSettings, + storage: this.storage, + nowProvider: new NowProvider(), + }); + + this.timelineQueryService.setup({ uiSettings: coreSetup.uiSettings, storage: this.storage, nowProvider: new NowProvider(), @@ -92,6 +99,7 @@ export class PluginServices { public stop() { this.queryService.stop(); + this.timelineQueryService.stop(); licenseService.stop(); } @@ -105,12 +113,23 @@ export class PluginServices { const { savedObjectsTaggingOss, ...plugins } = startPlugins; - const query = this.queryService.start({ - uiSettings: coreStart.uiSettings, - storage: this.storage, - http: coreStart.http, - }); - const customDataService = this.startCustomDataService(query, startPlugins.data); + const customDataService = this.startCustomDataService( + this.queryService.start({ + uiSettings: coreStart.uiSettings, + storage: this.storage, + http: coreStart.http, + }), + startPlugins.data + ); + + const timelineDataService = this.startTimelineDataService( + this.timelineQueryService.start({ + uiSettings: coreStart.uiSettings, + storage: this.storage, + http: coreStart.http, + }), + startPlugins.data + ); return { ...coreStart, @@ -128,8 +147,8 @@ export class PluginServices { contentManagement: startPlugins.contentManagement, telemetry: this.telemetry.start(), customDataService, + timelineDataService, topValuesPopover: new TopValuesPopoverService(), - timelineFilterManager: new FilterManager(coreStart.uiSettings), }; } @@ -150,4 +169,12 @@ export class PluginServices { customDataService.query.filterManager._name = 'customFilterManager'; return customDataService; }; + + private startTimelineDataService = (query: QueryStart, data: DataPublicPluginStart) => { + // Used in the unified timeline + return { + ...data, + query, + }; + }; } 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 0f22f4ea15cac..82ea7bac73fad 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 @@ -7,6 +7,7 @@ import { isEmpty, isNumber } from 'lodash/fp'; +import type { Filter } from '@kbn/es-query'; import { elementOrChildrenHasFocus, getFocusedAriaColindexCell, @@ -280,3 +281,8 @@ export const buildIsOneOfQueryMatch = ({ export const isPrimitiveArray = (value: unknown): value is Array => Array.isArray(value) && (value.every((x) => typeof x === 'string') || value.every((x) => typeof x === 'number')); + +export const TIMELINE_FILTER_DROP_AREA = 'timeline-filter-drop-area'; + +export const getNonDropAreaFilters = (filters: Filter[] = []) => + filters.filter((f: Filter) => f.meta.controlledBy !== TIMELINE_FILTER_DROP_AREA); diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/eql/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/eql/index.tsx index 8e165a2303036..0758ec73271b0 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/eql/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/eql/index.tsx @@ -8,7 +8,7 @@ import { isEmpty, isEqual } from 'lodash'; import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useDispatch } from 'react-redux'; -import styled from 'styled-components'; +import { css } from '@emotion/css'; import type { EqlOptionsSelected, @@ -64,7 +64,7 @@ const schema: FormSchema = { }, }; -const HiddenUseField = styled(UseField)` +const hiddenUseFieldClassName = css` display: none; `; @@ -188,8 +188,8 @@ export const EqlQueryBarTimeline = memo(({ timelineId }: { timelineId: string }) return (
- - + + { isRefreshPaused={true} refreshInterval={3000} savedQueryId={null} - setFilters={mockSetFilters} setSavedQueryId={mockSetSavedQueryId} timelineId="timline-real-id" updateReduxTime={mockUpdateReduxTime} @@ -123,7 +122,6 @@ describe('Timeline QueryBar ', () => { isRefreshPaused={true} refreshInterval={3000} savedQueryId={null} - setFilters={mockSetFilters} setSavedQueryId={mockSetSavedQueryId} timelineId="timeline-real-id" updateReduxTime={mockUpdateReduxTime} @@ -161,7 +159,6 @@ describe('Timeline QueryBar ', () => { isRefreshPaused={true} refreshInterval={3000} savedQueryId={null} - setFilters={mockSetFilters} setSavedQueryId={mockSetSavedQueryId} timelineId="timeline-real-id" updateReduxTime={mockUpdateReduxTime} @@ -201,7 +198,6 @@ describe('Timeline QueryBar ', () => { isRefreshPaused={true} refreshInterval={3000} savedQueryId={null} - setFilters={mockSetFilters} setSavedQueryId={mockSetSavedQueryId} timelineId="timeline-real-id" updateReduxTime={mockUpdateReduxTime} @@ -239,7 +235,6 @@ describe('Timeline QueryBar ', () => { isRefreshPaused={true} refreshInterval={3000} savedQueryId={null} - setFilters={mockSetFilters} setSavedQueryId={mockSetSavedQueryId} timelineId="timeline-real-id" updateReduxTime={mockUpdateReduxTime} diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/index.tsx index 73d83469413c4..749c3512cbd20 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/query_bar/index.tsx @@ -6,10 +6,8 @@ */ import { isEmpty } from 'lodash/fp'; -import React, { memo, useCallback, useState, useEffect } from 'react'; +import React, { memo, useCallback, useState, useEffect, useMemo } from 'react'; import { useDispatch } from 'react-redux'; -import { Subscription } from 'rxjs'; -import deepEqual from 'fast-deep-equal'; import type { Filter, Query } from '@kbn/es-query'; import { FilterStateStore } from '@kbn/es-query'; @@ -25,7 +23,7 @@ import { useSavedQueryServices } from '../../../../common/utils/saved_query_serv import type { DispatchUpdateReduxTime } from '../../../../common/components/super_date_picker'; import { QueryBar } from '../../../../common/components/query_bar'; import type { DataProvider } from '../data_providers/data_provider'; -import { buildGlobalQuery } from '../helpers'; +import { TIMELINE_FILTER_DROP_AREA, buildGlobalQuery, getNonDropAreaFilters } from '../helpers'; import { timelineActions } from '../../../store'; import type { KueryFilterQuery, KueryFilterQueryKind } from '../../../../../common/types/timeline'; @@ -40,7 +38,6 @@ export interface QueryBarTimelineComponentProps { isRefreshPaused: boolean; refreshInterval: number; savedQueryId: string | null; - setFilters: (filters: Filter[]) => void; setSavedQueryId: (savedQueryId: string | null) => void; timelineId: string; to: string; @@ -84,11 +81,6 @@ const SearchBarContainer = styled.div` } `; -export const TIMELINE_FILTER_DROP_AREA = 'timeline-filter-drop-area'; - -const getNonDropAreaFilters = (filters: Filter[] = []) => - filters.filter((f: Filter) => f.meta.controlledBy !== TIMELINE_FILTER_DROP_AREA); - // eslint-disable-next-line react/display-name export const QueryBarTimeline = memo( ({ @@ -101,7 +93,6 @@ export const QueryBarTimeline = memo( kqlMode, isRefreshPaused, savedQueryId, - setFilters, setSavedQueryId, refreshInterval, timelineId, @@ -122,9 +113,8 @@ export const QueryBarTimeline = memo( query: filterQuery != null ? filterQuery.expression : '', language: filterQuery != null ? filterQuery.kind : 'kuery', }); - const [queryBarFilters, setQueryBarFilters] = useState( - getNonDropAreaFilters(filters) - ); + const queryBarFilters = useMemo(() => getNonDropAreaFilters(filters), [filters]); + const [dataProvidersDsl, setDataProvidersDsl] = useState( convertKueryToElasticSearchQuery(buildGlobalQuery(dataProviders, browserFields), indexPattern) ); @@ -147,38 +137,6 @@ export const QueryBarTimeline = memo( [dispatch, indexPattern, timelineId] ); - useEffect(() => { - let isSubscribed = true; - const subscriptions = new Subscription(); - filterManager.setFilters(filters); - - subscriptions.add( - filterManager.getUpdates$().subscribe({ - next: () => { - if (isSubscribed) { - const filterWithoutDropArea = getNonDropAreaFilters(filterManager.getFilters()); - setFilters(filterWithoutDropArea); - setQueryBarFilters(filterWithoutDropArea); - } - }, - }) - ); - - return () => { - isSubscribed = false; - subscriptions.unsubscribe(); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - useEffect(() => { - const filterWithoutDropArea = getNonDropAreaFilters(filterManager.getFilters()); - if (!deepEqual(filters, filterWithoutDropArea)) { - filterManager.setFilters(filters); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [filters]); - useEffect(() => { setFilterQueryConverted({ query: filterQuery != null ? filterQuery.expression : '', diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/index.tsx index cdd6fc793082f..0145922910e63 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/index.tsx @@ -31,6 +31,7 @@ import { timelineDefaults } from '../../../store/defaults'; import { dispatchUpdateReduxTime } from '../../../../common/components/super_date_picker'; import { SearchOrFilter } from './search_or_filter'; import { setDataProviderVisibility } from '../../../store/actions'; +import { getNonDropAreaFilters } from '../helpers'; import * as i18n from './translations'; const FilterItemsContainer = styled(EuiFlexGroup)``; @@ -110,19 +111,37 @@ const StatefulSearchOrFilterComponent = React.memo( const arrDataView = useMemo(() => (dataView != null ? [dataView] : []), [dataView]); + // Keep filter manager in sync with redux filters + useEffect(() => { + if (!deepEqual(filterManager.getFilters(), filters)) { + filterManager.setFilters(filters); + } + }, [filterManager, filters]); + + // When a filter update comes in through the filter manager, update redux + useEffect(() => { + const subscription = filterManager.getUpdates$().subscribe(() => { + const filtersWithoutDropArea = getNonDropAreaFilters(filterManager.getFilters()); + if (!deepEqual(filtersWithoutDropArea, filters)) { + setFilters({ + id: timelineId, + filters: filtersWithoutDropArea, + }); + } + }); + return () => { + subscription.unsubscribe(); + }; + }, [filterManager, timelineId, setFilters, filters]); + + // Sync redux filters with updated from const onFiltersUpdated = useCallback( (newFilters: Filter[]) => { - filterManager.setFilters(newFilters); - }, - [filterManager] - ); - - const setFiltersInTimeline = useCallback( - (newFilters: Filter[]) => setFilters({ id: timelineId, filters: newFilters, - }), + }); + }, [timelineId, setFilters] ); @@ -180,7 +199,6 @@ const StatefulSearchOrFilterComponent = React.memo( kqlMode={kqlMode} refreshInterval={refreshInterval} savedQueryId={savedQueryId} - setFilters={setFiltersInTimeline} setSavedQueryId={setSavedQueryInTimeline} timelineId={timelineId} to={to} diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/search_or_filter.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/search_or_filter.tsx index 16f053b4abb75..e6c8d403d4cce 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/search_or_filter.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/search_or_filter/search_or_filter.tsx @@ -41,7 +41,6 @@ interface Props { timelineId: string; updateKqlMode: ({ id, kqlMode }: { id: string; kqlMode: KqlMode }) => void; refreshInterval: number; - setFilters: (filters: Filter[]) => void; setSavedQueryId: (savedQueryId: string | null) => void; filters: Filter[]; savedQueryId: string | null; @@ -79,7 +78,6 @@ export const SearchOrFilter = React.memo( timelineId, refreshInterval, savedQueryId, - setFilters, setSavedQueryId, to, toStr, @@ -129,7 +127,6 @@ export const SearchOrFilter = React.memo( isRefreshPaused={isRefreshPaused} refreshInterval={refreshInterval} savedQueryId={savedQueryId} - setFilters={setFilters} setSavedQueryId={setSavedQueryId} timelineId={timelineId} to={to} diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.test.tsx index 4d0a8f5cfd363..a3048347a6b7f 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/index.test.tsx @@ -16,6 +16,14 @@ import { TimelineType } from '../../../../../common/api/timeline'; import { useEsqlAvailability } from '../../../../common/hooks/esql/use_esql_availability'; import { render, screen, waitFor } from '@testing-library/react'; +jest.mock('react-router-dom', () => { + const original = jest.requireActual('react-router-dom'); + return { + ...original, + useLocation: () => ({}), + }; +}); + jest.mock('../../../../common/hooks/esql/use_esql_availability', () => ({ useEsqlAvailability: jest.fn().mockReturnValue({ isEsqlAdvancedSettingEnabled: true, diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.test.tsx index ff95229f9dc60..0dcbe36e09769 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.test.tsx @@ -55,6 +55,10 @@ mockUseResizeObserver.mockImplementation(() => ({})); jest.mock('../../../../../common/lib/kibana'); +jest.mock('../../../../containers/use_timeline_data_filters', () => ({ + useTimelineDataFilters: jest.fn().mockReturnValue({ from: 'now-15m', to: 'now' }), +})); + describe('Timeline', () => { let props = {} as QueryTabContentComponentProps; const sort: Sort[] = [ diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx index d557116ea6bf2..ed3cd15314444 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/tabs/query/index.tsx @@ -16,6 +16,7 @@ import { getEsQueryConfig } from '@kbn/data-plugin/common'; import { DataLoadingState } from '@kbn/unified-data-table'; import { useDeepEqualSelector } from '../../../../../common/hooks/use_selector'; import { useIsExperimentalFeatureEnabled } from '../../../../../common/hooks/use_experimental_features'; +import { useTimelineDataFilters } from '../../../../containers/use_timeline_data_filters'; import { InputsModelId } from '../../../../../common/store/inputs/constants'; import { useInvalidFilterQuery } from '../../../../../common/hooks/use_invalid_filter_query'; import { timelineActions, timelineSelectors } from '../../../../store'; @@ -40,6 +41,8 @@ import { inputsSelectors } from '../../../../../common/store'; import { SourcererScopeName } from '../../../../../common/store/sourcerer/model'; import { timelineDefaults } from '../../../../store/defaults'; import { useSourcererDataView } from '../../../../../common/containers/sourcerer'; +import { isActiveTimeline } from '../../../../../helpers'; + import type { TimelineModel } from '../../../../store/model'; import { DetailsPanel } from '../../../side_panel'; import { UnifiedTimelineBody } from '../../body/unified_timeline_body'; @@ -105,7 +108,11 @@ export const QueryTabContentComponent: React.FC = ({ selectedPatterns, } = useSourcererDataView(SourcererScopeName.timeline); - const { uiSettings, timelineFilterManager } = useKibana().services; + const { uiSettings, timelineDataService } = useKibana().services; + const { + query: { filterManager: timelineFilterManager }, + } = timelineDataService; + const unifiedComponentsInTimelineEnabled = useIsExperimentalFeatureEnabled( 'unifiedComponentsInTimelineEnabled' ); @@ -127,15 +134,17 @@ export const QueryTabContentComponent: React.FC = ({ [kqlQueryExpression, kqlQueryLanguage] ); - const combinedQueries = combineQueries({ - config: esQueryConfig, - dataProviders, - indexPattern, - browserFields, - filters, - kqlQuery, - kqlMode, - }); + const combinedQueries = useMemo(() => { + return combineQueries({ + config: esQueryConfig, + dataProviders, + indexPattern, + browserFields, + filters, + kqlQuery, + kqlMode, + }); + }, [esQueryConfig, dataProviders, indexPattern, browserFields, filters, kqlQuery, kqlMode]); useInvalidFilterQuery({ id: timelineId, @@ -163,12 +172,14 @@ export const QueryTabContentComponent: React.FC = ({ [combinedQueries, end, loadingSourcerer, start] ); - const timelineQuerySortField = sort.map(({ columnId, columnType, esTypes, sortDirection }) => ({ - field: columnId, - direction: sortDirection as Direction, - esTypes: esTypes ?? [], - type: columnType, - })); + const timelineQuerySortField = useMemo(() => { + return sort.map(({ columnId, columnType, esTypes, sortDirection }) => ({ + field: columnId, + direction: sortDirection as Direction, + esTypes: esTypes ?? [], + type: columnType, + })); + }, [sort]); const { augmentedColumnHeaders, defaultColumns, timelineQueryFieldsFromColumns } = useTimelineColumns(columns); @@ -226,6 +237,26 @@ export const QueryTabContentComponent: React.FC = ({ // is not getting refreshed when using browser navigation. const showEventsCountBadge = !isBlankTimeline && totalCount >= 0; + // + // Sync the timerange + const timelineFilters = useTimelineDataFilters(isActiveTimeline(timelineId)); + useEffect(() => { + timelineDataService.query.timefilter.timefilter.setTime({ + from: timelineFilters.from, + to: timelineFilters.to, + }); + }, [timelineDataService.query.timefilter.timefilter, timelineFilters.from, timelineFilters.to]); + + // Sync the base query + useEffect(() => { + timelineDataService.query.queryString.setQuery( + // We're using the base query of all combined queries here, to account for all + // of timeline's query dependencies (data providers, query etc.) + combinedQueries?.baseKqlQuery || { language: kqlQueryLanguage, query: '' } + ); + }, [timelineDataService, combinedQueries, kqlQueryLanguage]); + // + if (unifiedComponentsInTimelineEnabled) { return ( { const kibanaServiceMock: StartServices = { ...createStartServicesMock(), storage: storageMock, - timelineFilterManager: mockTimelineFilterManager, }; afterEach(() => { @@ -571,7 +568,9 @@ describe('unified timeline', () => { fireEvent.click(screen.getByTestId(`timelineFieldListPanelAddExistFilter-${field.name}`)); await waitFor(() => { - expect(mockTimelineFilterManager.addFilters).toHaveBeenNthCalledWith( + expect( + kibanaServiceMock.timelineDataService.query.filterManager.addFilters + ).toHaveBeenNthCalledWith( 1, expect.arrayContaining([ expect.objectContaining({ 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 fcdbb347fa9fc..b4daa07f11c40 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 @@ -158,14 +158,17 @@ const UnifiedTimelineComponent: React.FC = ({ dataViews, dataViewFieldEditor, application: { capabilities }, - data: dataPluginContract, uiActions, charts, docLinks, analytics, - timelineFilterManager, + timelineDataService, }, } = useKibana(); + const { + query: { filterManager: timelineFilterManager }, + } = timelineDataService; + const [eventIdsAddingNotes, setEventIdsAddingNotes] = useState>(new Set()); const onToggleShowNotes = useCallback( (eventId: string) => { @@ -179,12 +182,13 @@ const UnifiedTimelineComponent: React.FC = ({ }, [eventIdsAddingNotes] ); + const fieldListSidebarServices: UnifiedFieldListSidebarContainerProps['services'] = useMemo( () => ({ fieldFormats, dataViews, dataViewFieldEditor, - data: dataPluginContract, + data: timelineDataService, uiActions, charts, core: { @@ -197,7 +201,7 @@ const UnifiedTimelineComponent: React.FC = ({ fieldFormats, dataViews, dataViewFieldEditor, - dataPluginContract, + timelineDataService, uiActions, charts, uiSettings, diff --git a/x-pack/plugins/security_solution/public/types.ts b/x-pack/plugins/security_solution/public/types.ts index 1bd539bd52b6c..eb891e3145dd2 100644 --- a/x-pack/plugins/security_solution/public/types.ts +++ b/x-pack/plugins/security_solution/public/types.ts @@ -9,7 +9,7 @@ import type { Observable } from 'rxjs'; import type { CoreStart, AppMountParameters, AppLeaveHandler } from '@kbn/core/public'; import type { HomePublicPluginSetup } from '@kbn/home-plugin/public'; -import type { DataPublicPluginStart, FilterManager } from '@kbn/data-plugin/public'; +import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { FieldFormatsStartCommon } from '@kbn/field-formats-plugin/common'; import type { EmbeddableStart } from '@kbn/embeddable-plugin/public'; import type { LensPublicStart } from '@kbn/lens-plugin/public'; @@ -185,7 +185,7 @@ export type StartServices = CoreStart & telemetry: TelemetryClientStart; customDataService: DataPublicPluginStart; topValuesPopover: TopValuesPopoverService; - timelineFilterManager: FilterManager; + timelineDataService: DataPublicPluginStart; }; export type StartRenderServices = Pick< diff --git a/x-pack/test/security_solution_cypress/cypress/tasks/search_bar.ts b/x-pack/test/security_solution_cypress/cypress/tasks/search_bar.ts index bd6ca6775c12f..b1849738677a6 100644 --- a/x-pack/test/security_solution_cypress/cypress/tasks/search_bar.ts +++ b/x-pack/test/security_solution_cypress/cypress/tasks/search_bar.ts @@ -52,6 +52,9 @@ export const removeKqlFilter = () => { }; export const fillAddFilterForm = ({ key, operator, value }: SearchBarFilter) => { + // workaround for field input sometimes not focusing correctly + cy.get(ADD_FILTER_FORM_FIELD_INPUT).click(); + // /workaround cy.get(ADD_FILTER_FORM_FIELD_INPUT).type(`${key}{downarrow}{enter}`); cy.get(ADD_FILTER_FORM_OPERATOR_FIELD).type(`${operator}{downarrow}{enter}`); From de3fa8e2c7228b349ce4c5ab1a60e669262524b0 Mon Sep 17 00:00:00 2001 From: Pablo Machado Date: Wed, 8 May 2024 13:04:11 +0200 Subject: [PATCH 19/34] [SecuritySolution] [UI] Re-score entity when asset criticality changes (#182234) ## Summary Update the risk score when the user updates asset criticality. https://github.com/elastic/kibana/assets/1490444/58d2beb3-87f3-4b0d-afe8-b8a67e76d426 https://github.com/elastic/kibana/assets/1490444/2d185b48-9260-40cb-a27c-5539aaeaffc4 ### Tech breakdown #### Required changes * Update asset criticality APIs to use `refresh: 'wait_for'` * Update all risk score APIs in the UI to be `inspected` so we can refetch it from anywhere. * Update all risk score APIs to use the data stream index to reflect the change. * Update flyout risk score loading state #### Sequence of events * Whenever asset criticality for an entity changes, wait for the response * Call `calculateEntityRiskScore` * Waits for `calculateEntityRiskScore` response * invalidate/refetch all risk score API calls on the UI to display the new risk score ```mermaid sequenceDiagram participant FE as Client participant BE as Server FE->>BE: Assign Asset Criticality BE->>FE: Asset Criticality Response FE->>BE: Recalculate Risk Score BE->>FE: Risk Score Response FE->>BE: Fetch visualizations 1 FE->>BE: Fetch visualizations 2 FE->>BE: Fetch visualizations 3 BE->>FE: Visualizations responses ``` #### Affected components: * Expandable flyout (user/host) * Entity Details page (user/host) #### Why we don't have cypres tests? * We can test this feature on Cypress because we don't run the risk engine. Instead, we fake the API response for the risk engine status. * To be able to cypress test this feature, first, we need to reliably (no flakyness) enable the risk engine. ### Checklist Delete any items that are not applicable to this PR. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios --- .../asset_criticality/common.gen.ts | 14 +++ .../asset_criticality/common.schema.yaml | 13 +++ .../entity_calculation_route.gen.ts | 4 + .../entity_calculation_route.schema.yaml | 4 + .../common/hooks/use_inspect_query.test.tsx | 85 --------------- .../public/common/hooks/use_inspect_query.ts | 44 -------- .../public/entity_analytics/api/api.ts | 26 ++++- .../use_calculate_entity_risk_score.test.ts | 103 ++++++++++++++++++ .../hooks/use_calculate_entity_risk_score.ts | 58 ++++++++++ .../use_refetch_overview_page_risk_score.ts | 27 +++++ .../api/hooks/use_refetch_query_by_id.ts | 16 +++ .../public/entity_analytics/common/utils.ts | 5 + .../asset_criticality_selector.tsx | 45 +++++--- .../use_asset_criticality.ts | 10 +- .../tabs/risk_inputs/risk_inputs_tab.tsx | 16 +++ .../risk_summary.stories.tsx | 1 + .../risk_summary_flyout/risk_summary.test.tsx | 24 ++++ .../risk_summary_flyout/risk_summary.tsx | 27 +++-- .../explore/hosts/pages/details/index.tsx | 27 ++++- .../explore/network/pages/details/index.tsx | 9 +- .../explore/users/pages/details/index.tsx | 27 ++++- .../host_right/content.stories.tsx | 6 + .../entity_details/host_right/content.tsx | 10 +- .../entity_details/host_right/index.test.tsx | 16 --- .../entity_details/host_right/index.tsx | 20 +++- .../user_right/content.stories.tsx | 10 ++ .../entity_details/user_right/content.tsx | 10 +- .../entity_details/user_right/index.test.tsx | 16 --- .../entity_details/user_right/index.tsx | 20 +++- .../components/host_overview/index.tsx | 25 ++++- .../components/user_overview/index.tsx | 25 ++++- .../overview/pages/detection_response.tsx | 6 +- .../asset_criticality_data_client.ts | 9 +- .../asset_criticality/routes/delete.ts | 15 ++- .../asset_criticality/routes/upsert.ts | 5 +- .../calculate_and_persist_risk_scores.ts | 4 +- .../risk_score/risk_engine_data_writer.ts | 2 + .../risk_score/risk_score_service.ts | 1 + .../routes/entity_calculation.test.ts | 16 ++- .../risk_score/routes/entity_calculation.ts | 14 ++- .../server/lib/entity_analytics/types.ts | 1 + 41 files changed, 587 insertions(+), 229 deletions(-) delete mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_inspect_query.test.tsx delete mode 100644 x-pack/plugins/security_solution/public/common/hooks/use_inspect_query.ts create mode 100644 x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.test.ts create mode 100644 x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.ts create mode 100644 x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_refetch_overview_page_risk_score.ts create mode 100644 x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_refetch_query_by_id.ts diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.gen.ts index 3da400bdef9e0..141991327fb2d 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.gen.ts @@ -40,6 +40,20 @@ export const CreateAssetCriticalityRecord = AssetCriticalityRecordIdParts.merge( * The criticality level of the asset. */ criticality_level: z.enum(['low_impact', 'medium_impact', 'high_impact', 'extreme_impact']), + /** + * If 'wait_for' the request will wait for the index refresh. + */ + refresh: z.literal('wait_for').optional(), + }) +); + +export type DeleteAssetCriticalityRecord = z.infer; +export const DeleteAssetCriticalityRecord = AssetCriticalityRecordIdParts.merge( + z.object({ + /** + * If 'wait_for' the request will wait for the index refresh. + */ + refresh: z.literal('wait_for').optional(), }) ); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml index 9fa0c7bcfce18..3d3e82524109d 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml @@ -50,8 +50,21 @@ components: type: string enum: [low_impact, medium_impact, high_impact, extreme_impact] description: The criticality level of the asset. + refresh: + type: string + enum: [wait_for] + description: If 'wait_for' the request will wait for the index refresh. required: - criticality_level + DeleteAssetCriticalityRecord: + allOf: + - $ref: '#/components/schemas/AssetCriticalityRecordIdParts' + - type: object + properties: + refresh: + type: string + enum: [wait_for] + description: If 'wait_for' the request will wait for the index refresh. AssetCriticalityRecord: allOf: - $ref: '#/components/schemas/CreateAssetCriticalityRecord' diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.gen.ts index c583616198313..f4d7c393f6e7f 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.gen.ts @@ -28,6 +28,10 @@ export const RiskScoresEntityCalculationRequest = z.object({ * Used to define the type of entity. */ identifier_type: IdentifierType, + /** + * If 'wait_for' the request will wait for the index refresh. + */ + refresh: z.literal('wait_for').optional(), }); export type RiskScoresEntityCalculationResponse = z.infer< diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml index de5f01f850187..1229cf0fb6615 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml @@ -50,6 +50,10 @@ components: identifier_type: description: Used to define the type of entity. $ref: './common.schema.yaml#/components/schemas/IdentifierType' + refresh: + type: string + enum: [wait_for] + description: If 'wait_for' the request will wait for the index refresh. RiskScoresEntityCalculationResponse: type: object diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_inspect_query.test.tsx b/x-pack/plugins/security_solution/public/common/hooks/use_inspect_query.test.tsx deleted file mode 100644 index 1bf2de3242ac7..0000000000000 --- a/x-pack/plugins/security_solution/public/common/hooks/use_inspect_query.test.tsx +++ /dev/null @@ -1,85 +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 { useInspectQuery } from './use_inspect_query'; - -import { useGlobalTime } from '../containers/use_global_time'; - -jest.mock('../containers/use_global_time'); - -const QUERY_ID = 'tes_query_id'; - -const RESPONSE = { - inspect: { dsl: [], response: [] }, - isPartial: false, - isRunning: false, - total: 0, - loaded: 0, - rawResponse: { - took: 0, - timed_out: false, - _shards: { - total: 0, - successful: 0, - failed: 0, - skipped: 0, - }, - results: { - hits: { - total: 0, - }, - }, - hits: { - total: 0, - max_score: 0, - hits: [], - }, - }, - totalCount: 0, - enrichments: [], -}; - -describe('useInspectQuery', () => { - let deleteQuery: jest.Mock; - let setQuery: jest.Mock; - - beforeEach(() => { - deleteQuery = jest.fn(); - setQuery = jest.fn(); - (useGlobalTime as jest.Mock).mockImplementation(() => ({ - deleteQuery, - setQuery, - isInitializing: false, - })); - }); - - it('it calls setQuery', () => { - renderHook(() => useInspectQuery(QUERY_ID, false, RESPONSE)); - - expect(setQuery).toHaveBeenCalledTimes(1); - expect(setQuery.mock.calls[0][0].id).toBe(QUERY_ID); - }); - - it("doesn't call setQuery when response is undefined", () => { - renderHook(() => useInspectQuery(QUERY_ID, false, undefined)); - - expect(setQuery).not.toHaveBeenCalled(); - }); - - it("doesn't call setQuery when loading", () => { - renderHook(() => useInspectQuery(QUERY_ID, true)); - - expect(setQuery).not.toHaveBeenCalled(); - }); - - it('calls deleteQuery when unmouting', () => { - const result = renderHook(() => useInspectQuery(QUERY_ID, false, RESPONSE)); - result.unmount(); - - expect(deleteQuery).toHaveBeenCalledWith({ id: QUERY_ID }); - }); -}); diff --git a/x-pack/plugins/security_solution/public/common/hooks/use_inspect_query.ts b/x-pack/plugins/security_solution/public/common/hooks/use_inspect_query.ts deleted file mode 100644 index 4c0cb1c4fcdca..0000000000000 --- a/x-pack/plugins/security_solution/public/common/hooks/use_inspect_query.ts +++ /dev/null @@ -1,44 +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 { noop } from 'lodash'; -import { useEffect } from 'react'; -import type { FactoryQueryTypes, StrategyResponseType } from '../../../common/search_strategy'; -import { getInspectResponse } from '../../helpers'; -import { useGlobalTime } from '../containers/use_global_time'; -import type { Refetch, RefetchKql } from '../store/inputs/model'; - -/** - * Add and remove query response from global input store. - */ -export const useInspectQuery = ( - id: string, - loading: boolean, - response?: StrategyResponseType, - refetch: Refetch | RefetchKql = noop -) => { - const { deleteQuery, setQuery, isInitializing } = useGlobalTime(); - - useEffect(() => { - if (!loading && !isInitializing && response?.inspect) { - setQuery({ - id, - inspect: getInspectResponse(response, { - dsl: [], - response: [], - }), - loading, - refetch, - }); - } - - return () => { - if (deleteQuery) { - deleteQuery({ id }); - } - }; - }, [deleteQuery, setQuery, loading, response, isInitializing, id, refetch]); -}; diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/api.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/api.ts index fb14efde91a26..225ae72c57616 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/api/api.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/api.ts @@ -6,6 +6,10 @@ */ import { useMemo } from 'react'; +import type { + RiskScoresEntityCalculationRequest, + RiskScoresEntityCalculationResponse, +} from '../../../common/api/entity_analytics/risk_engine/entity_calculation_route.gen'; import type { AssetCriticalityCsvUploadResponse } from '../../../common/entity_analytics/asset_criticality/types'; import type { AssetCriticalityRecord } from '../../../common/api/entity_analytics/asset_criticality'; import type { RiskScoreEntity } from '../../../common/search_strategy'; @@ -21,6 +25,7 @@ import { RISK_SCORE_INDEX_STATUS_API_URL, RISK_ENGINE_SETTINGS_URL, ASSET_CRITICALITY_CSV_UPLOAD_URL, + RISK_SCORE_ENTITY_CALCULATION_URL, } from '../../../common/constants'; import type { @@ -97,6 +102,17 @@ export const useEntityAnalyticsRoutes = () => { method: 'POST', }); + /** + * Calculate and stores risk score for an entity + */ + const calculateEntityRiskScore = (params: RiskScoresEntityCalculationRequest) => { + return http.fetch(RISK_SCORE_ENTITY_CALCULATION_URL, { + version: '1', + method: 'POST', + body: JSON.stringify(params), + }); + }; + /** * Get risk engine privileges */ @@ -119,7 +135,9 @@ export const useEntityAnalyticsRoutes = () => { * Create asset criticality */ const createAssetCriticality = async ( - params: Pick + params: Pick & { + refresh?: 'wait_for'; + } ): Promise => http.fetch(ASSET_CRITICALITY_URL, { version: '1', @@ -128,16 +146,17 @@ export const useEntityAnalyticsRoutes = () => { id_value: params.idValue, id_field: params.idField, criticality_level: params.criticalityLevel, + refresh: params.refresh, }), }); const deleteAssetCriticality = async ( - params: Pick + params: Pick & { refresh?: 'wait_for' } ): Promise<{ deleted: true }> => { await http.fetch(ASSET_CRITICALITY_URL, { version: '1', method: 'DELETE', - query: { id_value: params.idValue, id_field: params.idField }, + query: { id_value: params.idValue, id_field: params.idField, refresh: params.refresh }, }); // spoof a response to allow us to better distnguish a delete from a create in use_asset_criticality.ts @@ -219,6 +238,7 @@ export const useEntityAnalyticsRoutes = () => { uploadAssetCriticalityFile, getRiskScoreIndexStatus, fetchRiskEngineSettings, + calculateEntityRiskScore, }; }, [http]); }; diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.test.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.test.ts new file mode 100644 index 0000000000000..106fb9404372d --- /dev/null +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.test.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. + */ + +import { act, renderHook } from '@testing-library/react-hooks'; +import { TestProviders } from '../../../common/mock'; +import { RiskScoreEntity } from '../../../../common/search_strategy'; +import { useCalculateEntityRiskScore } from './use_calculate_entity_risk_score'; +import { RiskEngineStatus } from '../../../../common/entity_analytics/risk_engine'; +import { waitFor } from '@testing-library/react'; + +const enabledRiskEngineStatus = { + risk_engine_status: RiskEngineStatus.ENABLED, +}; +const disabledRiskEngineStatus = { + risk_engine_status: RiskEngineStatus.DISABLED, +}; + +const mockUseRiskEngineStatus = jest.fn(); +jest.mock('./use_risk_engine_status', () => ({ + useRiskEngineStatus: () => mockUseRiskEngineStatus(), +})); + +const mockCalculateEntityRiskScore = jest.fn(); +jest.mock('../api', () => ({ + useEntityAnalyticsRoutes: () => ({ + calculateEntityRiskScore: mockCalculateEntityRiskScore, + }), +})); + +const mockAddError = jest.fn(); +jest.mock('../../../common/hooks/use_app_toasts', () => ({ + useAppToasts: jest.fn().mockReturnValue({ + addError: () => mockAddError(), + }), +})); + +const identifierType = RiskScoreEntity.user; +const identifier = 'test-user'; +const options = { + onSuccess: jest.fn(), +}; + +describe('useRiskScoreData', () => { + beforeEach(() => { + jest.clearAllMocks(); + mockUseRiskEngineStatus.mockReturnValue({ data: enabledRiskEngineStatus }); + mockCalculateEntityRiskScore.mockResolvedValue({}); + }); + + it('should call calculateEntityRiskScore API when the callback function is called', async () => { + const { result } = renderHook( + () => useCalculateEntityRiskScore(identifierType, identifier, options), + { wrapper: TestProviders } + ); + + await act(async () => { + result.current.calculateEntityRiskScore(); + + await waitFor(() => + expect(mockCalculateEntityRiskScore).toHaveBeenCalledWith( + expect.objectContaining({ + identifier_type: identifierType, + identifier, + }) + ) + ); + }); + }); + + it('should NOT call calculateEntityRiskScore API when risk engine is disabled', async () => { + mockUseRiskEngineStatus.mockReturnValue({ + data: disabledRiskEngineStatus, + }); + const { result } = renderHook( + () => useCalculateEntityRiskScore(identifierType, identifier, options), + { wrapper: TestProviders } + ); + + await act(async () => { + result.current.calculateEntityRiskScore(); + + await waitFor(() => expect(mockCalculateEntityRiskScore).not.toHaveBeenCalled()); + }); + }); + + it('should display a toast error when the API returns an error', async () => { + mockCalculateEntityRiskScore.mockRejectedValue({}); + const { result } = renderHook( + () => useCalculateEntityRiskScore(identifierType, identifier, options), + { wrapper: TestProviders } + ); + + await act(async () => { + result.current.calculateEntityRiskScore(); + + await waitFor(() => expect(mockAddError).toHaveBeenCalled()); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.ts new file mode 100644 index 0000000000000..ff1eb5c46a702 --- /dev/null +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useCallback } from 'react'; + +import { i18n } from '@kbn/i18n'; +import { useMutation } from '@tanstack/react-query'; +import { useEntityAnalyticsRoutes } from '../api'; +import { useAppToasts } from '../../../common/hooks/use_app_toasts'; +import { useRiskEngineStatus } from './use_risk_engine_status'; +import { RiskScoreEntity, RiskEngineStatus } from '../../../../common/entity_analytics/risk_engine'; + +export const useCalculateEntityRiskScore = ( + identifierType: RiskScoreEntity, + identifier: string, + { onSuccess }: { onSuccess: () => void } +) => { + const { addError } = useAppToasts(); + const { data: riskEngineStatus } = useRiskEngineStatus(); + const { calculateEntityRiskScore } = useEntityAnalyticsRoutes(); + + const onError = useCallback( + (error: unknown) => { + addError(error, { + title: i18n.translate('xpack.securitySolution.entityDetails.userPanel.error', { + defaultMessage: 'There was a problem calculating the {entity} risk score', + values: { entity: identifierType === RiskScoreEntity.host ? "host's" : "user's" }, + }), + }); + }, + [addError, identifierType] + ); + + const { mutate, isLoading, data } = useMutation(calculateEntityRiskScore, { + onSuccess, + onError, + }); + + const calculateEntityRiskScoreCb = useCallback(async () => { + if (riskEngineStatus?.risk_engine_status === RiskEngineStatus.ENABLED) { + mutate({ + identifier_type: identifierType, + identifier, + refresh: 'wait_for', + }); + } + }, [riskEngineStatus?.risk_engine_status, mutate, identifierType, identifier]); + + return { + isLoading, + calculateEntityRiskScore: calculateEntityRiskScoreCb, + data, + }; +}; diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_refetch_overview_page_risk_score.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_refetch_overview_page_risk_score.ts new file mode 100644 index 0000000000000..bf0c3db69b53c --- /dev/null +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_refetch_overview_page_risk_score.ts @@ -0,0 +1,27 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { TableId } from '@kbn/securitysolution-data-table'; +import { useCallback } from 'react'; +import type { Refetch } from '../../../common/types'; +import { useRefetchQueryById } from './use_refetch_query_by_id'; + +export const useRefetchOverviewPageRiskScore = (overviewRiskScoreQueryId: string) => { + const refetchOverviewRiskScore = useRefetchQueryById(overviewRiskScoreQueryId); + const refetchAlertsRiskInputs = useRefetchQueryById(TableId.alertsRiskInputs); + + const refetchRiskScore = useCallback(() => { + if (refetchOverviewRiskScore) { + (refetchOverviewRiskScore as Refetch)(); + } + + if (refetchAlertsRiskInputs) { + (refetchAlertsRiskInputs as Refetch)(); + } + }, [refetchAlertsRiskInputs, refetchOverviewRiskScore]); + return refetchRiskScore; +}; diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_refetch_query_by_id.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_refetch_query_by_id.ts new file mode 100644 index 0000000000000..331855560da7c --- /dev/null +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_refetch_query_by_id.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 { useMemo } from 'react'; +import { useDeepEqualSelector } from '../../../common/hooks/use_selector'; +import { inputsSelectors } from '../../../common/store'; + +export const useRefetchQueryById = (QueryId: string) => { + const getGlobalQuery = useMemo(() => inputsSelectors.globalQueryByIdSelector(), []); + const { refetch } = useDeepEqualSelector((state) => getGlobalQuery(state, QueryId)); + return refetch; +}; diff --git a/x-pack/plugins/security_solution/public/entity_analytics/common/utils.ts b/x-pack/plugins/security_solution/public/entity_analytics/common/utils.ts index 69080b13631e3..3756780e18ae6 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/common/utils.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/common/utils.ts @@ -63,3 +63,8 @@ export enum HostRiskScoreQueryId { */ export const formatRiskScore = (riskScore: number) => (Math.round(riskScore * 100) / 100).toFixed(2); + +export const FIRST_RECORD_PAGINATION = { + cursorStart: 0, + querySize: 1, +}; diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/asset_criticality_selector.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/asset_criticality_selector.tsx index 587ef695ff94c..e29dca9d48f3d 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/asset_criticality_selector.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/asset_criticality_selector.tsx @@ -39,10 +39,14 @@ import { PICK_ASSET_CRITICALITY } from './translations'; import { AssetCriticalityBadge } from './asset_criticality_badge'; import type { Entity, State } from './use_asset_criticality'; import { useAssetCriticalityData, useAssetCriticalityPrivileges } from './use_asset_criticality'; -import type { CriticalityLevelWithUnassigned } from '../../../../common/entity_analytics/asset_criticality/types'; +import type { + CriticalityLevel, + CriticalityLevelWithUnassigned, +} from '../../../../common/entity_analytics/asset_criticality/types'; interface Props { entity: Entity; + onChange?: () => void; } const AssetCriticalitySelectorComponent: React.FC<{ criticality: State; @@ -52,6 +56,15 @@ const AssetCriticalitySelectorComponent: React.FC<{ const [visible, toggleModal] = useToggle(false); const sFontSize = useEuiFontSize('s').fontSize; + const onSave = (value: CriticalityLevelWithUnassigned) => { + criticality.mutation.mutate({ + criticalityLevel: value, + idField: `${entity.type}.name`, + idValue: entity.name, + }); + toggleModal(false); + }; + return ( <> {criticality.query.isLoading || criticality.mutation.isLoading ? ( @@ -121,7 +134,11 @@ const AssetCriticalitySelectorComponent: React.FC<{ )} {visible ? ( - + ) : null} ); @@ -130,12 +147,13 @@ const AssetCriticalitySelectorComponent: React.FC<{ export const AssetCriticalitySelector = React.memo(AssetCriticalitySelectorComponent); AssetCriticalitySelector.displayName = 'AssetCriticalitySelector'; -const AssetCriticalityAccordionComponent: React.FC = ({ entity }) => { +const AssetCriticalityAccordionComponent: React.FC = ({ entity, onChange }) => { const { euiTheme } = useEuiTheme(); const privileges = useAssetCriticalityPrivileges(entity.name); const criticality = useAssetCriticalityData({ entity, enabled: !!privileges.data?.has_read_permissions, + onChange, }); if (privileges.isLoading || !privileges.data?.has_read_permissions) { @@ -191,15 +209,19 @@ export const AssetCriticalityTitle = () => ( ); interface ModalProps { - criticality: State; + initialCriticalityLevel: CriticalityLevel | undefined; toggle: (nextValue: boolean) => void; - entity: Entity; + onSave: (value: CriticalityLevelWithUnassigned) => void; } -const AssetCriticalityModal: React.FC = ({ criticality, entity, toggle }) => { +const AssetCriticalityModal: React.FC = ({ + initialCriticalityLevel, + toggle, + onSave, +}) => { const basicSelectId = useGeneratedHtmlId({ prefix: 'basicSelect' }); const [value, setNewValue] = useState( - criticality.query.data?.criticality_level ?? 'unassigned' + initialCriticalityLevel ?? 'unassigned' ); return ( @@ -228,14 +250,7 @@ const AssetCriticalityModal: React.FC = ({ criticality, entity, togg { - criticality.mutation.mutate({ - criticalityLevel: value, - idField: `${entity.type}.name`, - idValue: entity.name, - }); - toggle(false); - }} + onClick={() => onSave(value)} fill data-test-subj="asset-criticality-modal-save-btn" > diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/use_asset_criticality.ts b/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/use_asset_criticality.ts index 403ca5c656bf0..c56b394236326 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/use_asset_criticality.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/use_asset_criticality.ts @@ -46,9 +46,11 @@ export const useAssetCriticalityPrivileges = ( export const useAssetCriticalityData = ({ entity, enabled = true, + onChange, }: { entity: Entity; enabled?: boolean; + onChange?: () => void; }): State => { const QC = useQueryClient(); const QUERY_KEY = [ASSET_CRITICALITY_KEY, entity.name]; @@ -71,18 +73,24 @@ export const useAssetCriticalityData = ({ >({ mutationFn: (params: Params) => { if (params.criticalityLevel === 'unassigned') { - return deleteAssetCriticality({ idField: params.idField, idValue: params.idValue }); + return deleteAssetCriticality({ + idField: params.idField, + idValue: params.idValue, + refresh: 'wait_for', + }); } return createAssetCriticality({ idField: params.idField, idValue: params.idValue, criticalityLevel: params.criticalityLevel, + refresh: 'wait_for', }); }, onSuccess: (data) => { const queryData = 'deleted' in data ? null : data; QC.setQueryData(QUERY_KEY, queryData); + onChange?.(); }, }); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/tabs/risk_inputs/risk_inputs_tab.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/tabs/risk_inputs/risk_inputs_tab.tsx index 80b425bec15bb..48f004cbd7069 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/tabs/risk_inputs/risk_inputs_tab.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/tabs/risk_inputs/risk_inputs_tab.tsx @@ -14,6 +14,8 @@ import { useUiSetting$ } from '@kbn/kibana-react-plugin/public'; import { ALERT_RULE_NAME } from '@kbn/rule-data-utils'; import { get } from 'lodash/fp'; +import { useGlobalTime } from '../../../../../common/containers/use_global_time'; +import { useQueryInspector } from '../../../../../common/components/page/manage_query'; import { formatRiskScore } from '../../../../common'; import type { InputAlert, @@ -45,7 +47,10 @@ const FIRST_RECORD_PAGINATION = { querySize: 1, }; +export const RISK_INPUTS_TAB_QUERY_ID = 'RiskInputsTabQuery'; + export const RiskInputsTab = ({ entityType, entityName }: RiskInputsTabProps) => { + const { setQuery, deleteQuery } = useGlobalTime(); const [selectedItems, setSelectedItems] = useState([]); const nameFilterQuery = useMemo(() => { @@ -60,6 +65,8 @@ export const RiskInputsTab = ({ entityType, entityName }: RiskInputsTabProps) => data: riskScoreData, error: riskScoreError, loading: loadingRiskScore, + inspect: inspectRiskScore, + refetch, } = useRiskScore({ riskEntity: entityType, filterQuery: nameFilterQuery, @@ -68,6 +75,15 @@ export const RiskInputsTab = ({ entityType, entityName }: RiskInputsTabProps) => skip: nameFilterQuery === undefined, }); + useQueryInspector({ + deleteQuery, + inspect: inspectRiskScore, + loading: loadingRiskScore, + queryId: RISK_INPUTS_TAB_QUERY_ID, + refetch, + setQuery, + }); + const riskScore = riskScoreData && riskScoreData.length > 0 ? riskScoreData[0] : undefined; const alerts = useRiskContributingAlerts({ riskScore }); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.stories.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.stories.tsx index cece761cd9d6f..b48629cbbe26f 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.stories.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.stories.tsx @@ -26,6 +26,7 @@ export const Default: Story = () => { openDetailsPanel={() => {}} riskScoreData={{ ...mockRiskScoreState, data: [] }} queryId={'testQuery'} + recalculatingScore={false} />
diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.test.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.test.tsx index c7debcdbdc965..56a84c340dee3 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.test.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.test.tsx @@ -49,6 +49,7 @@ describe('RiskSummary', () => { riskScoreData={mockHostRiskScoreState} queryId={'testQuery'} openDetailsPanel={() => {}} + recalculatingScore={false} /> ); @@ -79,6 +80,7 @@ describe('RiskSummary', () => { riskScoreData={mockHostRiskScoreState} queryId={'testQuery'} openDetailsPanel={() => {}} + recalculatingScore={false} /> ); @@ -110,12 +112,28 @@ describe('RiskSummary', () => { riskScoreData={{ ...mockHostRiskScoreState, data: undefined }} queryId={'testQuery'} openDetailsPanel={() => {}} + recalculatingScore={false} /> ); expect(getByTestId('risk-summary-table')).toBeInTheDocument(); }); + it('risk summary header does not render link when riskScoreData is loading', () => { + const { queryByTestId } = render( + + {}} + recalculatingScore={false} + /> + + ); + + expect(queryByTestId('riskInputsTitleLink')).not.toBeInTheDocument(); + }); + it('renders visualization embeddable', () => { const { getByTestId } = render( @@ -123,6 +141,7 @@ describe('RiskSummary', () => { riskScoreData={mockHostRiskScoreState} queryId={'testQuery'} openDetailsPanel={() => {}} + recalculatingScore={false} /> ); @@ -137,6 +156,7 @@ describe('RiskSummary', () => { riskScoreData={mockHostRiskScoreState} queryId={'testQuery'} openDetailsPanel={() => {}} + recalculatingScore={false} /> ); @@ -151,6 +171,7 @@ describe('RiskSummary', () => { riskScoreData={mockHostRiskScoreState} queryId={'testQuery'} openDetailsPanel={() => {}} + recalculatingScore={false} /> ); @@ -177,6 +198,7 @@ describe('RiskSummary', () => { riskScoreData={mockHostRiskScoreState} queryId={'testQuery'} openDetailsPanel={() => {}} + recalculatingScore={false} /> ); @@ -198,6 +220,7 @@ describe('RiskSummary', () => { riskScoreData={mockUserRiskScoreState} queryId={'testQuery'} openDetailsPanel={() => {}} + recalculatingScore={false} /> ); @@ -219,6 +242,7 @@ describe('RiskSummary', () => { riskScoreData={mockUserRiskScoreState} queryId={'testQuery'} openDetailsPanel={() => {}} + recalculatingScore={false} /> ); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.tsx index dc3471d46254c..b7a88353ddd4a 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary_flyout/risk_summary.tsx @@ -49,12 +49,14 @@ import { export interface RiskSummaryProps { riskScoreData: RiskScoreState; + recalculatingScore: boolean; queryId: string; openDetailsPanel: (tab: EntityDetailsLeftPanelTab) => void; } const RiskSummaryComponent = ({ riskScoreData, + recalculatingScore, queryId, openDetailsPanel, }: RiskSummaryProps) => { @@ -119,11 +121,13 @@ const RiskSummaryComponent = ({ [entityData?.name, riskData] ); + const riskDataTimestamp = riskData?.['@timestamp']; const timerange = useMemo(() => { const from = dateMath.parse(LAST_30_DAYS.from)?.toISOString() ?? LAST_30_DAYS.from; const to = dateMath.parse(LAST_30_DAYS.to)?.toISOString() ?? LAST_30_DAYS.to; return { from, to }; - }, []); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [riskDataTimestamp]); // Update the timerange whenever the risk score timestamp changes to include new entries return ( ({ defaultMessage="View risk contributions" /> ), - link: { - callback: () => openDetailsPanel(EntityDetailsLeftPanelTab.RISK_INPUTS), - tooltip: ( - - ), - }, + link: riskScoreData.loading + ? undefined + : { + callback: () => openDetailsPanel(EntityDetailsLeftPanelTab.RISK_INPUTS), + tooltip: ( + + ), + }, iconType: 'arrowStart', }} expand={{ @@ -265,6 +271,7 @@ const RiskSummaryComponent = ({ columns={columns} items={rows} compressed + loading={riskScoreData.loading || recalculatingScore} />
diff --git a/x-pack/plugins/security_solution/public/explore/hosts/pages/details/index.tsx b/x-pack/plugins/security_solution/public/explore/hosts/pages/details/index.tsx index 08260caa4eb91..dda6437ba783d 100644 --- a/x-pack/plugins/security_solution/public/explore/hosts/pages/details/index.tsx +++ b/x-pack/plugins/security_solution/public/explore/hosts/pages/details/index.tsx @@ -20,6 +20,7 @@ import type { Filter } from '@kbn/es-query'; import { buildEsQuery } from '@kbn/es-query'; import { getEsQueryConfig } from '@kbn/data-plugin/common'; import { tableDefaults, dataTableSelectors, TableId } from '@kbn/securitysolution-data-table'; +import { useCalculateEntityRiskScore } from '../../../../entity_analytics/api/hooks/use_calculate_entity_risk_score'; import { useAssetCriticalityData, useAssetCriticalityPrivileges, @@ -33,7 +34,7 @@ import { useSignalIndex } from '../../../../detections/containers/detection_engi import { useAlertsPrivileges } from '../../../../detections/containers/detection_engine/alerts/use_alerts_privileges'; import { InputsModelId } from '../../../../common/store/inputs/constants'; import type { HostItem } from '../../../../../common/search_strategy'; -import { LastEventIndexKey } from '../../../../../common/search_strategy'; +import { LastEventIndexKey, RiskScoreEntity } from '../../../../../common/search_strategy'; import { SecurityPageName } from '../../../../app/types'; import { FiltersGlobal } from '../../../../common/components/filters_global'; import { HeaderPage } from '../../../../common/components/header_page'; @@ -44,7 +45,10 @@ import { hasMlUserPermissions } from '../../../../../common/machine_learning/has import { useMlCapabilities } from '../../../../common/components/ml/hooks/use_ml_capabilities'; import { scoreIntervalToDateTime } from '../../../../common/components/ml/score/score_interval_to_datetime'; import { TabNavigation } from '../../../../common/components/navigation/tab_navigation'; -import { HostOverview } from '../../../../overview/components/host_overview'; +import { + HostOverview, + HOST_OVERVIEW_RISK_SCORE_QUERY_ID, +} from '../../../../overview/components/host_overview'; import { SiemSearchBar } from '../../../../common/components/search_bar'; import { SecuritySolutionPageWrapper } from '../../../../common/components/page_wrapper'; import { useGlobalTime } from '../../../../common/containers/use_global_time'; @@ -75,6 +79,7 @@ import { AlertCountByRuleByStatus } from '../../../../common/components/alert_co import { useLicense } from '../../../../common/hooks/use_license'; import { ResponderActionButton } from '../../../../detections/components/endpoint_responder/responder_action_button'; import { useHasSecurityCapability } from '../../../../helper_hooks'; +import { useRefetchOverviewPageRiskScore } from '../../../../entity_analytics/api/hooks/use_refetch_overview_page_risk_score'; const ES_HOST_FIELD = 'host.name'; const HostOverviewManage = manageQuery(HostOverview); @@ -175,12 +180,26 @@ const HostDetailsComponent: React.FC = ({ detailName, hostDeta [detailName] ); + const additionalFilters = useMemo( + () => (rawFilteredQuery ? [rawFilteredQuery] : []), + [rawFilteredQuery] + ); + const entity = useMemo(() => ({ type: 'host' as const, name: detailName }), [detailName]); const privileges = useAssetCriticalityPrivileges(entity.name); + + const refetchRiskScore = useRefetchOverviewPageRiskScore(HOST_OVERVIEW_RISK_SCORE_QUERY_ID); + const { calculateEntityRiskScore } = useCalculateEntityRiskScore( + RiskScoreEntity.host, + detailName, + { onSuccess: refetchRiskScore } + ); + const canReadAssetCriticality = !!privileges.data?.has_read_permissions; const criticality = useAssetCriticalityData({ entity, enabled: canReadAssetCriticality, + onChange: calculateEntityRiskScore, }); return ( @@ -259,14 +278,14 @@ const HostDetailsComponent: React.FC = ({ detailName, hostDeta
diff --git a/x-pack/plugins/security_solution/public/explore/network/pages/details/index.tsx b/x-pack/plugins/security_solution/public/explore/network/pages/details/index.tsx index f0356b9125dc3..f7e30dd47bf93 100644 --- a/x-pack/plugins/security_solution/public/explore/network/pages/details/index.tsx +++ b/x-pack/plugins/security_solution/public/explore/network/pages/details/index.tsx @@ -124,6 +124,11 @@ const NetworkDetailsComponent: React.FC = () => { } }, [globalFilters, indexPattern, networkDetailsFilter, query, uiSettings]); + const additionalFilters = useMemo( + () => (rawFilteredQuery ? [rawFilteredQuery] : []), + [rawFilteredQuery] + ); + const stringifiedAdditionalFilters = JSON.stringify(rawFilteredQuery); useInvalidFilterQuery({ id: ID, @@ -226,14 +231,14 @@ const NetworkDetailsComponent: React.FC = () => {
diff --git a/x-pack/plugins/security_solution/public/explore/users/pages/details/index.tsx b/x-pack/plugins/security_solution/public/explore/users/pages/details/index.tsx index 88d9b260c8d38..4e61c7083d038 100644 --- a/x-pack/plugins/security_solution/public/explore/users/pages/details/index.tsx +++ b/x-pack/plugins/security_solution/public/explore/users/pages/details/index.tsx @@ -20,6 +20,7 @@ import { getEsQueryConfig } from '@kbn/data-plugin/common'; import type { Filter } from '@kbn/es-query'; import { buildEsQuery } from '@kbn/es-query'; import { dataTableSelectors, TableId } from '@kbn/securitysolution-data-table'; +import { useCalculateEntityRiskScore } from '../../../../entity_analytics/api/hooks/use_calculate_entity_risk_score'; import { useAssetCriticalityData, useAssetCriticalityPrivileges, @@ -60,10 +61,13 @@ import { } from '../../../../common/hooks/use_selector'; import { useInvalidFilterQuery } from '../../../../common/hooks/use_invalid_filter_query'; import { LastEventTime } from '../../../../common/components/last_event_time'; -import { LastEventIndexKey } from '../../../../../common/search_strategy'; +import { LastEventIndexKey, RiskScoreEntity } from '../../../../../common/search_strategy'; import { AnomalyTableProvider } from '../../../../common/components/ml/anomaly/anomaly_table_provider'; -import { UserOverview } from '../../../../overview/components/user_overview'; +import { + UserOverview, + USER_OVERVIEW_RISK_SCORE_QUERY_ID, +} from '../../../../overview/components/user_overview'; import { useObservedUserDetails } from '../../containers/users/observed_details'; import { useQueryInspector } from '../../../../common/components/page/manage_query'; import { scoreIntervalToDateTime } from '../../../../common/components/ml/score/score_interval_to_datetime'; @@ -73,6 +77,7 @@ import { hasMlUserPermissions } from '../../../../../common/machine_learning/has import { useMlCapabilities } from '../../../../common/components/ml/hooks/use_ml_capabilities'; import { EmptyPrompt } from '../../../../common/components/empty_prompt'; import { useHasSecurityCapability } from '../../../../helper_hooks'; +import { useRefetchOverviewPageRiskScore } from '../../../../entity_analytics/api/hooks/use_refetch_overview_page_risk_score'; const QUERY_ID = 'UsersDetailsQueryId'; const ES_USER_FIELD = 'user.name'; @@ -180,10 +185,24 @@ const UsersDetailsComponent: React.FC = ({ const entity = useMemo(() => ({ type: 'user' as const, name: detailName }), [detailName]); const privileges = useAssetCriticalityPrivileges(entity.name); + + const refetchRiskScore = useRefetchOverviewPageRiskScore(USER_OVERVIEW_RISK_SCORE_QUERY_ID); + const { calculateEntityRiskScore } = useCalculateEntityRiskScore( + RiskScoreEntity.user, + detailName, + { onSuccess: refetchRiskScore } + ); + + const additionalFilters = useMemo( + () => (rawFilteredQuery ? [rawFilteredQuery] : []), + [rawFilteredQuery] + ); + const canReadAssetCriticality = !!privileges.data?.has_read_permissions; const criticality = useAssetCriticalityData({ entity, enabled: canReadAssetCriticality, + onChange: calculateEntityRiskScore, }); return ( @@ -250,14 +269,14 @@ const UsersDetailsComponent: React.FC = ({
diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.stories.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.stories.tsx index 4d998153cda1b..3bca4be245646 100644 --- a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.stories.tsx +++ b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.stories.tsx @@ -35,6 +35,8 @@ storiesOf('Components/HostPanelContent', module) isDraggable={false} openDetailsPanel={() => {}} hostName={'test-host-name'} + onAssetCriticalityChange={() => {}} + recalculatingScore={false} /> )) .add('no observed data', () => ( @@ -58,6 +60,8 @@ storiesOf('Components/HostPanelContent', module) isDraggable={false} openDetailsPanel={() => {}} hostName={'test-host-name'} + onAssetCriticalityChange={() => {}} + recalculatingScore={false} /> )) .add('loading', () => ( @@ -81,5 +85,7 @@ storiesOf('Components/HostPanelContent', module) isDraggable={false} openDetailsPanel={() => {}} hostName={'test-host-name'} + onAssetCriticalityChange={() => {}} + recalculatingScore={false} /> )); diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.tsx index 64d5ea41898a0..a2d7b7b733ee0 100644 --- a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.tsx +++ b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/content.tsx @@ -26,16 +26,20 @@ interface HostPanelContentProps { isDraggable: boolean; openDetailsPanel: (tab: EntityDetailsLeftPanelTab) => void; hostName: string; + onAssetCriticalityChange: () => void; + recalculatingScore: boolean; } export const HostPanelContent = ({ hostName, observedHost, riskScoreState, + recalculatingScore, contextID, scopeId, isDraggable, openDetailsPanel, + onAssetCriticalityChange, }: HostPanelContentProps) => { const observedFields = useObservedHostFields(observedHost); @@ -45,13 +49,17 @@ export const HostPanelContent = ({ <> )} - + { expect(getByTestId('securitySolutionFlyoutNavigationExpandDetailButton')).toBeInTheDocument(); }); - it('renders loading state when risk score is loading', () => { - mockedHostRiskScore.mockReturnValue({ - ...mockHostRiskScoreState, - data: undefined, - loading: true, - }); - - const { getByTestId } = render( - - - - ); - - expect(getByTestId('securitySolutionFlyoutLoading')).toBeInTheDocument(); - }); - it('renders loading state when observed host is loading', () => { mockedUseObservedHost.mockReturnValue({ ...mockObservedHostData, diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/index.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/index.tsx index 3d649ad360cd0..2c58eb0eb324c 100644 --- a/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/index.tsx +++ b/x-pack/plugins/security_solution/public/flyout/entity_details/host_right/index.tsx @@ -9,6 +9,10 @@ import React, { useCallback, useMemo } from 'react'; import type { FlyoutPanelProps } from '@kbn/expandable-flyout'; import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import { useRefetchQueryById } from '../../../entity_analytics/api/hooks/use_refetch_query_by_id'; +import { RISK_INPUTS_TAB_QUERY_ID } from '../../../entity_analytics/components/entity_details_flyout/tabs/risk_inputs/risk_inputs_tab'; +import type { Refetch } from '../../../common/types'; +import { useCalculateEntityRiskScore } from '../../../entity_analytics/api/hooks/use_calculate_entity_risk_score'; import { useKibana } from '../../../common/lib/kibana/kibana_react'; import { hostToCriteria } from '../../../common/components/ml/criteria/host_to_criteria'; import { useRiskScore } from '../../../entity_analytics/api/hooks/use_risk_score'; @@ -68,6 +72,18 @@ export const HostPanel = ({ contextID, scopeId, hostName, isDraggable }: HostPan const hostRiskData = hostRisk && hostRisk.length > 0 ? hostRisk[0] : undefined; const isRiskScoreExist = !!hostRiskData?.host.risk; + const refetchRiskInputsTab = useRefetchQueryById(RISK_INPUTS_TAB_QUERY_ID); + const refetchRiskScore = useCallback(() => { + refetch(); + (refetchRiskInputsTab as Refetch | null)?.(); + }, [refetch, refetchRiskInputsTab]); + + const { isLoading: recalculatingScore, calculateEntityRiskScore } = useCalculateEntityRiskScore( + RiskScoreEntity.host, + hostName, + { onSuccess: refetchRiskScore } + ); + useQueryInspector({ deleteQuery, inspect: inspectRiskScore, @@ -98,7 +114,7 @@ export const HostPanel = ({ contextID, scopeId, hostName, isDraggable }: HostPan const openDefaultPanel = useCallback(() => openTabPanel(), [openTabPanel]); const observedHost = useObservedHost(hostName); - if (riskScoreState.loading || observedHost.isLoading) { + if (observedHost.isLoading) { return ; } @@ -134,6 +150,8 @@ export const HostPanel = ({ contextID, scopeId, hostName, isDraggable }: HostPan scopeId={scopeId} isDraggable={!!isDraggable} openDetailsPanel={openTabPanel} + recalculatingScore={recalculatingScore} + onAssetCriticalityChange={calculateEntityRiskScore} /> ); diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.stories.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.stories.tsx index 64fa6dcd80913..57705099edc05 100644 --- a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.stories.tsx +++ b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.stories.tsx @@ -39,6 +39,8 @@ storiesOf('Components/UserPanelContent', module) isDraggable={false} openDetailsPanel={() => {}} userName={'test-user-name'} + onAssetCriticalityChange={() => {}} + recalculatingScore={false} /> )) .add('integration disabled', () => ( @@ -55,6 +57,8 @@ storiesOf('Components/UserPanelContent', module) isDraggable={false} openDetailsPanel={() => {}} userName={'test-user-name'} + onAssetCriticalityChange={() => {}} + recalculatingScore={false} /> )) .add('no managed data', () => ( @@ -71,6 +75,8 @@ storiesOf('Components/UserPanelContent', module) isDraggable={false} openDetailsPanel={() => {}} userName={'test-user-name'} + onAssetCriticalityChange={() => {}} + recalculatingScore={false} /> )) .add('no observed data', () => ( @@ -107,6 +113,8 @@ storiesOf('Components/UserPanelContent', module) isDraggable={false} openDetailsPanel={() => {}} userName={'test-user-name'} + onAssetCriticalityChange={() => {}} + recalculatingScore={false} /> )) .add('loading', () => ( @@ -147,5 +155,7 @@ storiesOf('Components/UserPanelContent', module) isDraggable={false} openDetailsPanel={() => {}} userName={'test-user-name'} + onAssetCriticalityChange={() => {}} + recalculatingScore={false} /> )); diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.tsx index 7c40e4b30507f..46e5e9beaa3aa 100644 --- a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.tsx +++ b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/content.tsx @@ -29,9 +29,11 @@ interface UserPanelContentProps { observedUser: ObservedEntityData; managedUser: ManagedUserData; riskScoreState: RiskScoreState; + recalculatingScore: boolean; contextID: string; scopeId: string; isDraggable: boolean; + onAssetCriticalityChange: () => void; openDetailsPanel: (tab: EntityDetailsLeftPanelTab) => void; } @@ -40,10 +42,12 @@ export const UserPanelContent = ({ observedUser, managedUser, riskScoreState, + recalculatingScore, contextID, scopeId, isDraggable, openDetailsPanel, + onAssetCriticalityChange, }: UserPanelContentProps) => { const observedFields = useObservedUserItems(observedUser); const isManagedUserEnable = useIsExperimentalFeatureEnabled('newUserDetailsFlyoutManagedUser'); @@ -54,13 +58,17 @@ export const UserPanelContent = ({ <> )} - + { expect(getByTestId('securitySolutionFlyoutNavigationExpandDetailButton')).toBeInTheDocument(); }); - it('renders loading state when risk score is loading', () => { - mockedUseRiskScore.mockReturnValue({ - ...mockRiskScoreState, - data: undefined, - loading: true, - }); - - const { getByTestId } = render( - - - - ); - - expect(getByTestId('securitySolutionFlyoutLoading')).toBeInTheDocument(); - }); - it('renders loading state when observed user is loading', () => { mockedUseObservedUser.mockReturnValue({ ...mockObservedUser, diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/index.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/index.tsx index a342a1318bb24..3aac81f343016 100644 --- a/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/index.tsx +++ b/x-pack/plugins/security_solution/public/flyout/entity_details/user_right/index.tsx @@ -8,6 +8,10 @@ import React, { useCallback, useMemo } from 'react'; import type { FlyoutPanelProps } from '@kbn/expandable-flyout'; import { useExpandableFlyoutApi } from '@kbn/expandable-flyout'; +import { useRefetchQueryById } from '../../../entity_analytics/api/hooks/use_refetch_query_by_id'; +import type { Refetch } from '../../../common/types'; +import { RISK_INPUTS_TAB_QUERY_ID } from '../../../entity_analytics/components/entity_details_flyout/tabs/risk_inputs/risk_inputs_tab'; +import { useCalculateEntityRiskScore } from '../../../entity_analytics/api/hooks/use_calculate_entity_risk_score'; import { useKibana } from '../../../common/lib/kibana/kibana_react'; import { useRiskScore } from '../../../entity_analytics/api/hooks/use_risk_score'; import { ManagedUserDatasetKey } from '../../../../common/search_strategy/security_solution/users/managed_details'; @@ -70,6 +74,18 @@ export const UserPanel = ({ contextID, scopeId, userName, isDraggable }: UserPan const { data: userRisk } = riskScoreState; const userRiskData = userRisk && userRisk.length > 0 ? userRisk[0] : undefined; + const refetchRiskInputsTab = useRefetchQueryById(RISK_INPUTS_TAB_QUERY_ID); + const refetchRiskScore = useCallback(() => { + refetch(); + (refetchRiskInputsTab as Refetch | null)?.(); + }, [refetch, refetchRiskInputsTab]); + + const { isLoading: recalculatingScore, calculateEntityRiskScore } = useCalculateEntityRiskScore( + RiskScoreEntity.user, + userName, + { onSuccess: refetchRiskScore } + ); + useQueryInspector({ deleteQuery, inspect, @@ -108,7 +124,7 @@ export const UserPanel = ({ contextID, scopeId, userName, isDraggable }: UserPan !!managedUser.data?.[ManagedUserDatasetKey.OKTA] || !!managedUser.data?.[ManagedUserDatasetKey.ENTRA]; - if (riskScoreState.loading || observedUser.isLoading || managedUser.isLoading) { + if (observedUser.isLoading || managedUser.isLoading) { return ; } @@ -144,6 +160,8 @@ export const UserPanel = ({ contextID, scopeId, userName, isDraggable }: UserPan managedUser={managedUser} observedUser={observedUserWithAnomalies} riskScoreState={riskScoreState} + recalculatingScore={recalculatingScore} + onAssetCriticalityChange={calculateEntityRiskScore} contextID={contextID} scopeId={scopeId} isDraggable={!!isDraggable} diff --git a/x-pack/plugins/security_solution/public/overview/components/host_overview/index.tsx b/x-pack/plugins/security_solution/public/overview/components/host_overview/index.tsx index 92ff143585117..6b499b085a23c 100644 --- a/x-pack/plugins/security_solution/public/overview/components/host_overview/index.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/host_overview/index.tsx @@ -10,6 +10,9 @@ import { euiDarkVars as darkTheme, euiLightVars as lightTheme } from '@kbn/ui-th import { getOr } from 'lodash/fp'; import React, { useCallback, useMemo } from 'react'; import styled from 'styled-components'; +import { useGlobalTime } from '../../../common/containers/use_global_time'; +import { useQueryInspector } from '../../../common/components/page/manage_query'; +import { FIRST_RECORD_PAGINATION } from '../../../entity_analytics/common'; import { useRiskScore } from '../../../entity_analytics/api/hooks/use_risk_score'; import type { HostItem } from '../../../../common/search_strategy'; import { buildHostNamesFilter, RiskScoreEntity } from '../../../../common/search_strategy'; @@ -63,6 +66,8 @@ const HostRiskOverviewWrapper = styled(EuiFlexGroup)` width: ${({ $width }: { $width: string }) => $width}; `; +export const HOST_OVERVIEW_RISK_SCORE_QUERY_ID = 'riskInputsTabQuery'; + export const HostOverview = React.memo( ({ anomaliesData, @@ -88,11 +93,29 @@ export const HostOverview = React.memo( () => (hostName ? buildHostNamesFilter([hostName]) : undefined), [hostName] ); + const { deleteQuery, setQuery } = useGlobalTime(); - const { data: hostRisk, isAuthorized } = useRiskScore({ + const { + data: hostRisk, + isAuthorized, + inspect: inspectRiskScore, + loading: loadingRiskScore, + refetch: refetchRiskScore, + } = useRiskScore({ filterQuery, riskEntity: RiskScoreEntity.host, skip: hostName == null, + onlyLatest: false, + pagination: FIRST_RECORD_PAGINATION, + }); + + useQueryInspector({ + deleteQuery, + inspect: inspectRiskScore, + loading: loadingRiskScore, + queryId: HOST_OVERVIEW_RISK_SCORE_QUERY_ID, + refetch: refetchRiskScore, + setQuery, }); const getDefaultRenderer = useCallback( diff --git a/x-pack/plugins/security_solution/public/overview/components/user_overview/index.tsx b/x-pack/plugins/security_solution/public/overview/components/user_overview/index.tsx index bd9e56dffee8d..321f87a3b5984 100644 --- a/x-pack/plugins/security_solution/public/overview/components/user_overview/index.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/user_overview/index.tsx @@ -10,6 +10,9 @@ import { euiDarkVars as darkTheme, euiLightVars as lightTheme } from '@kbn/ui-th import { getOr } from 'lodash/fp'; import React, { useCallback, useMemo } from 'react'; import styled from 'styled-components'; +import { useGlobalTime } from '../../../common/containers/use_global_time'; +import { FIRST_RECORD_PAGINATION } from '../../../entity_analytics/common'; +import { useQueryInspector } from '../../../common/components/page/manage_query'; import { useRiskScore } from '../../../entity_analytics/api/hooks/use_risk_score'; import { buildUserNamesFilter, RiskScoreEntity } from '../../../../common/search_strategy'; import type { DescriptionList } from '../../../../common/utility_types'; @@ -61,6 +64,8 @@ const UserRiskOverviewWrapper = styled(EuiFlexGroup)` width: ${({ $width }: { $width: string }) => $width}; `; +export const USER_OVERVIEW_RISK_SCORE_QUERY_ID = 'riskInputsTabQuery'; + export const UserOverview = React.memo( ({ anomaliesData, @@ -86,11 +91,29 @@ export const UserOverview = React.memo( () => (userName ? buildUserNamesFilter([userName]) : undefined), [userName] ); + const { deleteQuery, setQuery } = useGlobalTime(); - const { data: userRisk, isAuthorized } = useRiskScore({ + const { + data: userRisk, + isAuthorized, + inspect: inspectRiskScore, + loading: loadingRiskScore, + refetch: refetchRiskScore, + } = useRiskScore({ filterQuery, skip: userName == null, riskEntity: RiskScoreEntity.user, + onlyLatest: false, + pagination: FIRST_RECORD_PAGINATION, + }); + + useQueryInspector({ + deleteQuery, + inspect: inspectRiskScore, + loading: loadingRiskScore, + queryId: USER_OVERVIEW_RISK_SCORE_QUERY_ID, + refetch: refetchRiskScore, + setQuery, }); const getDefaultRenderer = useCallback( diff --git a/x-pack/plugins/security_solution/public/overview/pages/detection_response.tsx b/x-pack/plugins/security_solution/public/overview/pages/detection_response.tsx index edfda063ac5ba..3da5612254215 100644 --- a/x-pack/plugins/security_solution/public/overview/pages/detection_response.tsx +++ b/x-pack/plugins/security_solution/public/overview/pages/detection_response.tsx @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React from 'react'; +import React, { useMemo } from 'react'; import { EuiFlexGroup, EuiFlexItem, EuiLoadingSpinner } from '@elastic/eui'; import type { DocLinks } from '@kbn/doc-links'; import { APP_ID } from '../../../common'; @@ -43,6 +43,8 @@ const DetectionResponseComponent = () => { const canReadCases = userCasesPermissions.read; const canReadAlerts = hasKibanaREAD && hasIndexRead; const isSocTrendsEnabled = useIsExperimentalFeatureEnabled('socTrendsEnabled'); + const additionalFilters = useMemo(() => (filterQuery ? [filterQuery] : []), [filterQuery]); + if (!canReadAlerts && !canReadCases) { return docLinks.siem.privileges} />; } @@ -66,7 +68,7 @@ const DetectionResponseComponent = () => { )} diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.ts index 81f0386a6c96c..fd5c2921972f3 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/asset_criticality_data_client.ts @@ -141,7 +141,10 @@ export class AssetCriticalityDataClient { } } - public async upsert(record: AssetCriticalityUpsert): Promise { + public async upsert( + record: AssetCriticalityUpsert, + refresh = 'wait_for' as const + ): Promise { const id = createId(record); const doc = { id_field: record.idField, @@ -153,6 +156,7 @@ export class AssetCriticalityDataClient { await this.options.esClient.update({ id, index: this.getIndex(), + refresh: refresh ?? false, body: { doc, doc_as_upsert: true, @@ -240,10 +244,11 @@ export class AssetCriticalityDataClient { return { errors, stats }; }; - public async delete(idParts: AssetCriticalityIdParts) { + public async delete(idParts: AssetCriticalityIdParts, refresh = 'wait_for' as const) { await this.options.esClient.delete({ id: createId(idParts), index: this.getIndex(), + refresh: refresh ?? false, }); } } diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/delete.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/delete.ts index f9630542283ef..6f1d677d414c5 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/delete.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/delete.ts @@ -12,7 +12,7 @@ import { APP_ID, ENABLE_ASSET_CRITICALITY_SETTING, } from '../../../../../common/constants'; -import { AssetCriticalityRecordIdParts } from '../../../../../common/api/entity_analytics/asset_criticality'; +import { DeleteAssetCriticalityRecord } from '../../../../../common/api/entity_analytics/asset_criticality'; import { buildRouteValidationWithZod } from '../../../../utils/build_validation/route_validation'; import { checkAndInitAssetCriticalityResources } from '../check_and_init_asset_criticality_resources'; import { assertAdvancedSettingsEnabled } from '../../utils/assert_advanced_setting_enabled'; @@ -36,7 +36,7 @@ export const assetCriticalityDeleteRoute = ( version: '1', validate: { request: { - query: buildRouteValidationWithZod(AssetCriticalityRecordIdParts), + query: buildRouteValidationWithZod(DeleteAssetCriticalityRecord), }, }, }, @@ -59,10 +59,13 @@ export const assetCriticalityDeleteRoute = ( await checkAndInitAssetCriticalityResources(context, logger); const assetCriticalityClient = securitySolution.getAssetCriticalityDataClient(); - await assetCriticalityClient.delete({ - idField: request.query.id_field, - idValue: request.query.id_value, - }); + await assetCriticalityClient.delete( + { + idField: request.query.id_field, + idValue: request.query.id_value, + }, + request.query.refresh + ); return response.ok(); } catch (e) { diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/upsert.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/upsert.ts index 3e460b3f4e543..8a6d475695962 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/upsert.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/asset_criticality/routes/upsert.ts @@ -55,7 +55,10 @@ export const assetCriticalityUpsertRoute = ( criticalityLevel: request.body.criticality_level, }; - const result = await assetCriticalityClient.upsert(assetCriticalityRecord); + const result = await assetCriticalityClient.upsert( + assetCriticalityRecord, + request.body.refresh + ); securitySolution.getAuditLogger()?.log({ message: 'User attempted to assign the asset criticality level for an entity', diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.ts index 09fe204fe69e1..aa67d4abf78ba 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.ts @@ -21,7 +21,7 @@ export const calculateAndPersistRiskScores = async ( riskScoreDataClient: RiskScoreDataClient; } ): Promise => { - const { riskScoreDataClient, spaceId, returnScores, ...rest } = params; + const { riskScoreDataClient, spaceId, returnScores, refresh, ...rest } = params; const writer = await riskScoreDataClient.getWriter({ namespace: spaceId, @@ -40,7 +40,7 @@ export const calculateAndPersistRiskScores = async ( ); } - const { errors, docs_written: scoresWritten } = await writer.bulk(scores); + const { errors, docs_written: scoresWritten } = await writer.bulk({ ...scores, refresh }); const result = { after_keys: afterKeys, errors, scores_written: scoresWritten }; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_engine_data_writer.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_engine_data_writer.ts index e43b44ab01894..e140090ea55e4 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_engine_data_writer.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_engine_data_writer.ts @@ -18,6 +18,7 @@ interface WriterBulkResponse { interface BulkParams { host?: RiskScore[]; user?: RiskScore[]; + refresh?: 'wait_for'; } export interface RiskEngineDataWriter { @@ -42,6 +43,7 @@ export class RiskEngineDataWriter implements RiskEngineDataWriter { const { errors, items, took } = await this.options.esClient.bulk({ operations: this.buildBulkOperations(params), + refresh: params.refresh ?? false, }); return { diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.ts index bfc86643a6fd0..b326f50f767a4 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.ts @@ -44,6 +44,7 @@ export interface RiskScoreServiceFactoryParams { riskEngineDataClient: RiskEngineDataClient; riskScoreDataClient: RiskScoreDataClient; spaceId: string; + refresh?: 'wait_for'; } export const riskScoreServiceFactory = ({ diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.test.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.test.ts index 1ba609e885dda..dbb8459d0ae42 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.test.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.test.ts @@ -92,7 +92,9 @@ describe('entity risk score calculation route', () => { expect(response.status).toEqual(200); expect(mockRiskScoreService.calculateAndPersistScores).toHaveBeenCalledWith( - expect.objectContaining({ filter: [{ term: { 'host.name': 'test-host-name' } }] }) + expect.objectContaining({ + filter: { bool: { filter: [{ term: { 'host.name': 'test-host-name' } }] } }, + }) ); }); @@ -118,9 +120,9 @@ describe('entity risk score calculation route', () => { expect(response.body).toEqual({ message: 'No Risk engine configuration found', - status_code: 405, + status_code: 400, }); - expect(response.status).toEqual(405); + expect(response.status).toEqual(400); }); it('returns an error if the risk engine is disabled', async () => { @@ -133,9 +135,9 @@ describe('entity risk score calculation route', () => { expect(response.body).toEqual({ message: 'Risk engine is disabled', - status_code: 405, + status_code: 400, }); - expect(response.status).toEqual(405); + expect(response.status).toEqual(400); }); it('filter by user provided filter when it is defined', async () => { @@ -149,7 +151,9 @@ describe('entity risk score calculation route', () => { expect(response.status).toEqual(200); expect(mockRiskScoreService.calculateAndPersistScores).toHaveBeenCalledWith( - expect.objectContaining({ filter: expect.arrayContaining([userFilter]) }) + expect.objectContaining({ + filter: { bool: { filter: expect.arrayContaining([userFilter]) } }, + }) ); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.ts index 497e9ac189100..98b4149f70230 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.ts @@ -69,7 +69,7 @@ export const riskScoreEntityCalculationRoute = ( logger ); - const { identifier_type: identifierType, identifier } = request.body; + const { identifier_type: identifierType, identifier, refresh } = request.body; try { const entityAnalyticsConfig = await riskScoreService.getConfigurationWithDefaults( @@ -78,7 +78,7 @@ export const riskScoreEntityCalculationRoute = ( if (entityAnalyticsConfig == null) { return siemResponse.error({ - statusCode: 405, + statusCode: 400, body: 'No Risk engine configuration found', }); } @@ -94,7 +94,7 @@ export const riskScoreEntityCalculationRoute = ( if (!enabled) { return siemResponse.error({ - statusCode: 405, + statusCode: 400, body: 'Risk engine is disabled', }); } @@ -112,6 +112,7 @@ export const riskScoreEntityCalculationRoute = ( const identifierFilter = { term: { [getFieldForIdentifier(identifierType)]: identifier }, }; + const filter = isEmpty(userFilter) ? [identifierFilter] : [userFilter, identifierFilter]; const result: CalculateAndPersistScoresResponse = @@ -119,13 +120,18 @@ export const riskScoreEntityCalculationRoute = ( pageSize, identifierType, index, - filter, + filter: { + bool: { + filter, + }, + }, range, runtimeMappings, weights: [], alertSampleSizePerShard, afterKeys, returnScores: true, + refresh, }); if (result.errors.length) { diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/types.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/types.ts index d41edbd215642..a71912d2dffa4 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/types.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/types.ts @@ -52,6 +52,7 @@ export interface CalculateAndPersistScoresParams { weights?: RiskWeights; alertSampleSizePerShard?: number; returnScores?: boolean; + refresh?: 'wait_for'; } export interface CalculateAndPersistScoresResponse { From 922900654288002f120f65f32f0d50f27d0ab1cb Mon Sep 17 00:00:00 2001 From: Stratoula Kalafateli Date: Wed, 8 May 2024 13:21:53 +0200 Subject: [PATCH 20/34] [ES|QL] Enable serverless tests (#181570) ## Summary Adds tests for testing ES|QL in serverless deployments. I am adding the _esql_view in Discover for now but I also want to add the dashboard esql tests too Flaky test runner (25 times) https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5859 --------- Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../services/deployment_agnostic_services.ts | 1 + .../common/discover/esql/_esql_view.ts | 530 ++++++++++++++++++ .../test_suites/common/discover/esql/index.ts | 14 + .../common_configs/config.group6.ts | 1 + .../search/common_configs/config.group6.ts | 1 + .../security/common_configs/config.group6.ts | 1 + 6 files changed, 548 insertions(+) create mode 100644 x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts create mode 100644 x-pack/test_serverless/functional/test_suites/common/discover/esql/index.ts diff --git a/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts b/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts index 0bbae5c25cdd5..f710dca081668 100644 --- a/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts +++ b/x-pack/test_serverless/functional/services/deployment_agnostic_services.ts @@ -52,6 +52,7 @@ const deploymentAgnosticFunctionalServices = _.pick(functionalServices, [ 'menuToggle', 'ml', 'monacoEditor', + 'esql', 'pieChart', 'pipelineEditor', 'pipelineList', diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts b/x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts new file mode 100644 index 0000000000000..5f051ac77bba0 --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/discover/esql/_esql_view.ts @@ -0,0 +1,530 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license 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'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const esArchiver = getService('esArchiver'); + const kibanaServer = getService('kibanaServer'); + const log = getService('log'); + const dataGrid = getService('dataGrid'); + const testSubjects = getService('testSubjects'); + const monacoEditor = getService('monacoEditor'); + const inspector = getService('inspector'); + const retry = getService('retry'); + const browser = getService('browser'); + const find = getService('find'); + const esql = getService('esql'); + const dashboardAddPanel = getService('dashboardAddPanel'); + const PageObjects = getPageObjects([ + 'svlCommonPage', + 'common', + 'discover', + 'dashboard', + 'header', + 'timePicker', + 'unifiedFieldList', + ]); + + const defaultSettings = { + defaultIndex: 'logstash-*', + }; + + describe('discover esql view', async function () { + before(async () => { + await kibanaServer.savedObjects.cleanStandardList(); + log.debug('load kibana index with default index pattern'); + await kibanaServer.importExport.load('test/functional/fixtures/kbn_archiver/discover'); + // and load a set of makelogs data + await esArchiver.loadIfNeeded('test/functional/fixtures/es_archiver/logstash_functional'); + await kibanaServer.uiSettings.replace(defaultSettings); + await PageObjects.svlCommonPage.loginAsAdmin(); + await PageObjects.common.navigateToApp('discover'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.timePicker.setDefaultAbsoluteRange(); + }); + + describe('test', () => { + it('should render esql view correctly', async function () { + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + + await testSubjects.existOrFail('showQueryBarMenu'); + await testSubjects.existOrFail('superDatePickerToggleQuickMenuButton'); + await testSubjects.existOrFail('addFilter'); + await testSubjects.existOrFail('dscViewModeDocumentButton'); + await testSubjects.existOrFail('unifiedHistogramChart'); + await testSubjects.existOrFail('discoverQueryHits'); + await testSubjects.existOrFail('discoverAlertsButton'); + await testSubjects.existOrFail('shareTopNavButton'); + await testSubjects.existOrFail('docTableExpandToggleColumn'); + await testSubjects.existOrFail('dataGridColumnSortingButton'); + await testSubjects.existOrFail('fieldListFiltersFieldSearch'); + await testSubjects.existOrFail('fieldListFiltersFieldTypeFilterToggle'); + await testSubjects.click('field-@message-showDetails'); + await testSubjects.existOrFail('discoverFieldListPanelEdit-@message'); + + await PageObjects.discover.selectTextBaseLang(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + + await testSubjects.existOrFail('fieldListFiltersFieldSearch'); + await testSubjects.existOrFail('TextBasedLangEditor'); + await testSubjects.existOrFail('superDatePickerToggleQuickMenuButton'); + + await testSubjects.missingOrFail('showQueryBarMenu'); + await testSubjects.missingOrFail('addFilter'); + await testSubjects.missingOrFail('dscViewModeDocumentButton'); + // when Lens suggests a table, we render an ESQL based histogram + await testSubjects.existOrFail('unifiedHistogramChart'); + await testSubjects.existOrFail('discoverQueryHits'); + await testSubjects.existOrFail('discoverAlertsButton'); + await testSubjects.existOrFail('shareTopNavButton'); + await testSubjects.existOrFail('dataGridColumnSortingButton'); + await testSubjects.existOrFail('docTableExpandToggleColumn'); + await testSubjects.existOrFail('fieldListFiltersFieldTypeFilterToggle'); + await testSubjects.click('field-@message-showDetails'); + await testSubjects.missingOrFail('discoverFieldListPanelEditItem'); + }); + + it('should perform test query correctly', async function () { + await PageObjects.discover.selectTextBaseLang(); + const testQuery = `from logstash-* | limit 10 | stats countB = count(bytes) by geo.dest | sort countB`; + + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + // here Lens suggests a XY so it is rendered + await testSubjects.existOrFail('unifiedHistogramChart'); + await testSubjects.existOrFail('xyVisChart'); + const cell = await dataGrid.getCellElement(0, 2); + expect(await cell.getVisibleText()).to.be('1'); + }); + + it('should render when switching to a time range with no data, then back to a time range with data', async () => { + await PageObjects.discover.selectTextBaseLang(); + const testQuery = `from logstash-* | limit 10 | stats countB = count(bytes) by geo.dest | sort countB`; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + let cell = await dataGrid.getCellElement(0, 2); + expect(await cell.getVisibleText()).to.be('1'); + await PageObjects.timePicker.setAbsoluteRange( + 'Sep 19, 2015 @ 06:31:44.000', + 'Sep 19, 2015 @ 06:31:44.000' + ); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await testSubjects.existOrFail('discoverNoResults'); + await PageObjects.timePicker.setDefaultAbsoluteRange(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + cell = await dataGrid.getCellElement(0, 2); + expect(await cell.getVisibleText()).to.be('1'); + }); + + it('should query an index pattern that doesnt translate to a dataview correctly', async function () { + await PageObjects.discover.selectTextBaseLang(); + const testQuery = `from logstash* | limit 10 | stats countB = count(bytes) by geo.dest | sort countB`; + + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + + const cell = await dataGrid.getCellElement(0, 2); + expect(await cell.getVisibleText()).to.be('1'); + }); + + it('should render correctly if there are empty fields', async function () { + await PageObjects.discover.selectTextBaseLang(); + const testQuery = `from logstash-* | limit 10 | keep machine.ram_range, bytes`; + + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + const cell = await dataGrid.getCellElement(0, 3); + expect(await cell.getVisibleText()).to.be(' - '); + expect(await dataGrid.getHeaders()).to.eql([ + 'Control column', + 'Select column', + 'Numberbytes', + 'machine.ram_range', + ]); + }); + + it('should work without a FROM statement', async function () { + await PageObjects.discover.selectTextBaseLang(); + const testQuery = `ROW a = 1, b = "two", c = null`; + + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + + await PageObjects.discover.dragFieldToTable('a'); + const cell = await dataGrid.getCellElement(0, 2); + expect(await cell.getVisibleText()).to.be('1'); + }); + }); + + describe('errors', () => { + it('should show error messages for syntax errors in query', async function () { + await PageObjects.discover.selectTextBaseLang(); + const brokenQueries = [ + 'from logstash-* | limit 10*', + 'from logstash-* | limit A', + 'from logstash-* | where a*', + 'limit 10', + ]; + for (const testQuery of brokenQueries) { + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + // error in fetching documents because of the invalid query + await PageObjects.discover.showsErrorCallout(); + const message = await testSubjects.getVisibleText('discoverErrorCalloutMessage'); + expect(message).to.contain( + "[esql] > Couldn't parse Elasticsearch ES|QL query. Check your query and try again." + ); + expect(message).to.not.contain('undefined'); + if (message.includes('line')) { + expect((await monacoEditor.getCurrentMarkers('kibanaCodeEditor')).length).to.eql(1); + } + } + }); + }); + + describe('switch modal', () => { + beforeEach(async () => { + await PageObjects.common.navigateToApp('discover'); + await PageObjects.timePicker.setDefaultAbsoluteRange(); + }); + + it('should show switch modal when switching to a data view', async () => { + await PageObjects.discover.selectTextBaseLang(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.discover.selectIndexPattern('logstash-*', false); + await retry.try(async () => { + await testSubjects.existOrFail('unifiedSearch_switch_modal'); + }); + }); + + it('should not show switch modal when switching to a data view while a saved search is open', async () => { + await PageObjects.discover.selectTextBaseLang(); + const testQuery = 'from logstash-* | limit 100 | drop @timestamp'; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.discover.selectIndexPattern('logstash-*', false); + await retry.try(async () => { + await testSubjects.existOrFail('unifiedSearch_switch_modal'); + }); + await find.clickByCssSelector( + '[data-test-subj="unifiedSearch_switch_modal"] .euiModal__closeIcon' + ); + await retry.try(async () => { + await testSubjects.missingOrFail('unifiedSearch_switch_modal'); + }); + await PageObjects.discover.saveSearch('esql_test'); + await PageObjects.discover.selectIndexPattern('logstash-*'); + await testSubjects.missingOrFail('unifiedSearch_switch_modal'); + }); + + it('should show switch modal when switching to a data view while a saved search with unsaved changes is open', async () => { + await PageObjects.discover.selectTextBaseLang(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.discover.saveSearch('esql_test2'); + const testQuery = 'from logstash-* | limit 100 | drop @timestamp'; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.discover.selectIndexPattern('logstash-*', false); + await retry.try(async () => { + await testSubjects.existOrFail('unifiedSearch_switch_modal'); + }); + }); + }); + + describe('inspector', () => { + beforeEach(async () => { + await PageObjects.common.navigateToApp('discover'); + await PageObjects.timePicker.setDefaultAbsoluteRange(); + }); + + it('shows Discover and Lens requests in Inspector', async () => { + await PageObjects.discover.selectTextBaseLang(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await inspector.open(); + const requestNames = await inspector.getRequestNames(); + expect(requestNames).to.contain('Table'); + expect(requestNames).to.contain('Visualization'); + }); + }); + + describe('query history', () => { + beforeEach(async () => { + await PageObjects.common.navigateToApp('discover'); + await PageObjects.timePicker.setDefaultAbsoluteRange(); + }); + + it('should see my current query in the history', async () => { + await PageObjects.discover.selectTextBaseLang(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + + await testSubjects.click('TextBasedLangEditor-expand'); + await testSubjects.click('TextBasedLangEditor-toggle-query-history-button'); + const historyItems = await esql.getHistoryItems(); + log.debug(historyItems); + const queryAdded = historyItems.some((item) => { + return item[1] === 'from logstash-* | limit 10'; + }); + + expect(queryAdded).to.be(true); + }); + + it('updating the query should add this to the history', async () => { + await PageObjects.discover.selectTextBaseLang(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + + const testQuery = 'from logstash-* | limit 100 | drop @timestamp'; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await testSubjects.click('TextBasedLangEditor-expand'); + await testSubjects.click('TextBasedLangEditor-toggle-query-history-button'); + const historyItems = await esql.getHistoryItems(); + log.debug(historyItems); + const queryAdded = historyItems.some((item) => { + return item[1] === 'from logstash-* | limit 100 | drop @timestamp'; + }); + + expect(queryAdded).to.be(true); + }); + + it('should select a query from the history and submit it', async () => { + await PageObjects.discover.selectTextBaseLang(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + + await testSubjects.click('TextBasedLangEditor-expand'); + await testSubjects.click('TextBasedLangEditor-toggle-query-history-button'); + // click a history item + await esql.clickHistoryItem(1); + + const historyItems = await esql.getHistoryItems(); + log.debug(historyItems); + const queryAdded = historyItems.some((item) => { + return item[1] === 'from logstash-* | limit 100 | drop @timestamp'; + }); + + expect(queryAdded).to.be(true); + }); + + it('should add a failed query to the history', async () => { + await PageObjects.discover.selectTextBaseLang(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + + const testQuery = 'from logstash-* | limit 100 | woof and meow'; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + await testSubjects.click('TextBasedLangEditor-expand'); + await testSubjects.click('TextBasedLangEditor-toggle-query-history-button'); + await testSubjects.click('TextBasedLangEditor-queryHistory-runQuery-button'); + const historyItem = await esql.getHistoryItem(0); + await historyItem.findByTestSubject('TextBasedLangEditor-queryHistory-error'); + }); + }); + + describe('sorting', () => { + it('should sort correctly', async () => { + const savedSearchName = 'testSorting'; + + await PageObjects.discover.selectTextBaseLang(); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + const testQuery = 'from logstash-* | sort @timestamp | limit 100'; + await monacoEditor.setCodeEditorValue(testQuery); + await testSubjects.click('querySubmitButton'); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + await PageObjects.unifiedFieldList.waitUntilSidebarHasLoaded(); + + await PageObjects.unifiedFieldList.clickFieldListItemAdd('bytes'); + + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await retry.waitFor('first cell contains an initial value', async () => { + const cell = await dataGrid.getCellElement(0, 2); + const text = await cell.getVisibleText(); + return text === '1,623'; + }); + + expect(await testSubjects.getVisibleText('dataGridColumnSortingButton')).to.be( + 'Sort fields' + ); + + await dataGrid.clickDocSortDesc('bytes', 'Sort High-Low'); + + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await retry.waitFor('first cell contains the highest value', async () => { + const cell = await dataGrid.getCellElement(0, 2); + const text = await cell.getVisibleText(); + return text === '483'; + }); + + expect(await testSubjects.getVisibleText('dataGridColumnSortingButton')).to.be( + 'Sort fields\n1' + ); + + await PageObjects.discover.saveSearch(savedSearchName); + + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await retry.waitFor('first cell contains the same highest value', async () => { + const cell = await dataGrid.getCellElement(0, 2); + const text = await cell.getVisibleText(); + return text === '483'; + }); + + await browser.refresh(); + + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await retry.waitFor('first cell contains the same highest value after reload', async () => { + const cell = await dataGrid.getCellElement(0, 2); + const text = await cell.getVisibleText(); + return text === '483'; + }); + + await PageObjects.discover.clickNewSearchButton(); + + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await PageObjects.discover.loadSavedSearch(savedSearchName); + + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await retry.waitFor( + 'first cell contains the same highest value after reopening', + async () => { + const cell = await dataGrid.getCellElement(0, 2); + const text = await cell.getVisibleText(); + return text === '483'; + } + ); + + await dataGrid.clickDocSortDesc('bytes', 'Sort Low-High'); + + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await retry.waitFor('first cell contains the lowest value', async () => { + const cell = await dataGrid.getCellElement(0, 2); + const text = await cell.getVisibleText(); + return text === '0'; + }); + + expect(await testSubjects.getVisibleText('dataGridColumnSortingButton')).to.be( + 'Sort fields\n1' + ); + + await PageObjects.unifiedFieldList.clickFieldListItemAdd('extension'); + + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await dataGrid.clickDocSortDesc('extension', 'Sort A-Z'); + + await retry.waitFor('first cell contains the lowest value for extension', async () => { + const cell = await dataGrid.getCellElement(0, 3); + const text = await cell.getVisibleText(); + return text === 'css'; + }); + + expect(await testSubjects.getVisibleText('dataGridColumnSortingButton')).to.be( + 'Sort fields\n2' + ); + + await browser.refresh(); + + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSearchingHasFinished(); + + await retry.waitFor('first cell contains the same lowest value after reload', async () => { + const cell = await dataGrid.getCellElement(0, 2); + const text = await cell.getVisibleText(); + return text === '0'; + }); + + await retry.waitFor( + 'first cell contains the same lowest value for extension after reload', + async () => { + const cell = await dataGrid.getCellElement(0, 3); + const text = await cell.getVisibleText(); + return text === 'css'; + } + ); + + await PageObjects.discover.saveSearch(savedSearchName); + + await PageObjects.common.navigateToApp('dashboard'); + await PageObjects.dashboard.clickNewDashboard(); + await PageObjects.timePicker.setDefaultAbsoluteRange(); + await dashboardAddPanel.clickOpenAddPanel(); + await dashboardAddPanel.addSavedSearch(savedSearchName); + await PageObjects.header.waitUntilLoadingHasFinished(); + + await retry.waitFor( + 'first cell contains the same lowest value as dashboard panel', + async () => { + const cell = await dataGrid.getCellElement(0, 2); + const text = await cell.getVisibleText(); + return text === '0'; + } + ); + + await retry.waitFor( + 'first cell contains the lowest value for extension as dashboard panel', + async () => { + const cell = await dataGrid.getCellElement(0, 3); + const text = await cell.getVisibleText(); + return text === 'css'; + } + ); + + expect(await testSubjects.getVisibleText('dataGridColumnSortingButton')).to.be( + 'Sort fields\n2' + ); + }); + }); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/esql/index.ts b/x-pack/test_serverless/functional/test_suites/common/discover/esql/index.ts new file mode 100644 index 0000000000000..54122d2ca827d --- /dev/null +++ b/x-pack/test_serverless/functional/test_suites/common/discover/esql/index.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 { FtrProviderContext } from '../../../../ftr_provider_context'; + +export default function ({ loadTestFile }: FtrProviderContext) { + describe('discover/esql', function () { + loadTestFile(require.resolve('./_esql_view')); + }); +} diff --git a/x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group6.ts b/x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group6.ts index 9891e7b8ee488..be9fb04bb40b8 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group6.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/common_configs/config.group6.ts @@ -17,6 +17,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { require.resolve('../../common/discover/x_pack'), require.resolve('../../common/discover_ml_uptime/discover'), require.resolve('../../common/context'), + require.resolve('../../common/discover/esql'), ], junit: { reportName: 'Serverless Observability Functional Tests - Common Group 6', diff --git a/x-pack/test_serverless/functional/test_suites/search/common_configs/config.group6.ts b/x-pack/test_serverless/functional/test_suites/search/common_configs/config.group6.ts index 25b3a8802a6f0..78496e3b4aedd 100644 --- a/x-pack/test_serverless/functional/test_suites/search/common_configs/config.group6.ts +++ b/x-pack/test_serverless/functional/test_suites/search/common_configs/config.group6.ts @@ -17,6 +17,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { require.resolve('../../common/discover/x_pack'), require.resolve('../../common/discover_ml_uptime/discover'), require.resolve('../../common/context'), + require.resolve('../../common/discover/esql'), ], junit: { reportName: 'Serverless Search Functional Tests - Common Group 6', diff --git a/x-pack/test_serverless/functional/test_suites/security/common_configs/config.group6.ts b/x-pack/test_serverless/functional/test_suites/security/common_configs/config.group6.ts index 8ebd1f6958ec7..9c263cf4c198e 100644 --- a/x-pack/test_serverless/functional/test_suites/security/common_configs/config.group6.ts +++ b/x-pack/test_serverless/functional/test_suites/security/common_configs/config.group6.ts @@ -19,6 +19,7 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { // https://github.com/elastic/kibana/issues/172365 // require.resolve('../../common/discover_ml_uptime/discover'), require.resolve('../../common/context'), + require.resolve('../../common/discover/esql'), ], junit: { reportName: 'Serverless Security Functional Tests - Common Group 6', From ca18e9891d23f8e43e994a5e592aa3843f15c394 Mon Sep 17 00:00:00 2001 From: Maxim Palenov Date: Wed, 8 May 2024 13:35:37 +0200 Subject: [PATCH 21/34] [Security Solution] Adjust OpenAPI specs bundler for doc requirements (#181944) **Addresses:** https://github.com/elastic/security-team/issues/7981 **Relates to:** https://github.com/elastic/kibana/pull/171526 ## Summary This PR adjusts OpenAPI Bundler (`kbn-openapi-bundler` package) based on Docs Engineering team requirements. Main requirements include producing one valid OpenAPI spec bundle file. After adjustments OpenAPI Bundler one valid OpenAPI spec bundle file per API version e.g. `2023-10-31-my-oas.bundled.schema.yaml`. ## Details This PR further improves https://github.com/elastic/kibana/pull/171526 to satisfy Docs Engineering team requirements and includes the following adjustments and improvements - [x] Produce one valid OpenAPI spec file per API version - [x] Make `outputFilePath` independent from `rootDir` `outputFilePath` can be an absolute or relative to node.js working directory path. Additionally it can contain `{version}` placeholder to adjust where API version is placed in the result bundle file name. API prepends the result bundle file name if `{version}` is omitted. - [x] Reduce folded `allOf` items Inlined schemas lead to `allOf` folder into each other as well as having multiple object schemas which could be merged. Docs Engineering team stated potential problems related to folded `allOf` items. - [x] Prevent bundling incompatible source OpenAPI schemas like `3.0.3` and `3.1.0` - [x] Make sure to bundle path item's `summary`, `description` and `properties` - [x] Make sure to bundle all shared components (not only `schemas`) Besides the changes above PR contains minor bug fixing and improvements. **Note:** It intentionally doesn't include bundling configuration changes like integration it into PR's build pipeline and focuses only on functional changes. Bundling configuration will be addressed separately to avoid spreading reviewers focus. --- packages/kbn-openapi-bundler/README.md | 22 +- .../src/__test__/bundle_refs.test.ts | 407 +++++++++++ .../src/__test__/bundle_simple_specs.test.ts | 77 +++ .../src/__test__/bundle_specs.ts | 79 +++ ..._specs_with_multiple_modifications.test.ts | 32 + .../src/__test__/circular.test.ts | 228 +++++++ .../__test__/complex_specs/common.schema.yaml | 70 ++ .../src/__test__/complex_specs/expected.yaml | 172 +++++ .../spec1.schema.yaml} | 3 +- .../__test__/complex_specs/spec2.schema.yaml | 26 + .../__test__/complex_specs/spec3.schema.yaml | 45 ++ .../expected.yaml | 40 -- .../spec1.schema.yaml | 21 - .../spec2.schema.yaml | 21 - .../spec1.schema.yaml | 23 - .../spec2.schema.yaml | 21 - .../src/__test__/create_oas_document.ts | 31 + .../different_endpoint_versions.test.ts | 88 +++ .../different_endpoint_versions/expected.yaml | 44 -- .../version1.schema.yaml | 18 - .../version2.schema.yaml | 20 - .../__test__/different_oas_versions.test.ts | 64 ++ .../different_openapi_versions/expected.yaml | 42 -- .../spec1.schema.yaml | 18 - .../spec2.schema.yaml | 18 - .../src/__test__/inline_ref.test.ts | 227 +++++++ .../src/__test__/inline_ref/expected.yaml | 50 -- .../src/__test__/inline_ref/spec.schema.yaml | 52 -- .../modify_partial_node/expected.yaml | 26 - .../modify_partial_node/spec.schema.yaml | 26 - .../__test__/modify_partial_ref/expected.yaml | 26 - .../modify_partial_ref/spec.schema.yaml | 31 - .../modify_required_node/expected.yaml | 29 - .../modify_required_node/spec.schema.yaml | 23 - .../modify_required_ref/expected.yaml | 29 - .../modify_required_ref/spec.schema.yaml | 28 - .../src/__test__/omit_unused_schemas.test.ts | 144 ++++ .../recursive_ref_specs/common.schema.yaml | 21 - .../recursive_ref_specs/expected.yaml | 50 -- .../recursive_ref_specs/spec1.schema.yaml | 15 - .../recursive_ref_specs/spec2.schema.yaml | 15 - .../src/__test__/recursive_spec/expected.yaml | 27 - .../__test__/recursive_spec/spec.schema.yaml | 23 - .../src/__test__/reduce_all_of.test.ts | 640 ++++++++++++++++++ .../src/__test__/remove_props.test.ts | 210 ++++++ .../__test__/self_recursive_ref/expected.yaml | 24 - .../self_recursive_ref/spec.schema.yaml | 22 - .../src/__test__/skip_internal/expected.yaml | 31 - .../__test__/skip_internal/spec.schema.yaml | 57 -- .../skip_internal_endpoint/expected.yaml | 22 - .../skip_internal_endpoint/spec1.schema.yaml | 18 - .../skip_internal_endpoint/spec2.schema.yaml | 18 - .../src/__test__/skip_nodes.test.ts | 168 +++++ .../spec_with_external_ref/common.schema.yaml | 13 - .../spec_with_external_ref/expected.yaml | 25 - .../spec_with_local_ref/expected.yaml | 25 - .../spec_with_local_ref/spec.schema.yaml | 23 - .../__test__/two_simple_specs/expected.yaml | 42 -- .../two_simple_specs/spec1.schema.yaml | 18 - .../two_simple_specs/spec2.schema.yaml | 18 - .../common.schema.yaml | 13 - .../two_specs_with_external_ref/expected.yaml | 42 -- .../spec1.schema.yaml | 15 - .../spec2.schema.yaml | 15 - .../src/__test__/x_modify.test.ts | 340 ++++++++++ .../src/bundler/bundle_document.ts | 14 +- .../document_processors/bundle_refs.ts | 81 ++- .../document_processors/modify_partial.ts | 4 +- .../document_processors/modify_required.ts | 4 +- .../flatten_folded_all_of_items.ts | 61 ++ .../reduce_all_of_items/index.ts | 11 + .../merge_non_conflicting_all_of_items.ts | 149 ++++ .../unfold_single_all_of_item.ts | 51 ++ .../document_processors/remove_props.ts | 4 +- .../remove_unused_components.ts | 6 +- .../document_processors/skip_internal_path.ts | 2 +- .../skip_node_with_internal_prop.ts | 2 +- .../document_processors/utils/inline_ref.ts | 6 +- .../src/bundler/merge_documents.ts | 142 ---- .../create_blank_oas_document.ts | 46 ++ .../src/bundler/merge_documents/index.ts | 9 + .../merge_documents/merge_documents.ts | 101 +++ .../bundler/merge_documents/merge_paths.ts | 159 +++++ .../merge_shared_components.ts | 54 ++ .../src/bundler/process_document.test.ts | 24 +- .../src/bundler/process_document.ts | 33 +- .../kbn-openapi-bundler/src/bundler/types.ts | 61 +- .../src/openapi_bundler.test.ts | 162 ----- .../src/openapi_bundler.ts | 110 ++- .../src/utils/insert_by_json_pointer.ts | 19 +- .../src/utils/write_yaml_document.ts | 20 +- .../engine_settings_route.schema.yaml | 5 +- .../entity_calculation_route.schema.yaml | 19 +- .../scripts/openapi/bundle.js | 10 +- 94 files changed, 4004 insertions(+), 1636 deletions(-) create mode 100644 packages/kbn-openapi-bundler/src/__test__/bundle_refs.test.ts create mode 100644 packages/kbn-openapi-bundler/src/__test__/bundle_simple_specs.test.ts create mode 100644 packages/kbn-openapi-bundler/src/__test__/bundle_specs.ts create mode 100644 packages/kbn-openapi-bundler/src/__test__/bundle_specs_with_multiple_modifications.test.ts create mode 100644 packages/kbn-openapi-bundler/src/__test__/circular.test.ts create mode 100644 packages/kbn-openapi-bundler/src/__test__/complex_specs/common.schema.yaml create mode 100644 packages/kbn-openapi-bundler/src/__test__/complex_specs/expected.yaml rename packages/kbn-openapi-bundler/src/__test__/{spec_with_external_ref/spec.schema.yaml => complex_specs/spec1.schema.yaml} (87%) create mode 100644 packages/kbn-openapi-bundler/src/__test__/complex_specs/spec2.schema.yaml create mode 100644 packages/kbn-openapi-bundler/src/__test__/complex_specs/spec3.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/spec1.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/spec2.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/conflicting_refs_in_different_specs/spec1.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/conflicting_refs_in_different_specs/spec2.schema.yaml create mode 100644 packages/kbn-openapi-bundler/src/__test__/create_oas_document.ts create mode 100644 packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions.test.ts delete mode 100644 packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/version1.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/version2.schema.yaml create mode 100644 packages/kbn-openapi-bundler/src/__test__/different_oas_versions.test.ts delete mode 100644 packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/spec1.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/spec2.schema.yaml create mode 100644 packages/kbn-openapi-bundler/src/__test__/inline_ref.test.ts delete mode 100644 packages/kbn-openapi-bundler/src/__test__/inline_ref/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/inline_ref/spec.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/modify_partial_node/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/modify_partial_node/spec.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/modify_partial_ref/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/modify_partial_ref/spec.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/modify_required_node/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/modify_required_node/spec.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/modify_required_ref/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/modify_required_ref/spec.schema.yaml create mode 100644 packages/kbn-openapi-bundler/src/__test__/omit_unused_schemas.test.ts delete mode 100644 packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/common.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/spec1.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/spec2.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/recursive_spec/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/recursive_spec/spec.schema.yaml create mode 100644 packages/kbn-openapi-bundler/src/__test__/reduce_all_of.test.ts create mode 100644 packages/kbn-openapi-bundler/src/__test__/remove_props.test.ts delete mode 100644 packages/kbn-openapi-bundler/src/__test__/self_recursive_ref/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/self_recursive_ref/spec.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/skip_internal/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/skip_internal/spec.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/spec1.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/spec2.schema.yaml create mode 100644 packages/kbn-openapi-bundler/src/__test__/skip_nodes.test.ts delete mode 100644 packages/kbn-openapi-bundler/src/__test__/spec_with_external_ref/common.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/spec_with_external_ref/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/spec_with_local_ref/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/spec_with_local_ref/spec.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/two_simple_specs/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/two_simple_specs/spec1.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/two_simple_specs/spec2.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/common.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/expected.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/spec1.schema.yaml delete mode 100644 packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/spec2.schema.yaml create mode 100644 packages/kbn-openapi-bundler/src/__test__/x_modify.test.ts create mode 100644 packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/flatten_folded_all_of_items.ts create mode 100644 packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/index.ts create mode 100644 packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/merge_non_conflicting_all_of_items.ts create mode 100644 packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/unfold_single_all_of_item.ts delete mode 100644 packages/kbn-openapi-bundler/src/bundler/merge_documents.ts create mode 100644 packages/kbn-openapi-bundler/src/bundler/merge_documents/create_blank_oas_document.ts create mode 100644 packages/kbn-openapi-bundler/src/bundler/merge_documents/index.ts create mode 100644 packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_documents.ts create mode 100644 packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_paths.ts create mode 100644 packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_shared_components.ts delete mode 100644 packages/kbn-openapi-bundler/src/openapi_bundler.test.ts diff --git a/packages/kbn-openapi-bundler/README.md b/packages/kbn-openapi-bundler/README.md index 4a82cb9c20339..0a096b3f28152 100644 --- a/packages/kbn-openapi-bundler/README.md +++ b/packages/kbn-openapi-bundler/README.md @@ -1,15 +1,15 @@ # OpenAPI Specs Bundler for Kibana -`@kbn/openapi-bundler` is a tool for transforming multiple OpenAPI specification files (source specs) into a single bundled specification file (target spec). -This can be used for API docs generation purposes. This approach allows you to: +`@kbn/openapi-bundler` is a tool for transforming multiple OpenAPI specification files (source specs) into a bundled specification file(s) (target spec). The number of resulting bundles depends on a number of versions +used in the OpenAPI specification files. The package can be used for API documentation generation purposes. This approach allows you to: -- Abstract away the knowledge of where you keep your OpenAPI specs, how many specs there are, and how to find them. The Docs team should only know where a single file is located - the bundle. +- Abstract away the knowledge of where you keep your OpenAPI specs, how many specs are there, and how to find them. Consumer should only know where result files are located - the bundles. - Omit internal API endpoints from the bundle. - Omit API endpoints that are hidden behind a feature flag and haven't been released yet. - Omit parts of schemas that are hidden behind a feature flag (e.g. a new property added to an existing response schema). - Omit custom OpenAPI attributes from the bundle, such as `x-codegen-enabled`, `x-internal`, and `x-modify` (see below). - Transform the target schema according to the custom OpenAPI attributes, such as `x-modify`. -- Resolve references and inline some of them for better readability. The bundled file contains only local references and paths. +- Resolve references, inline some of them and merge allOf object schemas for better readability. The bundled file contains only local references and paths. ## Getting started @@ -22,16 +22,22 @@ Currently package supports only programmatic API. As the next step you need to c ```ts require('../../../../../src/setup_node_env'); const { bundle } = require('@kbn/openapi-bundler'); -const { resolve } = require('path'); +const { join, resolve } = require('path'); // define ROOT as `my-plugin` instead of `my-plugin/scripts/openapi` // pay attention to this constant when your script's location is different const ROOT = resolve(__dirname, '../..'); bundle({ - rootDir: ROOT, // Root path e.g. plugin root directory - sourceGlob: './**/*.schema.yaml', // Glob pattern to find OpenAPI specification files - outputFilePath: './target/openapi/my-plugin.bundled.schema.yaml', // + // Root path e.g. plugin root directory + rootDir: ROOT, + // Glob pattern to find OpenAPI specification files, relative to `rootDir` + sourceGlob: './**/*.schema.yaml', + // Output file path. Absolute or related to the node.js working directory. + // It may contain `{version}` placeholder which is optional. `{version}` placeholder + // will be replaced with the bundled specs version or filename will be prepended with + // version when placeholder is omitted, e.g. `2023-10-31-my-plugin.bundled.schema.yaml`. + outputFilePath: join(ROOT, 'target/openapi/my-plugin-{version}.bundled.schema.yaml'), }); ``` diff --git a/packages/kbn-openapi-bundler/src/__test__/bundle_refs.test.ts b/packages/kbn-openapi-bundler/src/__test__/bundle_refs.test.ts new file mode 100644 index 0000000000000..3d5472d4d8308 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/bundle_refs.test.ts @@ -0,0 +1,407 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { OpenAPIV3 } from 'openapi-types'; +import { bundleSpecs } from './bundle_specs'; +import { createOASDocument } from './create_oas_document'; + +describe('OpenAPI Bundler - bundle references', () => { + it('bundles files with external references', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: './common.schema.yaml#/components/schemas/TestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/some_api': { + post: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: './common.schema.yaml#/components/schemas/TestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + }); + const commonSpec = createOASDocument({ + info: { + version: 'not set', + }, + components: { + schemas: { + TestSchema: { + type: 'string', + enum: ['value1', 'value2'], + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec1, + 2: spec2, + common: commonSpec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get!.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/TestSchema', + }, + }, + }, + }); + expect(bundledSpec.paths['/api/some_api']!.post!.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/TestSchema', + }, + }, + }, + }); + expect(bundledSpec.components!.schemas).toMatchObject({ + TestSchema: commonSpec.components!.schemas!.TestSchema, + }); + }); + + it('bundles one file with a local reference', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/TestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + TestSchema: { + type: 'string', + enum: ['value1', 'value2'], + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']).toEqual({ + get: expect.objectContaining({ + responses: expect.objectContaining({ + '200': expect.objectContaining({ + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/TestSchema', + }, + }, + }, + }), + }), + }), + }); + expect(bundledSpec.components!.schemas!.TestSchema).toEqual( + spec.components!.schemas!.TestSchema + ); + }); + + it('bundles one file with an external reference', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: './common.schema.yaml#/components/schemas/TestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + }); + const commonSpec = createOASDocument({ + info: { + version: 'not set', + }, + components: { + schemas: { + TestSchema: { + type: 'string', + enum: ['value1', 'value2'], + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + common: commonSpec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']).toEqual({ + get: expect.objectContaining({ + responses: expect.objectContaining({ + '200': expect.objectContaining({ + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/TestSchema', + }, + }, + }, + }), + }), + }), + }); + expect(bundledSpec.components!.schemas!.TestSchema).toMatchObject( + commonSpec.components!.schemas!.TestSchema + ); + }); + + it('bundles conflicting but equal references', async () => { + const ConflictTestSchema: OpenAPIV3.SchemaObject = { + type: 'integer', + minimum: 1, + }; + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/ConflictTestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { ConflictTestSchema }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/some_api': { + put: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/ConflictTestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { ConflictTestSchema }, + }, + }); + + const { '2023-10-31.yaml': bundledSpec } = await bundleSpecs({ '1': spec1, '2': spec2 }); + + expect(bundledSpec.paths['/api/some_api']).toEqual({ + get: spec1.paths['/api/some_api']!.get, + put: spec2.paths['/api/some_api']!.put, + }); + expect(bundledSpec.components).toMatchObject({ schemas: { ConflictTestSchema } }); + }); + + it('DOES NOT bundle external conflicting references encountered in on spec file', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + fieldA: { + $ref: './common_a.schema.yaml#/components/schemas/ConflictTestSchema', + }, + fieldB: { + $ref: './common_b.schema.yaml#/components/schemas/ConflictTestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + const commonSpecA = createOASDocument({ + components: { + schemas: { + ConflictTestSchema: { + type: 'string', + enum: ['value1', 'value2'], + }, + }, + }, + }); + const commonSpecB = createOASDocument({ + components: { + schemas: { + ConflictTestSchema: { + type: 'object', + properties: { + someField: { + type: 'string', + }, + }, + }, + }, + }, + }); + + await expect( + bundleSpecs({ + 1: spec, + common_a: commonSpecA, + common_b: commonSpecB, + }) + ).rejects.toThrowError(/\/components\/schemas\/ConflictTestSchema/); + }); + + it('DOES NOT bundle conflicting references encountered in separate specs', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/ConflictTestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + ConflictTestSchema: { + type: 'string', + enum: ['value1', 'value2'], + }, + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/some_api': { + put: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/ConflictTestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + ConflictTestSchema: { + type: 'integer', + minimum: 1, + }, + }, + }, + }); + + await expect( + bundleSpecs({ + 1: spec1, + 2: spec2, + }) + ).rejects.toThrowError(/\/components\/schemas\/ConflictTestSchema/); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/__test__/bundle_simple_specs.test.ts b/packages/kbn-openapi-bundler/src/__test__/bundle_simple_specs.test.ts new file mode 100644 index 0000000000000..15ef0e8215908 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/bundle_simple_specs.test.ts @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { bundleSpecs } from './bundle_specs'; +import { createOASDocument } from './create_oas_document'; + +describe('OpenAPI Bundler - simple specs', () => { + it('bundles two simple specs', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + fieldA: { + type: 'integer', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/some_api': { + post: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + fieldB: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + expect(bundledSpec.paths['/api/some_api']).toEqual({ + get: spec1.paths['/api/some_api']?.get, + post: spec2.paths['/api/some_api']?.post, + }); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/__test__/bundle_specs.ts b/packages/kbn-openapi-bundler/src/__test__/bundle_specs.ts new file mode 100644 index 0000000000000..599f81c0e4c85 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/bundle_specs.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { join } from 'path'; +import { + existsSync, + mkdirSync, + readdirSync, + readFileSync, + rmdirSync, + unlinkSync, + writeFileSync, +} from 'fs'; +import { dump, load } from 'js-yaml'; +import { OpenAPIV3 } from 'openapi-types'; +import { bundle } from '../openapi_bundler'; + +const ROOT_PATH = join(__dirname, '..', '..'); + +export async function bundleSpecs( + oasSpecs: Record +): Promise> { + const randomStr = (Math.random() + 1).toString(36).substring(7); + const folderToBundlePath = join(ROOT_PATH, 'target', 'oas-test', randomStr); + const resultFolderPath = join(ROOT_PATH, 'target', 'oas-test-bundled-result', randomStr); + const bundledFilePathTemplate = join(resultFolderPath, '{version}.yaml'); + + dumpSpecs(folderToBundlePath, oasSpecs); + + await bundleFolder(folderToBundlePath, bundledFilePathTemplate); + + return readBundledSpecs(resultFolderPath); +} + +function removeFolder(folderPath: string): void { + if (existsSync(folderPath)) { + for (const fileName of readdirSync(folderPath)) { + unlinkSync(join(folderPath, fileName)); + } + + rmdirSync(folderPath); + } +} + +function dumpSpecs(folderPath: string, oasSpecs: Record): void { + removeFolder(folderPath); + mkdirSync(folderPath, { recursive: true }); + + for (const [fileName, oasSpec] of Object.entries(oasSpecs)) { + writeFileSync(join(folderPath, `${fileName}.schema.yaml`), dump(oasSpec)); + } +} + +export function readBundledSpecs(folderPath: string): Record { + const bundledSpecs: Record = {}; + + for (const fileName of readdirSync(folderPath)) { + const yaml = readFileSync(join(folderPath, fileName), { encoding: 'utf8' }); + + bundledSpecs[fileName] = load(yaml); + } + + return bundledSpecs; +} + +export async function bundleFolder( + folderToBundlePath: string, + bundledFilePathTemplate: string +): Promise { + await bundle({ + sourceGlob: join(folderToBundlePath, '*.schema.yaml'), + outputFilePath: bundledFilePathTemplate, + }); +} diff --git a/packages/kbn-openapi-bundler/src/__test__/bundle_specs_with_multiple_modifications.test.ts b/packages/kbn-openapi-bundler/src/__test__/bundle_specs_with_multiple_modifications.test.ts new file mode 100644 index 0000000000000..ed57d745f2ee4 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/bundle_specs_with_multiple_modifications.test.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { readFileSync } from 'fs'; +import { load } from 'js-yaml'; +import { join } from 'path'; +import { bundleFolder, readBundledSpecs } from './bundle_specs'; + +const ROOT_PATH = join(__dirname, '..', '..'); + +describe('OpenAPI Bundler - specs with multiple modifications', () => { + it('bundles specs performing multiple modifications without interference', async () => { + const folderToBundlePath = join(__dirname, 'complex_specs'); + const outputFolderPath = join(ROOT_PATH, 'target', 'complex_specs_test'); + const bundledFilePathTemplate = join(outputFolderPath, 'oas-test-bundle-{version}.yaml'); + + await bundleFolder(folderToBundlePath, bundledFilePathTemplate); + + const [bundledSpec] = Object.values(readBundledSpecs(outputFolderPath)); + + const expected = load( + readFileSync(join(folderToBundlePath, 'expected.yaml'), { encoding: 'utf8' }) + ); + + expect(bundledSpec).toEqual(expected); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/__test__/circular.test.ts b/packages/kbn-openapi-bundler/src/__test__/circular.test.ts new file mode 100644 index 0000000000000..8d72f28c3779f --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/circular.test.ts @@ -0,0 +1,228 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { dump } from 'js-yaml'; +import { OpenAPIV3 } from 'openapi-types'; +import { bundleSpecs } from './bundle_specs'; +import { createOASDocument } from './create_oas_document'; + +describe('OpenAPI Bundler - circular specs', () => { + it('bundles recursive spec', async () => { + const recursiveSchema: OpenAPIV3.SchemaObject = { + type: 'object', + properties: { + fieldA: { + type: 'integer', + }, + }, + }; + recursiveSchema.properties!.fieldB = recursiveSchema; + + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: recursiveSchema, + }, + }, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(dump(bundledSpec.paths['/api/some_api']!.get!.responses['200'])).toMatchInlineSnapshot(` +"description: Successful response +content: + application/json: + schema: &ref_0 + type: object + properties: + fieldA: + type: integer + fieldB: *ref_0 +" +`); + }); + + it('bundles specs with recursive references', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: './common.schema.yaml#/components/schemas/CircularTestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/some_api': { + post: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: './common.schema.yaml#/components/schemas/CircularTestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + }); + const commonSpec = createOASDocument({ + info: { + version: 'not set', + }, + components: { + schemas: { + CircularTestSchema: { + type: 'object', + properties: { + field: { + $ref: '#/components/schemas/AnotherCircularTestSchema', + }, + }, + }, + AnotherCircularTestSchema: { + anyOf: [ + { $ref: '#/components/schemas/CircularTestSchema' }, + { type: 'string', enum: ['value1', 'value2'] }, + ], + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec1, + 2: spec2, + common: commonSpec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']).toEqual({ + get: expect.objectContaining({ + responses: expect.objectContaining({ + '200': expect.objectContaining({ + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/CircularTestSchema', + }, + }, + }, + }), + }), + }), + post: expect.objectContaining({ + responses: expect.objectContaining({ + '200': expect.objectContaining({ + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/CircularTestSchema', + }, + }, + }, + }), + }), + }), + }); + expect(bundledSpec.components).toMatchObject({ schemas: commonSpec.components!.schemas }); + }); + + it('bundles spec with a self-recursive reference', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/CircularTestSchema', + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + CircularTestSchema: { + type: 'object', + properties: { + field: { + $ref: '#/components/schemas/CircularTestSchema', + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']).toEqual({ + get: expect.objectContaining({ + responses: expect.objectContaining({ + '200': expect.objectContaining({ + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/CircularTestSchema', + }, + }, + }, + }), + }), + }), + }); + expect(bundledSpec.components!.schemas!.CircularTestSchema).toEqual( + spec.components!.schemas!.CircularTestSchema + ); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/__test__/complex_specs/common.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/complex_specs/common.schema.yaml new file mode 100644 index 0000000000000..aaa7af54a2fd1 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/complex_specs/common.schema.yaml @@ -0,0 +1,70 @@ +openapi: 3.0.3 +info: + title: Test endpoint + version: 'no applicable' +paths: {} + +components: + schemas: + FieldSchemaA: + type: object + properties: + fieldX: + type: string + fieldY: + type: integer + + SchemaA: + type: object + properties: + schemaAField1: + type: string + enum: + - value1 + - value2 + schemaAField2: + type: integer + required: + - schemaAField1 + - schemaAField2 + + SchemaB: + allOf: + - $ref: '#/components/schemas/SharedSchema' + - $ref: '#/components/schemas/SchemaA' + - type: object + properties: + schemaBField: + type: boolean + + SharedSchema: + x-inline: true + type: object + properties: + fieldA: + type: string + fieldRef: + $ref: '#/components/schemas/FieldSchemaA' + x-modify: required + fieldB: + type: boolean + + SharedSchemaWithAllOf: + x-inline: true + allOf: + - type: object + properties: + sharedSchemaFieldX: + type: string + sharedSchemaFieldY: + type: string + commonField: + type: string + required: + - commonField + - type: object + properties: + sharedSchemaField1: + type: string + sharedSchemaField2: + type: string diff --git a/packages/kbn-openapi-bundler/src/__test__/complex_specs/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/complex_specs/expected.yaml new file mode 100644 index 0000000000000..9a7660f14070e --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/complex_specs/expected.yaml @@ -0,0 +1,172 @@ +openapi: 3.0.3 +info: + title: Bundled OpenAPI specs + version: '2023-10-31' +servers: + - url: 'http://{kibana_host}:{port}' + variables: + kibana_host: + default: localhost + port: + default: '5601' +security: + - BasicAuth: [] + +paths: + /api/some_api: + get: + operationId: TestEndpointGet + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + fieldA: + type: string + fieldRef: + type: object + properties: + fieldX: + type: string + fieldY: + type: integer + required: + - fieldX + - fieldY + fieldB: + type: boolean + post: + operationId: TestEndpointPost + responses: + '200': + description: Successful response + content: + application/json: + schema: + anyOf: + - type: object + properties: + localField1: + type: string + localField2: + type: string + required: + - localField1 + - type: object + properties: + schemaAField1: + type: string + enum: + - value1 + - value2 + schemaAField2: + type: integer + - type: object + properties: + fieldA: + type: string + fieldRef: + type: object + properties: + fieldX: + type: string + fieldY: + type: integer + required: + - fieldX + - fieldY + fieldB: + type: boolean + put: + operationId: TestEndpointPut + responses: + '200': + description: Successful response + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/SchemaWithOptionalFields' + - $ref: '#/components/schemas/SchemaB' + +components: + securitySchemes: + BasicAuth: + type: http + scheme: basic + schemas: + SchemaWithOptionalFields: + type: object + properties: + fieldA: + type: boolean + fieldB: + type: object + properties: + fieldA: + type: string + fieldRef: + type: object + properties: + fieldX: + type: string + fieldY: + type: integer + required: + - fieldX + - fieldY + fieldB: + type: boolean + sharedSchemaFieldX: + type: string + sharedSchemaFieldY: + type: string + commonField: + type: string + sharedSchemaField1: + type: string + sharedSchemaField2: + type: string + localSchemaFieldA: + type: number + localSchemaFieldB: + type: string + required: + - commonField + SchemaA: + type: object + properties: + schemaAField1: + type: string + enum: + - value1 + - value2 + schemaAField2: + type: integer + required: + - schemaAField1 + - schemaAField2 + SchemaB: + allOf: + - type: object + properties: + fieldA: + type: string + fieldRef: + type: object + properties: + fieldX: + type: string + fieldY: + type: integer + required: + - fieldX + - fieldY + fieldB: + type: boolean + schemaBField: + type: boolean + - $ref: '#/components/schemas/SchemaA' diff --git a/packages/kbn-openapi-bundler/src/__test__/spec_with_external_ref/spec.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/complex_specs/spec1.schema.yaml similarity index 87% rename from packages/kbn-openapi-bundler/src/__test__/spec_with_external_ref/spec.schema.yaml rename to packages/kbn-openapi-bundler/src/__test__/complex_specs/spec1.schema.yaml index b1d910fa5e963..0d6656fde5b68 100644 --- a/packages/kbn-openapi-bundler/src/__test__/spec_with_external_ref/spec.schema.yaml +++ b/packages/kbn-openapi-bundler/src/__test__/complex_specs/spec1.schema.yaml @@ -12,4 +12,5 @@ paths: content: application/json: schema: - $ref: './common.schema.yaml#/components/schemas/TestSchema' + $ref: './common.schema.yaml#/components/schemas/SharedSchema' + x-modify: partial diff --git a/packages/kbn-openapi-bundler/src/__test__/complex_specs/spec2.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/complex_specs/spec2.schema.yaml new file mode 100644 index 0000000000000..a79a78f94950d --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/complex_specs/spec2.schema.yaml @@ -0,0 +1,26 @@ +openapi: 3.0.3 +info: + title: Test endpoint + version: '2023-10-31' +paths: + /api/some_api: + post: + operationId: TestEndpointPost + responses: + '200': + description: Successful response + content: + application/json: + schema: + anyOf: + - type: object + properties: + localField1: + type: string + localField2: + type: string + required: + - localField1 + - $ref: './common.schema.yaml#/components/schemas/SchemaA' + x-modify: partial + - $ref: './common.schema.yaml#/components/schemas/SharedSchema' diff --git a/packages/kbn-openapi-bundler/src/__test__/complex_specs/spec3.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/complex_specs/spec3.schema.yaml new file mode 100644 index 0000000000000..d249210fff2d2 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/complex_specs/spec3.schema.yaml @@ -0,0 +1,45 @@ +openapi: 3.0.3 +info: + title: Test endpoint + version: '2023-10-31' +paths: + /api/some_api: + put: + x-codegen-enabled: true + operationId: TestEndpointPut + responses: + '200': + description: Successful response + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/SchemaWithOptionalFields' + - $ref: './common.schema.yaml#/components/schemas/SchemaB' + +components: + schemas: + SchemaWithOptionalFields: + allOf: + - type: object + properties: + fieldA: + type: boolean + fieldB: + $ref: './common.schema.yaml#/components/schemas/SharedSchema' + - $ref: './common.schema.yaml#/components/schemas/SharedSchemaWithAllOf' + - $ref: '#/components/schemas/LocalSchemaWithAllOf' + x-inline: true + + LocalSchemaWithAllOf: + allOf: + - type: object + properties: + localSchemaFieldA: + type: number + localSchemaFieldB: + type: string + commonField: + type: string + required: + - commonField diff --git a/packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/expected.yaml deleted file mode 100644 index d8eb6a8b66c68..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/expected.yaml +++ /dev/null @@ -1,40 +0,0 @@ -spec1.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './shared_components.schema.yaml#/components/schemas/ConflictTestSchema' - -spec2.schema.yaml: - openapi: 3.0.3 - info: - title: Another test endpoint - version: '2023-10-31' - paths: - /api/another_api: - put: - operationId: AnotherTestEndpointPut - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './shared_components.schema.yaml#/components/schemas/ConflictTestSchema' - -shared_components.schema.yaml: - components: - schemas: - ConflictTestSchema: - type: integer - minimum: 1 diff --git a/packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/spec1.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/spec1.schema.yaml deleted file mode 100644 index a44cd371ba326..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/spec1.schema.yaml +++ /dev/null @@ -1,21 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/ConflictTestSchema' - -components: - schemas: - ConflictTestSchema: - type: integer - minimum: 1 diff --git a/packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/spec2.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/spec2.schema.yaml deleted file mode 100644 index 4a5670f8ae5f5..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/conflicting_but_equal_refs_in_different_specs/spec2.schema.yaml +++ /dev/null @@ -1,21 +0,0 @@ -openapi: 3.0.3 -info: - title: Another test endpoint - version: '2023-10-31' -paths: - /api/another_api: - put: - operationId: AnotherTestEndpointPut - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/ConflictTestSchema' - -components: - schemas: - ConflictTestSchema: - type: integer - minimum: 1 diff --git a/packages/kbn-openapi-bundler/src/__test__/conflicting_refs_in_different_specs/spec1.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/conflicting_refs_in_different_specs/spec1.schema.yaml deleted file mode 100644 index 765811b78a619..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/conflicting_refs_in_different_specs/spec1.schema.yaml +++ /dev/null @@ -1,23 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/ConflictTestSchema' - -components: - schemas: - ConflictTestSchema: - type: string - enum: - - value1 - - value2 diff --git a/packages/kbn-openapi-bundler/src/__test__/conflicting_refs_in_different_specs/spec2.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/conflicting_refs_in_different_specs/spec2.schema.yaml deleted file mode 100644 index 4a5670f8ae5f5..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/conflicting_refs_in_different_specs/spec2.schema.yaml +++ /dev/null @@ -1,21 +0,0 @@ -openapi: 3.0.3 -info: - title: Another test endpoint - version: '2023-10-31' -paths: - /api/another_api: - put: - operationId: AnotherTestEndpointPut - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/ConflictTestSchema' - -components: - schemas: - ConflictTestSchema: - type: integer - minimum: 1 diff --git a/packages/kbn-openapi-bundler/src/__test__/create_oas_document.ts b/packages/kbn-openapi-bundler/src/__test__/create_oas_document.ts new file mode 100644 index 0000000000000..c91e535e0cf12 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/create_oas_document.ts @@ -0,0 +1,31 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { OpenAPIV3 } from 'openapi-types'; + +export function createOASDocument(overrides: { + openapi?: string; + info?: Partial; + paths?: OpenAPIV3.PathsObject; + components?: OpenAPIV3.ComponentsObject; +}): OpenAPIV3.Document { + return { + openapi: overrides.openapi ?? '3.0.3', + info: { + title: 'Test endpoint', + version: '2023-10-31', + ...overrides.info, + }, + paths: { + ...overrides.paths, + }, + components: { + ...overrides.components, + }, + }; +} diff --git a/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions.test.ts b/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions.test.ts new file mode 100644 index 0000000000000..5def26293084b --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions.test.ts @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { bundleSpecs } from './bundle_specs'; +import { createOASDocument } from './create_oas_document'; + +describe('OpenAPI Bundler - different API versions', () => { + it('bundles one endpoint with different versions', async () => { + const spec1 = createOASDocument({ + info: { + version: '2023-10-31', + }, + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + field1: { + type: 'integer', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + const spec2 = createOASDocument({ + info: { + version: '2023-11-11', + }, + paths: { + '/api/some_api': { + put: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + field1: { + type: 'integer', + }, + field2: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + + const bundledSpecs = await bundleSpecs({ + 1: spec1, + 2: spec2, + }); + + expect(bundledSpecs).toEqual({ + '2023-10-31.yaml': expect.objectContaining({ + paths: spec1.paths, + }), + '2023-11-11.yaml': expect.objectContaining({ + paths: spec2.paths, + }), + }); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/expected.yaml deleted file mode 100644 index 0b916b7b17ac2..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/expected.yaml +++ /dev/null @@ -1,44 +0,0 @@ -version1.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: integer - -version2.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-11-11' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: integer - field2: - type: string - -shared_components.schema.yaml: - components: {} diff --git a/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/version1.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/version1.schema.yaml deleted file mode 100644 index 5b7f6a8718fcf..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/version1.schema.yaml +++ /dev/null @@ -1,18 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: integer diff --git a/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/version2.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/version2.schema.yaml deleted file mode 100644 index 4492f449ba2fe..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/different_endpoint_versions/version2.schema.yaml +++ /dev/null @@ -1,20 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-11-11' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: integer - field2: - type: string diff --git a/packages/kbn-openapi-bundler/src/__test__/different_oas_versions.test.ts b/packages/kbn-openapi-bundler/src/__test__/different_oas_versions.test.ts new file mode 100644 index 0000000000000..949f4f882ff4e --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/different_oas_versions.test.ts @@ -0,0 +1,64 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { bundleSpecs } from './bundle_specs'; +import { createOASDocument } from './create_oas_document'; + +describe('OpenAPI Bundler - different OAS versions', () => { + it('DOES NOT bundle specs with different OpenAPI versions', async () => { + const spec1 = createOASDocument({ + openapi: '3.0.3', + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + }); + const spec2 = createOASDocument({ + openapi: '3.1.0', + paths: { + '/api/some_api': { + put: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'boolean', + }, + }, + }, + }, + }, + }, + }, + }, + }); + + await expect( + bundleSpecs({ + 1: spec1, + 2: spec2, + }) + ).rejects.toThrowError(new RegExp('^OpenAPI specs must use the same OpenAPI version')); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/expected.yaml deleted file mode 100644 index 3aa6c7051ebcf..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/expected.yaml +++ /dev/null @@ -1,42 +0,0 @@ -spec1.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: integer - -spec2.schema.yaml: - openapi: 3.1.0 - info: - title: Test endpoint POST - version: '2023-10-31' - paths: - /api/some_api: - post: - operationId: TestEndpointPost - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field2: - type: string - -shared_components.schema.yaml: - components: {} diff --git a/packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/spec1.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/spec1.schema.yaml deleted file mode 100644 index 5b7f6a8718fcf..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/spec1.schema.yaml +++ /dev/null @@ -1,18 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: integer diff --git a/packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/spec2.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/spec2.schema.yaml deleted file mode 100644 index e437e40e6698e..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/different_openapi_versions/spec2.schema.yaml +++ /dev/null @@ -1,18 +0,0 @@ -openapi: 3.1.0 -info: - title: Test endpoint POST - version: '2023-10-31' -paths: - /api/some_api: - post: - operationId: TestEndpointPost - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field2: - type: string diff --git a/packages/kbn-openapi-bundler/src/__test__/inline_ref.test.ts b/packages/kbn-openapi-bundler/src/__test__/inline_ref.test.ts new file mode 100644 index 0000000000000..913afd934de09 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/inline_ref.test.ts @@ -0,0 +1,227 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { bundleSpecs } from './bundle_specs'; +import { createOASDocument } from './create_oas_document'; + +describe('OpenAPI Bundler - inline references', () => { + it('inlines local references', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + anyOf: [ + { $ref: '#/components/schemas/SchemaToInline' }, + { $ref: '#/components/schemas/SchemaNotToInline1' }, + { $ref: '#/components/schemas/SchemaNotToInline2' }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + SchemaToInline: { + // @ts-expect-error OpenAPIV3.Document doesn't allow to add custom props to components.schemas + 'x-inline': true, + type: 'object', + properties: { + field1: { + type: 'string', + enum: ['value1'], + }, + field2: { + type: 'integer', + minimum: 1, + }, + }, + }, + SchemaNotToInline1: { + // @ts-expect-error OpenAPIV3.Document doesn't allow to add custom props to components.schemas + 'x-inline': false, + type: 'object', + properties: { + field1: { + type: 'string', + enum: ['value1'], + }, + field2: { + type: 'integer', + minimum: 1, + }, + }, + }, + SchemaNotToInline2: { + type: 'object', + properties: { + field1: { + type: 'string', + enum: ['value1'], + }, + field2: { + type: 'integer', + minimum: 1, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get!.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { + anyOf: expect.arrayContaining([ + { + type: 'object', + properties: { + field1: { + type: 'string', + enum: ['value1'], + }, + field2: { + type: 'integer', + minimum: 1, + }, + }, + }, + ]), + }, + }, + }, + }); + expect(Object.keys(bundledSpec.components!.schemas!)).toEqual([ + 'SchemaNotToInline1', + 'SchemaNotToInline2', + ]); + }); + + it('inlines external references', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + anyOf: [ + { $ref: './common.schema.yaml#/components/schemas/SchemaToInline' }, + { $ref: './common.schema.yaml#/components/schemas/SchemaNotToInline1' }, + { $ref: './common.schema.yaml#/components/schemas/SchemaNotToInline2' }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + }); + const commonSpec = createOASDocument({ + components: { + schemas: { + SchemaToInline: { + // @ts-expect-error OpenAPIV3.Document doesn't allow to add custom props to components.schemas + 'x-inline': true, + type: 'object', + properties: { + field1: { + type: 'string', + enum: ['value1'], + }, + field2: { + type: 'integer', + minimum: 1, + }, + }, + }, + SchemaNotToInline1: { + // @ts-expect-error OpenAPIV3.Document doesn't allow to add custom props to components.schemas + 'x-inline': false, + type: 'object', + properties: { + field1: { + type: 'string', + enum: ['value1'], + }, + field2: { + type: 'integer', + minimum: 1, + }, + }, + }, + SchemaNotToInline2: { + type: 'object', + properties: { + field1: { + type: 'string', + enum: ['value1'], + }, + field2: { + type: 'integer', + minimum: 1, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + common: commonSpec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get!.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { + anyOf: expect.arrayContaining([ + { + type: 'object', + properties: { + field1: { + type: 'string', + enum: ['value1'], + }, + field2: { + type: 'integer', + minimum: 1, + }, + }, + }, + ]), + }, + }, + }, + }); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/__test__/inline_ref/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/inline_ref/expected.yaml deleted file mode 100644 index 270886caa051e..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/inline_ref/expected.yaml +++ /dev/null @@ -1,50 +0,0 @@ -spec.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - anyOf: - - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - - $ref: './shared_components.schema.yaml#/components/schemas/TestSchema2' - - $ref: './shared_components.schema.yaml#/components/schemas/TestSchema3' - -shared_components.schema.yaml: - components: - schemas: - TestSchema2: - x-inline: false - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - - TestSchema3: - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 diff --git a/packages/kbn-openapi-bundler/src/__test__/inline_ref/spec.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/inline_ref/spec.schema.yaml deleted file mode 100644 index f5cdb2694a5c8..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/inline_ref/spec.schema.yaml +++ /dev/null @@ -1,52 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - anyOf: - - $ref: '#/components/schemas/TestSchema1' - - $ref: '#/components/schemas/TestSchema2' - - $ref: '#/components/schemas/TestSchema3' - -components: - schemas: - TestSchema1: - x-inline: true - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - - TestSchema2: - x-inline: false - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - - TestSchema3: - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 diff --git a/packages/kbn-openapi-bundler/src/__test__/modify_partial_node/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/modify_partial_node/expected.yaml deleted file mode 100644 index fa679d0c3f8c0..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/modify_partial_node/expected.yaml +++ /dev/null @@ -1,26 +0,0 @@ -spec.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - -shared_components.schema.yaml: - components: {} diff --git a/packages/kbn-openapi-bundler/src/__test__/modify_partial_node/spec.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/modify_partial_node/spec.schema.yaml deleted file mode 100644 index 9646051aab907..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/modify_partial_node/spec.schema.yaml +++ /dev/null @@ -1,26 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - x-modify: partial - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - required: - - field1 - - field2 diff --git a/packages/kbn-openapi-bundler/src/__test__/modify_partial_ref/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/modify_partial_ref/expected.yaml deleted file mode 100644 index fa679d0c3f8c0..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/modify_partial_ref/expected.yaml +++ /dev/null @@ -1,26 +0,0 @@ -spec.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - -shared_components.schema.yaml: - components: {} diff --git a/packages/kbn-openapi-bundler/src/__test__/modify_partial_ref/spec.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/modify_partial_ref/spec.schema.yaml deleted file mode 100644 index 547bb4cd913be..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/modify_partial_ref/spec.schema.yaml +++ /dev/null @@ -1,31 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/TestSchema' - x-modify: partial - -components: - schemas: - TestSchema: - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - required: - - field1 - - field2 diff --git a/packages/kbn-openapi-bundler/src/__test__/modify_required_node/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/modify_required_node/expected.yaml deleted file mode 100644 index 3b075e3cf803b..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/modify_required_node/expected.yaml +++ /dev/null @@ -1,29 +0,0 @@ -spec.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - required: - - field1 - - field2 - -shared_components.schema.yaml: - components: {} diff --git a/packages/kbn-openapi-bundler/src/__test__/modify_required_node/spec.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/modify_required_node/spec.schema.yaml deleted file mode 100644 index 68d478ea8caaa..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/modify_required_node/spec.schema.yaml +++ /dev/null @@ -1,23 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - x-modify: required - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 diff --git a/packages/kbn-openapi-bundler/src/__test__/modify_required_ref/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/modify_required_ref/expected.yaml deleted file mode 100644 index 3b075e3cf803b..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/modify_required_ref/expected.yaml +++ /dev/null @@ -1,29 +0,0 @@ -spec.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - required: - - field1 - - field2 - -shared_components.schema.yaml: - components: {} diff --git a/packages/kbn-openapi-bundler/src/__test__/modify_required_ref/spec.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/modify_required_ref/spec.schema.yaml deleted file mode 100644 index 0f02e3e905e23..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/modify_required_ref/spec.schema.yaml +++ /dev/null @@ -1,28 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/TestSchema' - x-modify: required - -components: - schemas: - TestSchema: - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 diff --git a/packages/kbn-openapi-bundler/src/__test__/omit_unused_schemas.test.ts b/packages/kbn-openapi-bundler/src/__test__/omit_unused_schemas.test.ts new file mode 100644 index 0000000000000..b714ba5ddf834 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/omit_unused_schemas.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { bundleSpecs } from './bundle_specs'; +import { createOASDocument } from './create_oas_document'; + +describe('OpenAPI Bundler - omit unused schemas', () => { + it('omits unused local schema', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + TestSchema: { + type: 'string', + enum: ['value1', 'value2'], + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.components).not.toMatchObject({ schemas: expect.anything() }); + }); + + it('omits unused external schema', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: './common.schema.yaml#/components/schemas/SchemaA', + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + TestSchema: { + type: 'string', + enum: ['value1', 'value2'], + }, + }, + }, + }); + const commonSpec = createOASDocument({ + components: { + schemas: { + SchemaA: { + type: 'number', + }, + SchemaB: { + type: 'string', + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + common: commonSpec, + }) + ); + + expect(bundledSpec.components!.schemas).toEqual({ SchemaA: expect.anything() }); + }); + + it('omits inlined schemas', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { $ref: './common.schema.yaml#/components/schemas/SchemaToInline' }, + }, + }, + }, + }, + }, + }, + }, + }); + const commonSpec = createOASDocument({ + components: { + schemas: { + SchemaToInline: { + // @ts-expect-error custom prop + 'x-inline': true, + type: 'string', + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + common: commonSpec, + }) + ); + + expect(bundledSpec.components).not.toMatchObject({ schemas: expect.anything() }); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/common.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/common.schema.yaml deleted file mode 100644 index 6e0ec47b773c5..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/common.schema.yaml +++ /dev/null @@ -1,21 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint - version: '2023-10-31' -paths: {} - -components: - schemas: - CircularTestSchema: - type: string - data: - items: - $ref: '#/components/schemas/AnotherCircularTestSchema' - - AnotherCircularTestSchema: - anyof: - - $ref: '#/components/schemas/CircularTestSchema' - - type: string - enum: - - value1 - - value2 diff --git a/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/expected.yaml deleted file mode 100644 index cce50159ca39f..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/expected.yaml +++ /dev/null @@ -1,50 +0,0 @@ -spec1.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './shared_components.schema.yaml#/components/schemas/CircularTestSchema' - -spec2.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint POST - version: '2023-10-31' - paths: - /api/some_api: - post: - operationId: TestEndpointPost - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './shared_components.schema.yaml#/components/schemas/CircularTestSchema' - -shared_components.schema.yaml: - components: - schemas: - CircularTestSchema: - type: string - data: - items: - $ref: '#/components/schemas/AnotherCircularTestSchema' - - AnotherCircularTestSchema: - anyof: - - $ref: '#/components/schemas/CircularTestSchema' - - type: string - enum: - - value1 - - value2 diff --git a/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/spec1.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/spec1.schema.yaml deleted file mode 100644 index 2e64f53087f84..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/spec1.schema.yaml +++ /dev/null @@ -1,15 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './common.schema.yaml#/components/schemas/CircularTestSchema' diff --git a/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/spec2.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/spec2.schema.yaml deleted file mode 100644 index 92ebc5f4468e5..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/recursive_ref_specs/spec2.schema.yaml +++ /dev/null @@ -1,15 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint POST - version: '2023-10-31' -paths: - /api/some_api: - post: - operationId: TestEndpointPost - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './common.schema.yaml#/components/schemas/CircularTestSchema' diff --git a/packages/kbn-openapi-bundler/src/__test__/recursive_spec/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/recursive_spec/expected.yaml deleted file mode 100644 index b5bb0cffb6390..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/recursive_spec/expected.yaml +++ /dev/null @@ -1,27 +0,0 @@ -spec.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: &ref0 - type: object - properties: - - name: field1 - required: false - schema: *ref0 - - field2: - required: false - schema: - type: string - -shared_components.schema.yaml: - components: {} diff --git a/packages/kbn-openapi-bundler/src/__test__/recursive_spec/spec.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/recursive_spec/spec.schema.yaml deleted file mode 100644 index f9e3d8b2c590e..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/recursive_spec/spec.schema.yaml +++ /dev/null @@ -1,23 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: &ref0 - type: object - properties: - - name: field1 - required: false - schema: *ref0 - - field2: - required: false - schema: - type: string diff --git a/packages/kbn-openapi-bundler/src/__test__/reduce_all_of.test.ts b/packages/kbn-openapi-bundler/src/__test__/reduce_all_of.test.ts new file mode 100644 index 0000000000000..8d79f8d77ea09 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/reduce_all_of.test.ts @@ -0,0 +1,640 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { bundleSpecs } from './bundle_specs'; +import { createOASDocument } from './create_oas_document'; + +describe('OpenAPI Bundler - reduce allOf item', () => { + it('flatten folded allOfs', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + allOf: [ + { + allOf: [ + { + allOf: [ + { $ref: '#/components/schemas/SchemaA' }, + { + type: 'object', + properties: { + fieldA: { type: 'string' }, + }, + required: ['fieldA'], + }, + ], + }, + ], + }, + { $ref: '#/components/schemas/SchemaB' }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + SchemaA: { + type: 'object', + properties: { + fieldX: { type: 'string' }, + }, + }, + SchemaB: { + type: 'object', + properties: { + fieldX: { type: 'string' }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get?.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { + allOf: [ + { $ref: '#/components/schemas/SchemaA' }, + { + type: 'object', + properties: { + fieldA: { type: 'string' }, + }, + required: ['fieldA'], + }, + { $ref: '#/components/schemas/SchemaB' }, + ], + }, + }, + }, + }); + }); + + it('unfolds single allOf item', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + allOf: [ + { + type: 'string', + }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get?.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { type: 'string' }, + }, + }, + }); + }); + + it('merges non conflicting allOf object schema items', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + allOf: [ + { $ref: '#/components/schemas/SchemaA' }, + { + type: 'object', + properties: { + fieldA: { + type: 'string', + }, + }, + }, + { $ref: '#/components/schemas/SchemaB' }, + { + type: 'object', + properties: { + fieldB: { + type: 'string', + }, + }, + required: ['fieldB'], + }, + { $ref: '#/components/schemas/SchemaC' }, + { + type: 'object', + properties: { + fieldC: { + type: 'string', + }, + }, + required: ['fieldC'], + }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + SchemaA: { + type: 'object', + properties: { + fieldX: { type: 'string' }, + }, + }, + SchemaB: { + type: 'object', + properties: { + fieldY: { type: 'string' }, + }, + }, + SchemaC: { + type: 'object', + properties: { + fieldZ: { type: 'string' }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get?.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { + allOf: [ + { + type: 'object', + properties: { + fieldA: { + type: 'string', + }, + fieldB: { + type: 'string', + }, + fieldC: { + type: 'string', + }, + }, + required: ['fieldB', 'fieldC'], + }, + { $ref: '#/components/schemas/SchemaA' }, + { $ref: '#/components/schemas/SchemaB' }, + { $ref: '#/components/schemas/SchemaC' }, + ], + }, + }, + }, + }); + }); + + it('DOES NOT merge conflicting incompatible allOf object schema items', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + allOf: [ + { + type: 'object', + properties: { + fieldA: { + type: 'string', + }, + }, + }, + { + type: 'object', + properties: { + fieldB: { + type: 'string', + }, + }, + required: ['fieldB'], + }, + { + type: 'object', + properties: { + fieldA: { + type: 'boolean', + }, + }, + }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get?.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { + allOf: [ + { + type: 'object', + properties: { + fieldA: { + type: 'string', + }, + }, + }, + { + type: 'object', + properties: { + fieldB: { + type: 'string', + }, + }, + required: ['fieldB'], + }, + { + type: 'object', + properties: { + fieldA: { + type: 'boolean', + }, + }, + }, + ], + }, + }, + }, + }); + }); + + it('merges allOf object schema items with inlined references', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + allOf: [ + { + type: 'string', + enum: ['value1'], + }, + { + type: 'object', + properties: { + fieldA: { + type: 'string', + }, + }, + }, + { + $ref: '#/components/schemas/SchemaA', + }, + { + type: 'object', + properties: { + fieldB: { + type: 'string', + }, + }, + required: ['fieldB'], + }, + { + $ref: '#/components/schemas/SchemaAToInline', + }, + { + $ref: '#/components/schemas/SchemaB', + }, + { + type: 'object', + properties: { + stringField: { + type: 'string', + }, + }, + required: ['stringField'], + }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + SchemaAToInline: { + // @ts-expect-error OpenAPIV3.Document doesn't allow to add custom props to components.schemas + 'x-inline': true, + allOf: [ + { + type: 'string', + enum: ['SchemaAToInline-value1'], + }, + { + type: 'object', + properties: { + enumField: { + type: 'string', + enum: ['SchemaAToInline-value2'], + }, + integerField: { + type: 'integer', + minimum: 1, + }, + }, + }, + { + $ref: './common.schema.yaml#/components/schemas/SchemaBToInline', + }, + ], + }, + SchemaA: { + type: 'object', + properties: { + fieldX: { type: 'string' }, + }, + }, + SchemaB: { + type: 'object', + properties: { + fieldY: { type: 'string' }, + }, + }, + }, + }, + }); + const commonSpec = createOASDocument({ + components: { + schemas: { + SchemaBToInline: { + // @ts-expect-error OpenAPIV3.Document doesn't allow to add custom props to components.schemas + 'x-inline': true, + allOf: [ + { + type: 'string', + enum: ['SchemaBToInline-value1', 'SchemaBToInline-value2'], + }, + { + type: 'object', + properties: { + fieldD: { + type: 'string', + }, + fieldE: { + type: 'string', + }, + }, + required: ['fieldE'], + }, + ], + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + common: commonSpec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get?.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { + allOf: [ + { + type: 'object', + properties: { + fieldA: { + type: 'string', + }, + fieldB: { + type: 'string', + }, + enumField: { + type: 'string', + enum: ['SchemaAToInline-value2'], + }, + integerField: { + type: 'integer', + minimum: 1, + }, + fieldD: { + type: 'string', + }, + fieldE: { + type: 'string', + }, + stringField: { + type: 'string', + }, + }, + required: ['fieldB', 'fieldE', 'stringField'], + }, + { + type: 'string', + enum: ['value1'], + }, + { + $ref: '#/components/schemas/SchemaA', + }, + { + type: 'string', + enum: ['SchemaAToInline-value1'], + }, + { + type: 'string', + enum: ['SchemaBToInline-value1', 'SchemaBToInline-value2'], + }, + { + $ref: '#/components/schemas/SchemaB', + }, + ], + }, + }, + }, + }); + }); + + it('merges allOf object schema items inlined in different document branches with extra field', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + responseSchemaFieldA: { + $ref: '#/components/schemas/SchemaToInline', + }, + responseSchemaFieldB: { + $ref: '#/components/schemas/MySchema', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + MySchema: { + allOf: [ + { + $ref: '#/components/schemas/SchemaToInline', + }, + { + type: 'object', + properties: { + mySchemaSubfield: { + type: 'boolean', + }, + }, + }, + ], + }, + SchemaToInline: { + // @ts-expect-error OpenAPIV3.Document doesn't allow to add custom props to components.schemas + 'x-inline': true, + allOf: [ + { + type: 'object', + properties: { + SchemaToInlineField1: { + type: 'string', + }, + }, + }, + { + type: 'object', + properties: { + SchemaToInlineField2: { + type: 'number', + }, + }, + required: ['field2'], + }, + ], + }, + }, + }, + }); + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get?.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + responseSchemaFieldA: { + type: 'object', + properties: { + SchemaToInlineField1: { + type: 'string', + }, + SchemaToInlineField2: { + type: 'number', + }, + }, + required: ['field2'], + }, + responseSchemaFieldB: { + $ref: '#/components/schemas/MySchema', + }, + }, + }, + }, + }, + }); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/__test__/remove_props.test.ts b/packages/kbn-openapi-bundler/src/__test__/remove_props.test.ts new file mode 100644 index 0000000000000..d9ab67386f3c2 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/remove_props.test.ts @@ -0,0 +1,210 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { OpenAPIV3 } from 'openapi-types'; +import { bundleSpecs } from './bundle_specs'; +import { createOASDocument } from './create_oas_document'; + +describe('OpenAPI Bundler - remove custom x- props', () => { + it('removes "x-codegen-enabled" property', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + // @ts-expect-error custom prop + 'x-codegen-enabled': true, + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + field1: { + type: 'integer', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/api/some_api': { + post: { + // @ts-expect-error custom prop + 'x-codegen-enabled': false, + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + field2: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + const spec3 = createOASDocument({ + paths: { + '/api/some_api': { + put: { + // @ts-expect-error custom prop + 'x-codegen-enabled': undefined, + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + field2: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec1, + 2: spec2, + 3: spec3, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get).not.toMatchObject({ + 'x-codegen-enabled': expect.anything(), + }); + expect(bundledSpec.paths['/api/some_api']!.post).not.toMatchObject({ + 'x-codegen-enabled': expect.anything(), + }); + expect(bundledSpec.paths['/api/some_api']!.put).not.toMatchObject({ + 'x-codegen-enabled': expect.anything(), + }); + }); + + it('removes "x-inline" property', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + operationId: 'TestEndpointGet', + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/SchemaToInline', + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + SchemaToInline: { + // @ts-expect-error OpenAPIV3.Document doesn't allow to add custom props to components.schemas + 'x-inline': true, + type: 'string', + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + const bundledSchema = ( + bundledSpec.paths['/api/some_api']!.get?.responses['200'] as OpenAPIV3.ResponseObject + ).content!['application/json'].schema; + + expect(bundledSchema).not.toMatchObject({ + 'x-inline': expect.anything(), + }); + }); + + it('removes "x-modify" property', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + operationId: 'TestEndpointGet', + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + // @ts-expect-error custom prop + 'x-modify': 'required', + type: 'object', + properties: { + field1: { + type: 'string', + }, + field2: { + type: 'integer', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + const bundledSchema = ( + bundledSpec.paths['/api/some_api']!.get?.responses['200'] as OpenAPIV3.ResponseObject + ).content!['application/json'].schema; + + expect(bundledSchema).not.toMatchObject({ + 'x-modify': expect.anything(), + }); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/__test__/self_recursive_ref/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/self_recursive_ref/expected.yaml deleted file mode 100644 index 2b75720a069b1..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/self_recursive_ref/expected.yaml +++ /dev/null @@ -1,24 +0,0 @@ -spec.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './shared_components.schema.yaml#/components/schemas/CircularTestSchema' - -shared_components.schema.yaml: - components: - schemas: - CircularTestSchema: - type: string - data: - $ref: '#/components/schemas/CircularTestSchema' diff --git a/packages/kbn-openapi-bundler/src/__test__/self_recursive_ref/spec.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/self_recursive_ref/spec.schema.yaml deleted file mode 100644 index d90a117818455..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/self_recursive_ref/spec.schema.yaml +++ /dev/null @@ -1,22 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/CircularTestSchema' - -components: - schemas: - CircularTestSchema: - type: string - data: - $ref: '#/components/schemas/CircularTestSchema' diff --git a/packages/kbn-openapi-bundler/src/__test__/skip_internal/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/skip_internal/expected.yaml deleted file mode 100644 index d8f6d6cb474bf..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/skip_internal/expected.yaml +++ /dev/null @@ -1,31 +0,0 @@ -spec.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - anyOf: - - $ref: './shared_components.schema.yaml#/components/schemas/TestSchema1' - - type: object - -shared_components.schema.yaml: - components: - schemas: - TestSchema1: - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 diff --git a/packages/kbn-openapi-bundler/src/__test__/skip_internal/spec.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/skip_internal/spec.schema.yaml deleted file mode 100644 index 1d172978a4240..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/skip_internal/spec.schema.yaml +++ /dev/null @@ -1,57 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - anyOf: - - $ref: '#/components/schemas/TestSchema1' - - $ref: '#/components/schemas/TestSchema2' - x-internal: true - - type: object - properties: - x-internal: true - field1: - $ref: '#/components/schemas/TestSchema3' - -components: - schemas: - TestSchema1: - # x-internal is not supported here - # x-internal: true - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - - TestSchema2: - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 - - TestSchema3: - type: object - properties: - field1: - type: string - enum: [value1] - field2: - type: integer - minimum: 1 diff --git a/packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/expected.yaml deleted file mode 100644 index 3015eb607287a..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/expected.yaml +++ /dev/null @@ -1,22 +0,0 @@ -spec1.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: integer - -shared_components.schema.yaml: - components: {} diff --git a/packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/spec1.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/spec1.schema.yaml deleted file mode 100644 index 5b7f6a8718fcf..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/spec1.schema.yaml +++ /dev/null @@ -1,18 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: integer diff --git a/packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/spec2.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/spec2.schema.yaml deleted file mode 100644 index 5a53977b69100..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/skip_internal_endpoint/spec2.schema.yaml +++ /dev/null @@ -1,18 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint POST - version: '2023-10-31' -paths: - /internal/some_api: - post: - operationId: TestEndpointPost - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field2: - type: string diff --git a/packages/kbn-openapi-bundler/src/__test__/skip_nodes.test.ts b/packages/kbn-openapi-bundler/src/__test__/skip_nodes.test.ts new file mode 100644 index 0000000000000..35b1de2b3a0bc --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/skip_nodes.test.ts @@ -0,0 +1,168 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { bundleSpecs } from './bundle_specs'; +import { createOASDocument } from './create_oas_document'; + +describe('OpenAPI Bundler - skip nodes like internal endpoints', () => { + it('skips nodes with x-internal property', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + anyOf: [ + { + $ref: '#/components/schemas/TestSchema1', + }, + { + $ref: '#/components/schemas/TestSchema2', + // @ts-expect-error custom prop + 'x-internal': true, + }, + { + type: 'object', + properties: { + field1: { + type: 'string', + }, + internalField: { + 'x-internal': true, + type: 'string', + }, + }, + }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + TestSchema1: { + type: 'object', + properties: { + field1: { + type: 'string', + enum: ['value1'], + }, + field2: { + type: 'integer', + minimum: 1, + }, + }, + }, + TestSchema2: { + type: 'string', + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get!.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { + anyOf: [ + { + $ref: '#/components/schemas/TestSchema1', + }, + { + type: 'object', + properties: { + field1: { + type: 'string', + }, + }, + }, + ], + }, + }, + }, + }); + }); + + it('skips endpoints starting with /internal', async () => { + const spec1 = createOASDocument({ + paths: { + '/api/some_api': { + get: { + operationId: 'TestEndpointGet', + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + field1: { + type: 'integer', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + const spec2 = createOASDocument({ + paths: { + '/internal/some_api': { + post: { + operationId: 'TestEndpointPost', + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + type: 'object', + properties: { + field2: { + type: 'string', + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec1, + 2: spec2, + }) + ); + + expect(Object.keys(bundledSpec.paths)).not.toContain('/internal/some_api'); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/__test__/spec_with_external_ref/common.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/spec_with_external_ref/common.schema.yaml deleted file mode 100644 index b710c4e8b114b..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/spec_with_external_ref/common.schema.yaml +++ /dev/null @@ -1,13 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint - version: '2023-10-31' -paths: {} - -components: - schemas: - TestSchema: - type: string - enum: - - value1 - - value2 diff --git a/packages/kbn-openapi-bundler/src/__test__/spec_with_external_ref/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/spec_with_external_ref/expected.yaml deleted file mode 100644 index 48c9045d62ce5..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/spec_with_external_ref/expected.yaml +++ /dev/null @@ -1,25 +0,0 @@ -spec.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './shared_components.schema.yaml#/components/schemas/TestSchema' - -shared_components.schema.yaml: - components: - schemas: - TestSchema: - type: string - enum: - - value1 - - value2 diff --git a/packages/kbn-openapi-bundler/src/__test__/spec_with_local_ref/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/spec_with_local_ref/expected.yaml deleted file mode 100644 index 48c9045d62ce5..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/spec_with_local_ref/expected.yaml +++ /dev/null @@ -1,25 +0,0 @@ -spec.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './shared_components.schema.yaml#/components/schemas/TestSchema' - -shared_components.schema.yaml: - components: - schemas: - TestSchema: - type: string - enum: - - value1 - - value2 diff --git a/packages/kbn-openapi-bundler/src/__test__/spec_with_local_ref/spec.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/spec_with_local_ref/spec.schema.yaml deleted file mode 100644 index 2339d5eb7aa59..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/spec_with_local_ref/spec.schema.yaml +++ /dev/null @@ -1,23 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/TestSchema' - -components: - schemas: - TestSchema: - type: string - enum: - - value1 - - value2 diff --git a/packages/kbn-openapi-bundler/src/__test__/two_simple_specs/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/two_simple_specs/expected.yaml deleted file mode 100644 index dbe9fdb445e86..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/two_simple_specs/expected.yaml +++ /dev/null @@ -1,42 +0,0 @@ -spec1.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: integer - -spec2.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint POST - version: '2023-10-31' - paths: - /api/some_api: - post: - operationId: TestEndpointPost - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field2: - type: string - -shared_components.schema.yaml: - components: {} diff --git a/packages/kbn-openapi-bundler/src/__test__/two_simple_specs/spec1.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/two_simple_specs/spec1.schema.yaml deleted file mode 100644 index 5b7f6a8718fcf..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/two_simple_specs/spec1.schema.yaml +++ /dev/null @@ -1,18 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field1: - type: integer diff --git a/packages/kbn-openapi-bundler/src/__test__/two_simple_specs/spec2.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/two_simple_specs/spec2.schema.yaml deleted file mode 100644 index c3ba67e0b46ea..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/two_simple_specs/spec2.schema.yaml +++ /dev/null @@ -1,18 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint POST - version: '2023-10-31' -paths: - /api/some_api: - post: - operationId: TestEndpointPost - responses: - '200': - description: Successful response - content: - application/json: - schema: - type: object - properties: - field2: - type: string diff --git a/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/common.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/common.schema.yaml deleted file mode 100644 index b710c4e8b114b..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/common.schema.yaml +++ /dev/null @@ -1,13 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint - version: '2023-10-31' -paths: {} - -components: - schemas: - TestSchema: - type: string - enum: - - value1 - - value2 diff --git a/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/expected.yaml b/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/expected.yaml deleted file mode 100644 index d3040ae511b2c..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/expected.yaml +++ /dev/null @@ -1,42 +0,0 @@ -spec1.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint GET - version: '2023-10-31' - paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './shared_components.schema.yaml#/components/schemas/TestSchema' - -spec2.schema.yaml: - openapi: 3.0.3 - info: - title: Test endpoint POST - version: '2023-10-31' - paths: - /api/some_api: - post: - operationId: TestEndpointPost - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './shared_components.schema.yaml#/components/schemas/TestSchema' - -shared_components.schema.yaml: - components: - schemas: - TestSchema: - type: string - enum: - - value1 - - value2 diff --git a/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/spec1.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/spec1.schema.yaml deleted file mode 100644 index c08570d69311c..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/spec1.schema.yaml +++ /dev/null @@ -1,15 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint GET - version: '2023-10-31' -paths: - /api/some_api: - get: - operationId: TestEndpointGet - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './common.schema.yaml#/components/schemas/TestSchema' diff --git a/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/spec2.schema.yaml b/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/spec2.schema.yaml deleted file mode 100644 index 9dec5566875bb..0000000000000 --- a/packages/kbn-openapi-bundler/src/__test__/two_specs_with_external_ref/spec2.schema.yaml +++ /dev/null @@ -1,15 +0,0 @@ -openapi: 3.0.3 -info: - title: Test endpoint POST - version: '2023-10-31' -paths: - /api/some_api: - post: - operationId: TestEndpointPost - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: './common.schema.yaml#/components/schemas/TestSchema' diff --git a/packages/kbn-openapi-bundler/src/__test__/x_modify.test.ts b/packages/kbn-openapi-bundler/src/__test__/x_modify.test.ts new file mode 100644 index 0000000000000..cdc53e8369345 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/__test__/x_modify.test.ts @@ -0,0 +1,340 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { bundleSpecs } from './bundle_specs'; +import { createOASDocument } from './create_oas_document'; + +describe('OpenAPI Bundler - x-modify', () => { + it('inlines references with x-modify property', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + anyOf: [ + { + $ref: '#/components/schemas/SchemaWithRequiredFields', + // @ts-expect-error custom prop + 'x-modify': 'partial', + }, + { + $ref: '#/components/schemas/SchemaWithOptionalFields', + 'x-modify': 'required', + }, + ], + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + SchemaWithRequiredFields: { + type: 'object', + properties: { + fieldA: { + type: 'string', + enum: ['value1'], + }, + fieldB: { + type: 'integer', + minimum: 1, + }, + }, + required: ['fieldA', 'fieldB'], + }, + SchemaWithOptionalFields: { + type: 'object', + properties: { + fieldC: { + type: 'string', + enum: ['value1'], + }, + fieldD: { + type: 'integer', + minimum: 1, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get!.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: { + anyOf: [ + { + type: 'object', + properties: { + fieldA: { + type: 'string', + enum: ['value1'], + }, + fieldB: { + type: 'integer', + minimum: 1, + }, + }, + }, + { + type: 'object', + properties: { + fieldC: { + type: 'string', + enum: ['value1'], + }, + fieldD: { + type: 'integer', + minimum: 1, + }, + }, + required: ['fieldC', 'fieldD'], + }, + ], + }, + }, + }, + }); + }); + + it('makes properties in an object schema node partial', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + // @ts-expect-error custom prop + 'x-modify': 'partial', + type: 'object', + properties: { + fieldA: { + type: 'string', + enum: ['value1'], + }, + fieldB: { + type: 'integer', + minimum: 1, + }, + }, + required: ['fieldA', 'fieldB'], + }, + }, + }, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get!.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: expect.not.objectContaining({ + required: expect.anything(), + }), + }, + }, + }); + }); + + it('makes properties in a referenced object schema node partial', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/TestSchema', + // @ts-expect-error custom prop + 'x-modify': 'partial', + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + TestSchema: { + type: 'object', + properties: { + fieldA: { + type: 'string', + enum: ['value1'], + }, + fieldB: { + type: 'integer', + minimum: 1, + }, + }, + required: ['fieldA', 'fieldB'], + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get!.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: expect.not.objectContaining({ + required: expect.anything(), + }), + }, + }, + }); + }); + + it('makes properties in an object schema node required', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + // @ts-expect-error custom prop + 'x-modify': 'required', + type: 'object', + properties: { + fieldA: { + type: 'string', + enum: ['value1'], + }, + fieldB: { + type: 'integer', + minimum: 1, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get!.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: expect.objectContaining({ + required: ['fieldA', 'fieldB'], + }), + }, + }, + }); + }); + + it('makes properties in a referenced object schema node required', async () => { + const spec = createOASDocument({ + paths: { + '/api/some_api': { + get: { + responses: { + '200': { + description: 'Successful response', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/TestSchema', + // @ts-expect-error custom prop + 'x-modify': 'required', + }, + }, + }, + }, + }, + }, + }, + }, + components: { + schemas: { + TestSchema: { + type: 'object', + properties: { + fieldA: { + type: 'string', + enum: ['value1'], + }, + fieldB: { + type: 'integer', + minimum: 1, + }, + }, + }, + }, + }, + }); + + const [bundledSpec] = Object.values( + await bundleSpecs({ + 1: spec, + }) + ); + + expect(bundledSpec.paths['/api/some_api']!.get!.responses['200']).toMatchObject({ + content: { + 'application/json': { + schema: expect.objectContaining({ + required: ['fieldA', 'fieldB'], + }), + }, + }, + }); + }); +}); diff --git a/packages/kbn-openapi-bundler/src/bundler/bundle_document.ts b/packages/kbn-openapi-bundler/src/bundler/bundle_document.ts index 1f6884a87f677..502ede318ca6d 100644 --- a/packages/kbn-openapi-bundler/src/bundler/bundle_document.ts +++ b/packages/kbn-openapi-bundler/src/bundler/bundle_document.ts @@ -19,6 +19,11 @@ import { createModifyRequiredProcessor } from './document_processors/modify_requ import { X_CODEGEN_ENABLED, X_INLINE, X_INTERNAL, X_MODIFY } from './known_custom_props'; import { RemoveUnusedComponentsProcessor } from './document_processors/remove_unused_components'; import { isPlainObjectType } from '../utils/is_plain_object_type'; +import { + createFlattenFoldedAllOfItemsProcessor, + createMergeNonConflictingAllOfItemsProcessor, + createUnfoldSingleAllOfItemProcessor, +} from './document_processors/reduce_all_of_items'; export class SkipException extends Error { constructor(public documentPath: string, message: string) { @@ -72,7 +77,10 @@ export async function bundleDocument(absoluteDocumentPath: string): Promise `schemas` -> `SomeSchema` and `$ref` property's - * values is updated to `#/components/schemas/SomeSchema`. + * values are updated to be local e.g. `#/components/schemas/SomeSchema`. * - * Conditional dereference means inlining references when `inliningPredicate()` returns `true`. If `inliningPredicate` - * is not passed only bundling happens. + * Some references get inlined based on a condition (conditional dereference). It's controlled by inlining + * property whose value should be `true`. `inliningPropName` specifies inlining property name e.g. `x-inline`. + * Nodes having `x-inline: true` will be inlined. */ -export class BundleRefProcessor { - private refs: ResolvedRef[] = []; +export class BundleRefProcessor implements DocumentNodeProcessor { + private refs = new Map(); + private nodesToInline = new Set>(); constructor(private inliningPropName: string) {} - ref(node: RefNode, resolvedRef: ResolvedRef, context: TraverseDocumentContext): void { - if (!resolvedRef.pointer.startsWith('/components/schemas')) { - throw new Error(`$ref pointer must start with "/components/schemas"`); + onNodeEnter(node: Readonly): void { + if (hasProp(node, this.inliningPropName, true)) { + this.nodesToInline.add(node); } + } - if ( - hasProp(node, this.inliningPropName, true) || - hasProp(resolvedRef.refNode, this.inliningPropName, true) - ) { - inlineRef(node, resolvedRef); + onRefNodeLeave(node: RefNode, resolvedRef: ResolvedRef, context: TraverseDocumentContext): void { + if (!resolvedRef.pointer.startsWith('/components')) { + throw new Error( + `$ref pointer ${chalk.yellow( + resolvedRef.pointer + )} must start with "/components" at ${chalk.bold(resolvedRef.absolutePath)}` + ); + } - delete node[this.inliningPropName]; + if (this.nodesToInline.has(node) || this.nodesToInline.has(resolvedRef.refNode)) { + inlineRef(node, resolvedRef); } else { const rootDocument = this.extractRootDocument(context); @@ -46,16 +63,34 @@ export class BundleRefProcessor { rootDocument.components = {}; } + const ref = this.refs.get(resolvedRef.pointer); + + if (ref && !deepEqual(ref.refNode, resolvedRef.refNode)) { + const documentAbsolutePath = + this.extractParentContext(context).resolvedDocument.absolutePath; + + throw new Error( + `❌ Unable to bundle ${chalk.bold( + documentAbsolutePath + )} due to conflicts in references. Schema ${chalk.yellow( + ref.pointer + )} is defined in ${chalk.blue(ref.absolutePath)} and in ${chalk.magenta( + resolvedRef.absolutePath + )} but has not matching definitions.` + ); + } + node.$ref = this.saveComponent( resolvedRef, rootDocument.components as Record ); - this.refs.push(resolvedRef); + + this.refs.set(resolvedRef.pointer, resolvedRef); } } - getBundledRefs(): ResolvedRef[] { - return this.refs; + getBundledRefs(): IterableIterator { + return this.refs.values(); } private saveComponent(ref: ResolvedRef, components: Record): string { @@ -64,11 +99,15 @@ export class BundleRefProcessor { return `#${ref.pointer}`; } - private extractRootDocument(context: TraverseDocumentContext): Document { + private extractParentContext(context: TraverseDocumentContext): TraverseRootDocumentContext { while (isChildContext(context)) { context = context.parentContext; } - return context.resolvedDocument.document; + return context; + } + + private extractRootDocument(context: TraverseDocumentContext): Document { + return this.extractParentContext(context).resolvedDocument.document; } } diff --git a/packages/kbn-openapi-bundler/src/bundler/document_processors/modify_partial.ts b/packages/kbn-openapi-bundler/src/bundler/document_processors/modify_partial.ts index 13c876b7579ca..5d667eff1bc80 100644 --- a/packages/kbn-openapi-bundler/src/bundler/document_processors/modify_partial.ts +++ b/packages/kbn-openapi-bundler/src/bundler/document_processors/modify_partial.ts @@ -17,7 +17,7 @@ import { X_MODIFY } from '../known_custom_props'; */ export function createModifyPartialProcessor(): DocumentNodeProcessor { return { - ref(node, resolvedRef) { + onRefNodeLeave(node, resolvedRef) { if (!hasProp(node, X_MODIFY, 'partial')) { return; } @@ -27,7 +27,7 @@ export function createModifyPartialProcessor(): DocumentNodeProcessor { delete node.required; }, - leave(node) { + onNodeLeave(node) { if (!hasProp(node, X_MODIFY, 'partial')) { return; } diff --git a/packages/kbn-openapi-bundler/src/bundler/document_processors/modify_required.ts b/packages/kbn-openapi-bundler/src/bundler/document_processors/modify_required.ts index 14a9ac2ea25c6..769672d64a39d 100644 --- a/packages/kbn-openapi-bundler/src/bundler/document_processors/modify_required.ts +++ b/packages/kbn-openapi-bundler/src/bundler/document_processors/modify_required.ts @@ -20,7 +20,7 @@ import { inlineRef } from './utils/inline_ref'; */ export function createModifyRequiredProcessor(): DocumentNodeProcessor { return { - ref(node, resolvedRef) { + onRefNodeLeave(node, resolvedRef) { if (!hasProp(node, X_MODIFY, 'required')) { return; } @@ -48,7 +48,7 @@ export function createModifyRequiredProcessor(): DocumentNodeProcessor { node.required = Object.keys(resolvedRef.refNode.properties); }, - leave(node) { + onNodeLeave(node) { if (!hasProp(node, X_MODIFY, 'required')) { return; } diff --git a/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/flatten_folded_all_of_items.ts b/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/flatten_folded_all_of_items.ts new file mode 100644 index 0000000000000..dcf4b82a42af5 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/flatten_folded_all_of_items.ts @@ -0,0 +1,61 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { DocumentNodeProcessor } from '../../types'; + +/** + * Creates a node processor to flatten folded `allOf` items. Folded means `allOf` has items + * which are another `allOf`s instead of being e.g. object schemas. + * + * Folded `allOf` schemas is usually a result of inlining references. + * + * Example: + * + * The following folded `allOf`s + * + * ```yaml + * allOf: + * - allOf: + * - type: object + * properties: + * fieldA: + * $ref: '#/components/schemas/FieldA' + * - type: object + * properties: + * fieldB: + * type: string + * ``` + * + * will be transformed to + * + * ```yaml + * allOf: + * - type: object + * properties: + * fieldA: + * $ref: '#/components/schemas/FieldA' + * - type: object + * properties: + * fieldB: + * type: string + * ``` + * + */ +export function createFlattenFoldedAllOfItemsProcessor(): DocumentNodeProcessor { + return { + onNodeLeave(node) { + if (!('allOf' in node) || !Array.isArray(node.allOf)) { + return; + } + + node.allOf = node.allOf.flatMap((childNode) => + 'allOf' in childNode ? childNode.allOf : childNode + ); + }, + }; +} diff --git a/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/index.ts b/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/index.ts new file mode 100644 index 0000000000000..acfe16cc95c5e --- /dev/null +++ b/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/index.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './flatten_folded_all_of_items'; +export * from './merge_non_conflicting_all_of_items'; +export * from './unfold_single_all_of_item'; diff --git a/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/merge_non_conflicting_all_of_items.ts b/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/merge_non_conflicting_all_of_items.ts new file mode 100644 index 0000000000000..87895be952b96 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/merge_non_conflicting_all_of_items.ts @@ -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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { omit } from 'lodash'; +import deepEqual from 'fast-deep-equal'; +import { OpenAPIV3 } from 'openapi-types'; +import { isPlainObjectType } from '../../../utils/is_plain_object_type'; +import { DocumentNodeProcessor } from '../../types'; + +type MergedObjectSchema = Required> & + Pick; + +/** + * Creates a node processor to merge object schema definitions when there are no conflicts + * between them. + * + * After inlining references or any other transformations a schema may have `allOf` + * with multiple object schema items. Object schema has `properties` field describing object + * properties and optional `required` field to say which object properties are not optional. + * + * Conflicts between object schemas do now allow merge them. The following conflicts may appear + * + * - Two or more object schemas define the same named object field but definition is different + * - Some of object schemas have optional properties like `readOnly` + * - Two or more object schemas have conflicting optional properties values + * + * Example: + * + * The following `allOf` containing multiple object schemas + * + * ```yaml + * allOf: + * - type: object + * properties: + * fieldA: + * $ref: '#/components/schemas/FieldA' + * - type: object + * properties: + * fieldB: + * type: string + * ``` + * + * will be transformed to + * + * ```yaml + * allOf: + * - type: object + * properties: + * fieldA: + * $ref: '#/components/schemas/FieldA' + * fieldB: + * type: string + * ``` + */ +export function createMergeNonConflictingAllOfItemsProcessor(): DocumentNodeProcessor { + return { + onNodeLeave(allOfNode) { + if ( + !('allOf' in allOfNode) || + !Array.isArray(allOfNode.allOf) || + !canMergeObjectSchemas(allOfNode.allOf) + ) { + return; + } + + const resultItems: [ + MergedObjectSchema, + ...Array + ] = [ + { + type: 'object', + properties: {}, + }, + ]; + const mergedRequired = new Set(); + + for (const item of allOfNode.allOf) { + if (!isObjectNode(item) || !isPlainObjectType(item.properties)) { + resultItems.push(item); + continue; + } + + Object.assign(resultItems[0].properties, item.properties); + + for (const requiredField of item.required ?? []) { + mergedRequired.add(requiredField); + } + } + + if (mergedRequired.size > 0) { + resultItems[0].required = Array.from(mergedRequired); + } + + allOfNode.allOf = resultItems; + }, + }; +} + +/** + * Object schemas can be merged when + * + * - as minimum there are two object schemas + * - object schemas DO NOT contain conflicting fields (same name but different definition) + * - object schemas DO NOT contain fields besides `type`, `properties` and `required` + * + */ +function canMergeObjectSchemas(schemas: OpenAPIV3.SchemaObject[]): boolean { + const props = new Map(); + let objectSchemasCounter = 0; + + for (const node of schemas) { + if (!isObjectNode(node) || !isPlainObjectType(node.properties)) { + continue; + } + + if (getObjectSchemaExtraFieldNames(node).size > 0) { + return false; + } + + const nodePropNames = Object.keys(node.properties); + + for (const nodePropName of nodePropNames) { + const propSchema = props.get(nodePropName); + + if (propSchema && !deepEqual(propSchema, node.properties[nodePropName])) { + return false; + } + + props.set(nodePropName, node.properties[nodePropName]); + } + + objectSchemasCounter++; + } + + return objectSchemasCounter > 1; +} + +function getObjectSchemaExtraFieldNames(schema: OpenAPIV3.SchemaObject): Set { + return new Set(Object.keys(omit(schema, ['type', 'properties', 'required']))); +} + +function isObjectNode(node: unknown): boolean { + return isPlainObjectType(node) && node.type === 'object'; +} diff --git a/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/unfold_single_all_of_item.ts b/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/unfold_single_all_of_item.ts new file mode 100644 index 0000000000000..67a056091db4c --- /dev/null +++ b/packages/kbn-openapi-bundler/src/bundler/document_processors/reduce_all_of_items/unfold_single_all_of_item.ts @@ -0,0 +1,51 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { DocumentNodeProcessor } from '../../types'; + +/** + * Created a node processor to remove/unfold `allOf` with only single item. + * + * While a schema can be defined like that the most often reason why `allOf` has + * only one item is flattening folded `allOf` items via `flattenFoldedAllOfItems` + * node processor. + * + * Example: + * + * The following single item `allOf` + * + * ```yaml + * allOf: + * - type: object + * properties: + * fieldA: + * $ref: '#/components/schemas/FieldA' + * ``` + * + * will be transformed to + * + * ```yaml + * type: object + * properties: + * fieldA: + * $ref: '#/components/schemas/FieldA' + * ``` + * + */ +export function createUnfoldSingleAllOfItemProcessor(): DocumentNodeProcessor { + return { + onNodeLeave(node) { + if (!('allOf' in node) || !Array.isArray(node.allOf) || node.allOf.length > 1) { + return; + } + + Object.assign(node, node.allOf[0]); + delete node.allOf; + }, + }; +} diff --git a/packages/kbn-openapi-bundler/src/bundler/document_processors/remove_props.ts b/packages/kbn-openapi-bundler/src/bundler/document_processors/remove_props.ts index 616d9db11f55e..02fb2036e2a0c 100644 --- a/packages/kbn-openapi-bundler/src/bundler/document_processors/remove_props.ts +++ b/packages/kbn-openapi-bundler/src/bundler/document_processors/remove_props.ts @@ -14,13 +14,13 @@ import { DocumentNodeProcessor } from '../types'; */ export function createRemovePropsProcessor(propNames: string[]): DocumentNodeProcessor { return { - leave(node) { + onNodeLeave(node) { if (!isPlainObjectType(node)) { return; } for (const propName of propNames) { - if (!node[propName]) { + if (!Object.hasOwn(node, propName)) { continue; } diff --git a/packages/kbn-openapi-bundler/src/bundler/document_processors/remove_unused_components.ts b/packages/kbn-openapi-bundler/src/bundler/document_processors/remove_unused_components.ts index 1f5053d4667fe..393f986ec5a1a 100644 --- a/packages/kbn-openapi-bundler/src/bundler/document_processors/remove_unused_components.ts +++ b/packages/kbn-openapi-bundler/src/bundler/document_processors/remove_unused_components.ts @@ -8,7 +8,7 @@ import { hasProp } from '../../utils/has_prop'; import { isPlainObjectType } from '../../utils/is_plain_object_type'; -import { PlainObjectNode, ResolvedRef } from '../types'; +import { DocumentNodeProcessor, PlainObjectNode, ResolvedRef } from '../types'; /** * Helps to remove unused components. @@ -17,10 +17,10 @@ import { PlainObjectNode, ResolvedRef } from '../types'; * and then `removeUnusedComponents()` should be invoked after document processing to perform * actual unused components deletion. */ -export class RemoveUnusedComponentsProcessor { +export class RemoveUnusedComponentsProcessor implements DocumentNodeProcessor { private refs = new Set(); - ref(node: unknown, resolvedRef: ResolvedRef): void { + onRefNodeLeave(node: unknown, resolvedRef: ResolvedRef): void { // If the reference has been inlined by one of the previous processors skip it if (!hasProp(node, '$ref')) { return; diff --git a/packages/kbn-openapi-bundler/src/bundler/document_processors/skip_internal_path.ts b/packages/kbn-openapi-bundler/src/bundler/document_processors/skip_internal_path.ts index 42769eab7a68a..280002ce13890 100644 --- a/packages/kbn-openapi-bundler/src/bundler/document_processors/skip_internal_path.ts +++ b/packages/kbn-openapi-bundler/src/bundler/document_processors/skip_internal_path.ts @@ -13,7 +13,7 @@ import { DocumentNodeProcessor } from '../types'; */ export function createSkipInternalPathProcessor(skipPathPrefix: string): DocumentNodeProcessor { return { - enter(_, context) { + shouldRemove(_, context) { if (typeof context.parentKey === 'number') { return false; } diff --git a/packages/kbn-openapi-bundler/src/bundler/document_processors/skip_node_with_internal_prop.ts b/packages/kbn-openapi-bundler/src/bundler/document_processors/skip_node_with_internal_prop.ts index 4931036bcd1bc..b674cfb8c0b9c 100644 --- a/packages/kbn-openapi-bundler/src/bundler/document_processors/skip_node_with_internal_prop.ts +++ b/packages/kbn-openapi-bundler/src/bundler/document_processors/skip_node_with_internal_prop.ts @@ -16,6 +16,6 @@ export function createSkipNodeWithInternalPropProcessor( skipProperty: string ): DocumentNodeProcessor { return { - enter: (node) => skipProperty in node, + shouldRemove: (node) => skipProperty in node, }; } diff --git a/packages/kbn-openapi-bundler/src/bundler/document_processors/utils/inline_ref.ts b/packages/kbn-openapi-bundler/src/bundler/document_processors/utils/inline_ref.ts index 3106bf9cbc95d..fac6c519980b9 100644 --- a/packages/kbn-openapi-bundler/src/bundler/document_processors/utils/inline_ref.ts +++ b/packages/kbn-openapi-bundler/src/bundler/document_processors/utils/inline_ref.ts @@ -6,15 +6,11 @@ * Side Public License, v 1. */ -import { cloneDeep } from 'lodash'; import { DocumentNode, ResolvedRef } from '../../types'; import { InlinableRefNode } from '../types'; export function inlineRef(node: DocumentNode, resolvedRef: ResolvedRef): void { - // Make sure unwanted side effects don't happen when child nodes are processed - const deepClone = cloneDeep(resolvedRef.refNode); - - Object.assign(node, deepClone); + Object.assign(node, resolvedRef.refNode); delete (node as InlinableRefNode).$ref; } diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents.ts deleted file mode 100644 index e27253cefc1c9..0000000000000 --- a/packages/kbn-openapi-bundler/src/bundler/merge_documents.ts +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import deepEqual from 'fast-deep-equal'; -import { basename, dirname, join } from 'path'; -import chalk from 'chalk'; -import { parseRef } from '../utils/parse_ref'; -import { insertRefByPointer } from '../utils/insert_by_json_pointer'; -import { DocumentNodeProcessor, PlainObjectNode, ResolvedDocument, ResolvedRef } from './types'; -import { BundledDocument } from './bundle_document'; -import { processDocument } from './process_document'; - -type MergedDocuments = Record; - -type MergedResult = Record; - -const SHARED_COMPONENTS_FILE_NAME = 'shared_components.schema.yaml'; - -export async function mergeDocuments(bundledDocuments: BundledDocument[]): Promise { - const mergedDocuments: MergedDocuments = {}; - const componentsMap = new Map(); - - for (const bundledDocument of bundledDocuments) { - mergeRefsToMap(bundledDocument.bundledRefs, componentsMap); - - delete bundledDocument.document.components; - - await setRefsFileName(bundledDocument, SHARED_COMPONENTS_FILE_NAME); - mergeDocument(bundledDocument, mergedDocuments); - } - - const result: MergedResult = {}; - - for (const fileName of Object.keys(mergedDocuments)) { - result[fileName] = mergedDocuments[fileName].document; - } - - result[SHARED_COMPONENTS_FILE_NAME] = { - components: componentsMapToComponents(componentsMap), - }; - - return result; -} - -function mergeDocument(resolvedDocument: ResolvedDocument, mergeResult: MergedDocuments): void { - const fileName = basename(resolvedDocument.absolutePath); - - if (!mergeResult[fileName]) { - mergeResult[fileName] = resolvedDocument; - return; - } - - const nonConflictFileName = generateNonConflictingFilePath( - resolvedDocument.absolutePath, - mergeResult - ); - - mergeResult[nonConflictFileName] = resolvedDocument; -} - -function generateNonConflictingFilePath( - documentAbsolutePath: string, - mergeResult: MergedDocuments -): string { - let pathToDocument = dirname(documentAbsolutePath); - let suggestedName = basename(documentAbsolutePath); - - while (mergeResult[suggestedName]) { - suggestedName = `${basename(pathToDocument)}_${suggestedName}`; - pathToDocument = join(pathToDocument, '..'); - } - - return suggestedName; -} - -function mergeRefsToMap(bundledRefs: ResolvedRef[], componentsMap: Map): void { - for (const bundledRef of bundledRefs) { - const existingRef = componentsMap.get(bundledRef.pointer); - - if (!existingRef) { - componentsMap.set(bundledRef.pointer, bundledRef); - continue; - } - - if (deepEqual(existingRef.refNode, bundledRef.refNode)) { - continue; - } - - throw new Error( - `❌ Unable to bundle documents due to conflicts in references. Schema ${chalk.yellow( - bundledRef.pointer - )} is defined in ${chalk.blue(existingRef.absolutePath)} and in ${chalk.magenta( - bundledRef.absolutePath - )} but has not matching definitions.` - ); - } -} - -function componentsMapToComponents( - componentsMap: Map -): Record { - const result: Record = {}; - - for (const resolvedRef of componentsMap.values()) { - insertRefByPointer(resolvedRef.pointer, resolvedRef.refNode, result); - } - - return result; -} - -async function setRefsFileName( - resolvedDocument: ResolvedDocument, - fileName: string -): Promise { - // We don't need to follow references - const stubRefResolver = { - resolveRef: async (refDocumentAbsolutePath: string, pointer: string): Promise => ({ - absolutePath: refDocumentAbsolutePath, - pointer, - document: resolvedDocument.document, - refNode: {}, - }), - resolveDocument: async (): Promise => ({ - absolutePath: '', - document: resolvedDocument.document, - }), - }; - const setRefFileProcessor: DocumentNodeProcessor = { - ref: (node) => { - const { pointer } = parseRef(node.$ref); - - node.$ref = `./${fileName}#${pointer}`; - }, - }; - - await processDocument(resolvedDocument, stubRefResolver, [setRefFileProcessor]); -} diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/create_blank_oas_document.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/create_blank_oas_document.ts new file mode 100644 index 0000000000000..925471719b345 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/create_blank_oas_document.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { OpenAPIV3 } from 'openapi-types'; + +export function createBlankOpenApiDocument( + oasVersion: string, + info: OpenAPIV3.InfoObject +): OpenAPIV3.Document { + return { + openapi: oasVersion, + info, + servers: [ + { + url: 'http://{kibana_host}:{port}', + variables: { + kibana_host: { + default: 'localhost', + }, + port: { + default: '5601', + }, + }, + }, + ], + security: [ + { + BasicAuth: [], + }, + ], + paths: {}, + components: { + securitySchemes: { + BasicAuth: { + type: 'http', + scheme: 'basic', + }, + }, + }, + }; +} diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/index.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/index.ts new file mode 100644 index 0000000000000..554cf7cd2c2c5 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './merge_documents'; diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_documents.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_documents.ts new file mode 100644 index 0000000000000..03275dbf3f3de --- /dev/null +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_documents.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import chalk from 'chalk'; +import { OpenAPIV3 } from 'openapi-types'; +import { logger } from '../../logger'; +import { BundledDocument } from '../bundle_document'; +import { mergePaths } from './merge_paths'; +import { mergeSharedComponents } from './merge_shared_components'; + +export async function mergeDocuments( + bundledDocuments: BundledDocument[], + blankOasFactory: (oasVersion: string, apiVersion: string) => OpenAPIV3.Document +): Promise> { + const bundledDocumentsByVersion = splitByVersion(bundledDocuments); + const mergedByVersion = new Map(); + + for (const [apiVersion, singleVersionBundledDocuments] of bundledDocumentsByVersion.entries()) { + const oasVersion = extractOasVersion(singleVersionBundledDocuments); + const mergedDocument = blankOasFactory(oasVersion, apiVersion); + + mergedDocument.paths = mergePaths(singleVersionBundledDocuments); + mergedDocument.components = { + // Copy components defined in the blank OpenAPI document + ...mergedDocument.components, + ...mergeSharedComponents(singleVersionBundledDocuments), + }; + + mergedByVersion.set(mergedDocument.info.version, mergedDocument); + } + + return mergedByVersion; +} + +function splitByVersion(bundledDocuments: BundledDocument[]): Map { + const splitBundledDocuments = new Map(); + + for (const bundledDocument of bundledDocuments) { + const documentInfo = bundledDocument.document.info as OpenAPIV3.InfoObject; + + if (!documentInfo.version) { + logger.warning(`OpenAPI version is missing in ${chalk.bold(bundledDocument.absolutePath)}`); + + continue; + } + + const versionBundledDocuments = splitBundledDocuments.get(documentInfo.version); + + if (!versionBundledDocuments) { + splitBundledDocuments.set(documentInfo.version, [bundledDocument]); + } else { + versionBundledDocuments.push(bundledDocument); + } + } + + return splitBundledDocuments; +} + +function extractOasVersion(bundledDocuments: BundledDocument[]): string { + if (bundledDocuments.length === 0) { + throw new Error('Empty bundled document list'); + } + + const firstBundledDocument = bundledDocuments[0]; + + for (let i = 1; i < bundledDocuments.length; ++i) { + if ( + !areOasVersionsEqual( + bundledDocuments[i].document.openapi as string, + firstBundledDocument.document.openapi as string + ) + ) { + throw new Error( + `OpenAPI specs must use the same OpenAPI version, encountered ${chalk.blue( + bundledDocuments[i].document.openapi + )} at ${chalk.bold(bundledDocuments[i].absolutePath)} does not match ${chalk.blue( + firstBundledDocument.document.openapi + )} at ${chalk.bold(firstBundledDocument.absolutePath)}` + ); + } + } + + const version = firstBundledDocument.document.openapi as string; + + // Automatically promote to the recent OAS 3.0 version which is 3.0.3 + // 3.0.3 is the version used in the specification https://swagger.io/specification/v3/ + return version < '3.0.3' ? '3.0.3' : version; +} + +/** + * Tells if versions are equal by comparing only major and minor OAS version parts + */ +function areOasVersionsEqual(versionA: string, versionB: string): boolean { + // versionA.substring(0, 3) results in `3.0` or `3.1` + return versionA.substring(0, 3) === versionB.substring(0, 3); +} diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_paths.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_paths.ts new file mode 100644 index 0000000000000..1d541b5bb513e --- /dev/null +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_paths.ts @@ -0,0 +1,159 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import chalk from 'chalk'; +import { OpenAPIV3 } from 'openapi-types'; +import { BundledDocument } from '../bundle_document'; + +export function mergePaths(bundledDocuments: BundledDocument[]): OpenAPIV3.PathsObject { + const mergedPaths: Record = {}; + + for (const { absolutePath, document } of bundledDocuments) { + if (!document.paths) { + continue; + } + + const pathsObject = document.paths as Record; + + for (const path of Object.keys(pathsObject)) { + if (!mergedPaths[path]) { + mergedPaths[path] = {}; + } + + const sourcePathItem = pathsObject[path]; + const mergedPathItem = mergedPaths[path]; + + try { + mergeOptionalPrimitiveValue('summary', sourcePathItem, mergedPathItem); + } catch { + throw new Error( + `❌ Unable to bundle ${chalk.bold(absolutePath)} since ${chalk.bold( + `paths.${path}.summary` + )}'s value ${chalk.blue( + sourcePathItem.summary + )} doesn't match to already encountered ${chalk.magenta(mergedPathItem.summary)}.` + ); + } + + try { + mergeOptionalPrimitiveValue('description', sourcePathItem, mergedPathItem); + } catch { + throw new Error( + `❌ Unable to bundle ${chalk.bold(absolutePath)} since ${chalk.bold( + `paths.${path}.description` + )}'s value ${chalk.blue( + sourcePathItem.description + )} doesn't match to already encountered ${chalk.magenta(mergedPathItem.description)}.` + ); + } + + try { + mergeOperations(sourcePathItem, mergedPathItem); + } catch (e) { + throw new Error( + `❌ Unable to bundle ${chalk.bold(absolutePath)} since ${chalk.bold( + `paths.${path}.${e.message}` + )}'s definition is duplicated and differs from previously encountered.` + ); + } + + try { + mergeParameters(sourcePathItem, mergedPathItem); + } catch (e) { + throw new Error( + `❌ Unable to bundle ${chalk.bold(absolutePath)} since ${chalk.bold( + `paths.${path}.parameters.[${e.message}]` + )}'s definition is duplicated and differs from previously encountered.` + ); + } + } + } + + return mergedPaths; +} + +const KNOWN_HTTP_METHODS = [ + OpenAPIV3.HttpMethods.HEAD, + OpenAPIV3.HttpMethods.GET, + OpenAPIV3.HttpMethods.POST, + OpenAPIV3.HttpMethods.PATCH, + OpenAPIV3.HttpMethods.PUT, + OpenAPIV3.HttpMethods.OPTIONS, + OpenAPIV3.HttpMethods.DELETE, + OpenAPIV3.HttpMethods.TRACE, +]; + +function mergeOperations( + sourcePathItem: OpenAPIV3.PathItemObject, + mergedPathItem: OpenAPIV3.PathItemObject +) { + for (const httpMethod of KNOWN_HTTP_METHODS) { + if (!sourcePathItem[httpMethod]) { + continue; + } + + if (mergedPathItem[httpMethod]) { + throw new Error(httpMethod); + } + + mergedPathItem[httpMethod] = sourcePathItem[httpMethod]; + } +} + +function mergeOptionalPrimitiveValue( + fieldName: FieldName, + source: { [field in FieldName]?: unknown }, + merged: { [field in FieldName]?: unknown } +): void { + if (!source[fieldName]) { + return; + } + + if (source[fieldName] && !merged[fieldName]) { + merged[fieldName] = source[fieldName]; + } + + if (source[fieldName] !== merged[fieldName]) { + throw new Error(`${fieldName} merge conflict`); + } +} + +function mergeParameters( + sourcePathItem: OpenAPIV3.PathItemObject, + mergedPathItem: OpenAPIV3.PathItemObject +): void { + if (!sourcePathItem.parameters) { + return; + } + + if (!mergedPathItem.parameters) { + mergedPathItem.parameters = []; + } + + for (const sourceParameter of sourcePathItem.parameters) { + if ('$ref' in sourceParameter) { + const existing = mergedPathItem.parameters.find( + (x) => '$ref' in x && x.$ref === sourceParameter.$ref + ); + + if (existing) { + continue; + } + } else { + const existing = mergedPathItem.parameters.find( + (x) => !('$ref' in x) && x.name === sourceParameter.name && x.in === sourceParameter.in + ); + + if (existing) { + throw new Error(`{ "name": "${sourceParameter.name}", "in": "${sourceParameter.in}" }`); + } + } + + mergedPathItem.parameters.push(sourceParameter); + } +} diff --git a/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_shared_components.ts b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_shared_components.ts new file mode 100644 index 0000000000000..72f55645fa717 --- /dev/null +++ b/packages/kbn-openapi-bundler/src/bundler/merge_documents/merge_shared_components.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 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { OpenAPIV3 } from 'openapi-types'; +import deepEqual from 'fast-deep-equal'; +import chalk from 'chalk'; +import { insertRefByPointer } from '../../utils/insert_by_json_pointer'; +import { ResolvedRef } from '../types'; +import { BundledDocument } from '../bundle_document'; + +export function mergeSharedComponents( + bundledDocuments: BundledDocument[] +): OpenAPIV3.ComponentsObject { + const componentsMap = new Map(); + const mergedComponents: Record = {}; + + for (const bundledDocument of bundledDocuments) { + mergeRefsToMap(bundledDocument.bundledRefs, componentsMap); + } + + for (const resolvedRef of componentsMap.values()) { + insertRefByPointer(resolvedRef.pointer, resolvedRef.refNode, mergedComponents); + } + + return mergedComponents; +} + +function mergeRefsToMap(bundledRefs: ResolvedRef[], componentsMap: Map): void { + for (const bundledRef of bundledRefs) { + const existingRef = componentsMap.get(bundledRef.pointer); + + if (!existingRef) { + componentsMap.set(bundledRef.pointer, bundledRef); + continue; + } + + if (deepEqual(existingRef.refNode, bundledRef.refNode)) { + continue; + } + + throw new Error( + `❌ Unable to bundle documents due to conflicts in references. Schema ${chalk.yellow( + bundledRef.pointer + )} is defined in ${chalk.blue(existingRef.absolutePath)} and in ${chalk.magenta( + bundledRef.absolutePath + )} but has not matching definitions.` + ); + } +} diff --git a/packages/kbn-openapi-bundler/src/bundler/process_document.test.ts b/packages/kbn-openapi-bundler/src/bundler/process_document.test.ts index d78a4ce515b65..fd6e73d4272c6 100644 --- a/packages/kbn-openapi-bundler/src/bundler/process_document.test.ts +++ b/packages/kbn-openapi-bundler/src/bundler/process_document.test.ts @@ -19,13 +19,13 @@ describe('processDocument', () => { document: {} as Document, }; const calls: string[] = []; - const processor1 = { - leave() { + const processor1: DocumentNodeProcessor = { + onNodeLeave() { calls.push('processor1'); }, }; - const processor2 = { - leave() { + const processor2: DocumentNodeProcessor = { + onNodeLeave() { calls.push('processor2'); }, }; @@ -46,14 +46,17 @@ describe('processDocument', () => { const calls: string[] = []; const refResolver = new RefResolver(); const processor: DocumentNodeProcessor = { - enter(node) { + onNodeEnter(node) { calls.push(`enter - ${(node as NodeWithId).id}`); + }, + shouldRemove(node) { + calls.push(`shouldRemove - ${(node as NodeWithId).id}`); return false; }, - ref(node) { + onRefNodeLeave(node) { calls.push(`ref - ${(node as NodeWithId).id}`); }, - leave(node) { + onNodeLeave(node) { calls.push(`leave - ${(node as NodeWithId).id}`); }, }; @@ -82,8 +85,11 @@ describe('processDocument', () => { ); expect(calls).toEqual([ + 'shouldRemove - root', 'enter - root', + 'shouldRemove - t1', 'enter - t1', + 'shouldRemove - TestRef', 'enter - TestRef', 'leave - TestRef', 'ref - t1', @@ -92,7 +98,7 @@ describe('processDocument', () => { ]); }); - it('removes a node after "enter" callback returned true', async () => { + it('removes a node after "shouldRemove" callback returned true', async () => { const nodeToRemove = { id: 't2', foo: 'bar', @@ -104,7 +110,7 @@ describe('processDocument', () => { t2: nodeToRemove, }; const removeNodeProcessor: DocumentNodeProcessor = { - enter(node) { + shouldRemove(node) { return node === nodeToRemove; }, }; diff --git a/packages/kbn-openapi-bundler/src/bundler/process_document.ts b/packages/kbn-openapi-bundler/src/bundler/process_document.ts index 1efe64b87b4ed..29344fa4aa7c5 100644 --- a/packages/kbn-openapi-bundler/src/bundler/process_document.ts +++ b/packages/kbn-openapi-bundler/src/bundler/process_document.ts @@ -67,11 +67,13 @@ export async function processDocument( traverseItem.visitedDocumentNodes.add(traverseItem.node); - if (shouldSkipNode(traverseItem, processors)) { + if (shouldRemoveSubTree(traverseItem, processors)) { removeNode(traverseItem); continue; } + applyEnterProcessors(traverseItem, processors); + postOrderTraversalStack.push(traverseItem); if (isRefNode(traverseItem.node)) { @@ -144,14 +146,14 @@ export async function processDocument( // If ref has been inlined by one of the processors it's not a ref node anymore // so we can skip the following processors if (isRefNode(traverseItem.node) && traverseItem.resolvedRef) { - processor.ref?.( + processor.onRefNodeLeave?.( traverseItem.node as RefNode, traverseItem.resolvedRef, traverseItem.context ); } - processor.leave?.(traverseItem.node, traverseItem.context); + processor.onNodeLeave?.(traverseItem.node, traverseItem.context); } } } @@ -165,9 +167,28 @@ export function isRefNode(node: DocumentNode): node is { $ref: string } { return isPlainObject(node) && '$ref' in node; } -function shouldSkipNode(traverseItem: TraverseItem, processors: DocumentNodeProcessor[]): boolean { - return processors?.some((p) => - p.enter?.(traverseItem.node, { +function applyEnterProcessors( + traverseItem: TraverseItem, + processors: DocumentNodeProcessor[] +): void { + for (const processor of processors) { + processor.onNodeEnter?.(traverseItem.node, { + ...traverseItem.context, + parentNode: traverseItem.parentNode, + parentKey: traverseItem.parentKey, + }); + } +} + +/** + * Removes a node with its subtree + */ +function shouldRemoveSubTree( + traverseItem: TraverseItem, + processors: DocumentNodeProcessor[] +): boolean { + return processors.some((p) => + p.shouldRemove?.(traverseItem.node, { ...traverseItem.context, parentNode: traverseItem.parentNode, parentKey: traverseItem.parentKey, diff --git a/packages/kbn-openapi-bundler/src/bundler/types.ts b/packages/kbn-openapi-bundler/src/bundler/types.ts index 06aa533c9122a..fa8a7f3c83120 100644 --- a/packages/kbn-openapi-bundler/src/bundler/types.ts +++ b/packages/kbn-openapi-bundler/src/bundler/types.ts @@ -94,41 +94,70 @@ export type TraverseDocumentEntryContext = TraverseDocumentContext & { }; /** - * Entry processor controls when a node should be omitted from the result document. + * Should remove processor controls whether a node and all its descendants + * should be omitted from the further processing and result document. + * + * When result is + * + * - `true` - omit the node + * - `false` - keep the node * - * When result is `true` - omit the node. */ -export type EntryProcessorFn = ( +export type ShouldRemoveNodeProcessorFn = ( node: Readonly, context: TraverseDocumentEntryContext ) => boolean; -export type LeaveProcessorFn = (node: DocumentNode, context: TraverseDocumentContext) => void; +export type OnNodeEntryProcessorFn = ( + node: Readonly, + context: TraverseDocumentEntryContext +) => void; + +export type OnNodeLeaveProcessorFn = (node: DocumentNode, context: TraverseDocumentContext) => void; -export type RefProcessorFn = ( +export type OnRefNodeLeaveProcessorFn = ( node: RefNode, resolvedRef: ResolvedRef, context: TraverseDocumentContext ) => void; /** + * OpenAPI tree is traversed in two phases + * + * 1. Diving from root to leaves. + * Allows to analyze unprocessed nodes and calculate any metrics if necessary. + * + * 2. Post order traversal from leaves to root. + * Mostly to transform the OpenAPI document. + * * Document or document node processor gives flexibility in modifying OpenAPI specs and/or collect some metrics. - * For convenience it defined handlers invoked upon action or specific node type. + * For convenience there are following node processors supported + * + * 1st phase + * + * - `onNodeEnter` - Callback function is invoked at the first phase (diving from root to leaves) while + * traversing the document. It can be considered in a similar way events dive in DOM during + * capture phase. In the other words it means entering a subtree. It allows to analyze + * unprocessed nodes. * - * Currently the following node types supported + * - `shouldRemove` - Callback function is invoked at the first phase (diving from root to leaves) while + * traversing the document. It controls whether the node will be excluded from further processing + * and the result document eventually. Returning `true` excluded the node while returning `false` + * passes the node untouched. * - * - ref - Callback function is invoked upon leaving ref node (a node having `$ref` key) + * 2nd phase * - * and the following actions + * - `onNodeLeave` - Callback function is invoked upon leaving any type of node. It give an opportunity to + * modify the document like inline references or remove unwanted properties. It can be considered + * in a similar way event bubble in DOM during bubble phase. In the other words it means leaving + * a subtree. * - * - enter - Callback function is invoked upon entering any type of node element including ref nodes. It doesn't allow - * to modify node's content but provides an ability to remove the element by returning `true`. + * - `onRefNodeLeave` - Callback function is invoked upon leaving a reference node (a node having `$ref` key) * - * - leave - Callback function is invoked upon leaving any type of node. It give an opportunity to modify the document like - * dereference refs or remove unwanted properties. */ export interface DocumentNodeProcessor { - enter?: EntryProcessorFn; - leave?: LeaveProcessorFn; - ref?: RefProcessorFn; + shouldRemove?: ShouldRemoveNodeProcessorFn; + onNodeEnter?: OnNodeEntryProcessorFn; + onNodeLeave?: OnNodeLeaveProcessorFn; + onRefNodeLeave?: OnRefNodeLeaveProcessorFn; } diff --git a/packages/kbn-openapi-bundler/src/openapi_bundler.test.ts b/packages/kbn-openapi-bundler/src/openapi_bundler.test.ts deleted file mode 100644 index eaed80727dee8..0000000000000 --- a/packages/kbn-openapi-bundler/src/openapi_bundler.test.ts +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0 and the Server Side Public License, v 1; you may not use this file except - * in compliance with, at your election, the Elastic License 2.0 or the Server - * Side Public License, v 1. - */ - -import { existsSync, rmSync } from 'fs'; -import { basename, join } from 'path'; -import { bundle } from './openapi_bundler'; -import { readYamlDocument } from './utils/read_yaml_document'; - -const rootPath = join(__dirname, '__test__'); -const targetAbsoluteFilePath = join(rootPath, 'bundled.yaml'); - -describe('OpenAPI Bundler', () => { - afterEach(() => { - removeTargetFile(); - }); - - it('bundles two simple specs', async () => { - await bundleFolder('two_simple_specs'); - await expectBundleToMatchFile('two_simple_specs', 'expected.yaml'); - }); - - it('bundles one file with a local reference', async () => { - await bundleFolder('spec_with_local_ref'); - await expectBundleToMatchFile('spec_with_local_ref', 'expected.yaml'); - }); - - it('bundles one file with an external reference', async () => { - await bundleFolder('spec_with_external_ref'); - await expectBundleToMatchFile('spec_with_external_ref', 'expected.yaml'); - }); - - it('bundles files with external references', async () => { - await bundleFolder('two_specs_with_external_ref'); - await expectBundleToMatchFile('two_specs_with_external_ref', 'expected.yaml'); - }); - - // Fails because `writeYamlDocument()` has `noRefs: true` setting - // it('bundles recursive spec', async () => { - // await bundleFolder('recursive_spec'); - // await expectBundleToMatchFile('recursive_spec', 'expected.yaml'); - // }); - - it('bundles specs with recursive references', async () => { - await bundleFolder('recursive_ref_specs'); - await expectBundleToMatchFile('recursive_ref_specs', 'expected.yaml'); - }); - - it('bundles spec with a self-recursive reference', async () => { - await bundleFolder('self_recursive_ref'); - await expectBundleToMatchFile('self_recursive_ref', 'expected.yaml'); - }); - - it('bundles one endpoint with different versions', async () => { - await bundleFolder('different_endpoint_versions'); - await expectBundleToMatchFile('different_endpoint_versions', 'expected.yaml'); - }); - - it('bundles spec with different OpenAPI versions', async () => { - await bundleFolder('different_openapi_versions'); - await expectBundleToMatchFile('different_openapi_versions', 'expected.yaml'); - }); - - it('bundles conflicting but equal references', async () => { - await bundleFolder('conflicting_but_equal_refs_in_different_specs'); - await expectBundleToMatchFile('conflicting_but_equal_refs_in_different_specs', 'expected.yaml'); - }); - - it('fails to bundle conflicting references encountered in separate specs', async () => { - await expectBundlingError( - 'conflicting_refs_in_different_specs', - /\/components\/schemas\/ConflictTestSchema/ - ); - }); - - describe('x-modify', () => { - it('makes properties in an object node partial', async () => { - await bundleFolder('modify_partial_node'); - await expectBundleToMatchFile('modify_partial_node', 'expected.yaml'); - }); - - it('makes properties in a referenced object node partial', async () => { - await bundleFolder('modify_partial_ref'); - await expectBundleToMatchFile('modify_partial_ref', 'expected.yaml'); - }); - - it('makes properties in an object node required', async () => { - await bundleFolder('modify_required_node'); - await expectBundleToMatchFile('modify_required_node', 'expected.yaml'); - }); - - it('makes properties in a referenced object node required', async () => { - await bundleFolder('modify_required_ref'); - await expectBundleToMatchFile('modify_required_ref', 'expected.yaml'); - }); - }); - - describe('x-inline', () => { - it('inlines a reference', async () => { - await bundleFolder('inline_ref'); - await expectBundleToMatchFile('inline_ref', 'expected.yaml'); - }); - }); - - describe('skip internal', () => { - it('skips nodes with x-internal property', async () => { - await bundleFolder('skip_internal'); - await expectBundleToMatchFile('skip_internal', 'expected.yaml'); - }); - - it('skips endpoints starting with /internal', async () => { - await bundleFolder('skip_internal_endpoint'); - await expectBundleToMatchFile('skip_internal_endpoint', 'expected.yaml'); - }); - }); -}); - -async function bundleFolder(folderName: string): Promise { - await expect( - bundle({ - rootDir: join(rootPath, folderName), - sourceGlob: '*.schema.yaml', - outputFilePath: join('..', basename(targetAbsoluteFilePath)), - }) - ).resolves.toBeUndefined(); -} - -async function expectBundlingError( - folderName: string, - error: string | RegExp | jest.Constructable | Error | undefined -): Promise { - return await expect( - bundle({ - rootDir: join(rootPath, folderName), - sourceGlob: '*.schema.yaml', - outputFilePath: join('..', basename(targetAbsoluteFilePath)), - }) - ).rejects.toThrowError(error); -} - -async function expectBundleToMatchFile( - folderName: string, - expectedFileName: string -): Promise { - expect(existsSync(targetAbsoluteFilePath)).toBeTruthy(); - - const bundledSpec = await readYamlDocument(targetAbsoluteFilePath); - const expectedAbsoluteFilePath = join(rootPath, folderName, expectedFileName); - const expectedSpec = await readYamlDocument(expectedAbsoluteFilePath); - - expect(bundledSpec).toEqual(expectedSpec); -} - -function removeTargetFile(): void { - if (existsSync(targetAbsoluteFilePath)) { - rmSync(targetAbsoluteFilePath, { force: true }); - } -} diff --git a/packages/kbn-openapi-bundler/src/openapi_bundler.ts b/packages/kbn-openapi-bundler/src/openapi_bundler.ts index 451b0ff700bae..554758b622995 100644 --- a/packages/kbn-openapi-bundler/src/openapi_bundler.ts +++ b/packages/kbn-openapi-bundler/src/openapi_bundler.ts @@ -7,43 +7,75 @@ */ import chalk from 'chalk'; +import { isUndefined, omitBy } from 'lodash'; +import { OpenAPIV3 } from 'openapi-types'; import globby from 'globby'; -import { basename, dirname, join, resolve } from 'path'; +import { basename, dirname, resolve } from 'path'; import { BundledDocument, bundleDocument, SkipException } from './bundler/bundle_document'; import { mergeDocuments } from './bundler/merge_documents'; import { removeFilesByGlob } from './utils/remove_files_by_glob'; import { logger } from './logger'; import { writeYamlDocument } from './utils/write_yaml_document'; +import { createBlankOpenApiDocument } from './bundler/merge_documents/create_blank_oas_document'; export interface BundlerConfig { - rootDir: string; sourceGlob: string; outputFilePath: string; + specInfo?: Omit, 'version'>; } -export const bundle = async (config: BundlerConfig) => { - const { - rootDir, - sourceGlob, - outputFilePath: relativeOutputFilePath = 'target/openapi/bundled.schema.yaml', - } = config; - +export const bundle = async ({ + sourceGlob, + outputFilePath = 'bundled-{version}.schema.yaml', + specInfo, +}: BundlerConfig) => { logger.debug(chalk.bold(`Bundling API route schemas`)); - logger.debug(chalk.bold(`Working directory: ${chalk.underline(rootDir)}`)); - logger.debug(`👀 Searching for source files`); + logger.debug(`👀 Searching for source files in ${chalk.underline(sourceGlob)}`); - const outputFilePath = join(rootDir, relativeOutputFilePath); - const sourceFilesGlob = resolve(rootDir, sourceGlob); + const sourceFilesGlob = resolve(sourceGlob); const schemaFilePaths = await globby([sourceFilesGlob]); logger.info(`🕵️‍♀️ Found ${schemaFilePaths.length} schemas`); logSchemas(schemaFilePaths); logger.info(`🧹 Cleaning up any previously generated artifacts`); - await removeFilesByGlob(dirname(outputFilePath), basename(outputFilePath)); + await removeFilesByGlob( + dirname(outputFilePath), + basename(outputFilePath.replace('{version}', '*')) + ); logger.debug(`Processing schemas...`); + const resolvedDocuments = await resolveDocuments(schemaFilePaths); + + logger.success(`Processed ${resolvedDocuments.length} schemas`); + + const blankOasFactory = (oasVersion: string, apiVersion: string) => + createBlankOpenApiDocument(oasVersion, { + version: apiVersion, + title: specInfo?.title ?? 'Bundled OpenAPI specs', + ...omitBy( + { + description: specInfo?.description, + termsOfService: specInfo?.termsOfService, + contact: specInfo?.contact, + license: specInfo?.license, + }, + isUndefined + ), + }); + const resultDocumentsMap = await mergeDocuments(resolvedDocuments, blankOasFactory); + + await writeDocuments(resultDocumentsMap, outputFilePath); +}; + +function logSchemas(schemaFilePaths: string[]): void { + for (const filePath of schemaFilePaths) { + logger.debug(`Found OpenAPI spec ${chalk.bold(filePath)}`); + } +} + +async function resolveDocuments(schemaFilePaths: string[]): Promise { const resolvedDocuments = await Promise.all( schemaFilePaths.map(async (schemaFilePath) => { try { @@ -62,26 +94,9 @@ export const bundle = async (config: BundlerConfig) => { } }) ); - const processedDocuments = filterOutSkippedDocuments(resolvedDocuments); - logger.success(`Processed ${processedDocuments.length} schemas`); - - const resultDocument = await mergeDocuments(processedDocuments); - - try { - await writeYamlDocument(outputFilePath, resultDocument); - - logger.success(`📖 Wrote all bundled OpenAPI specs to ${chalk.bold(outputFilePath)}`); - } catch (e) { - logger.error(`Unable to save bundled document to ${chalk.bold(outputFilePath)}: ${e.message}`); - } -}; - -function logSchemas(schemaFilePaths: string[]): void { - for (const filePath of schemaFilePaths) { - logger.debug(`Found OpenAPI spec ${chalk.bold(filePath)}`); - } + return processedDocuments; } function filterOutSkippedDocuments( @@ -99,3 +114,34 @@ function filterOutSkippedDocuments( return processedDocuments; } + +async function writeDocuments( + resultDocumentsMap: Map, + outputFilePath: string +): Promise { + for (const [version, document] of resultDocumentsMap.entries()) { + const versionedOutputFilePath = getVersionedOutputFilePath(outputFilePath, version); + + try { + await writeYamlDocument(versionedOutputFilePath, document); + + logger.success(`📖 Wrote bundled OpenAPI specs to ${chalk.bold(versionedOutputFilePath)}`); + } catch (e) { + logger.error( + `Unable to save bundled document to ${chalk.bold(versionedOutputFilePath)}: ${e.message}` + ); + } + } +} + +function getVersionedOutputFilePath(outputFilePath: string, version: string): string { + const hasVersionPlaceholder = outputFilePath.indexOf('{version}') > -1; + + if (hasVersionPlaceholder) { + return outputFilePath.replace('{version}', version); + } + + const filename = basename(outputFilePath); + + return outputFilePath.replace(filename, `${version}-${filename}`); +} diff --git a/packages/kbn-openapi-bundler/src/utils/insert_by_json_pointer.ts b/packages/kbn-openapi-bundler/src/utils/insert_by_json_pointer.ts index 8538102305edc..161f548ad2cf9 100644 --- a/packages/kbn-openapi-bundler/src/utils/insert_by_json_pointer.ts +++ b/packages/kbn-openapi-bundler/src/utils/insert_by_json_pointer.ts @@ -10,16 +10,23 @@ * Inserts `data` into the location specified by pointer in the `document`. * * @param pointer [JSON Pointer](https://datatracker.ietf.org/doc/html/rfc6901) - * @param data An object to insert - * @param document A document to insert to + * @param component Component data to insert + * @param componentsObject Components object to insert to */ export function insertRefByPointer( pointer: string, - data: unknown, - document: Record + component: unknown, + componentsObject: Record ): void { + if (!pointer.startsWith('/components')) { + throw new Error( + `insertRefByPointer expected a pointer starting with "/components" but got ${pointer}` + ); + } + + // splitting '/components' by '/' gives ['', 'components'] which should be skipped const segments = pointer.split('/').slice(2); - let target = document; + let target = componentsObject; while (segments.length > 0) { const segment = segments.shift() as string; @@ -31,5 +38,5 @@ export function insertRefByPointer( target = target[segment] as Record; } - Object.assign(target, data); + Object.assign(target, component); } diff --git a/packages/kbn-openapi-bundler/src/utils/write_yaml_document.ts b/packages/kbn-openapi-bundler/src/utils/write_yaml_document.ts index bdcd783e1a214..45ad2d5987bad 100644 --- a/packages/kbn-openapi-bundler/src/utils/write_yaml_document.ts +++ b/packages/kbn-openapi-bundler/src/utils/write_yaml_document.ts @@ -12,7 +12,7 @@ import { dirname } from 'path'; export async function writeYamlDocument(filePath: string, document: unknown): Promise { try { - const yaml = dump(document, { noRefs: true }); + const yaml = stringifyToYaml(document); await fs.mkdir(dirname(filePath), { recursive: true }); await fs.writeFile(filePath, yaml); @@ -20,3 +20,21 @@ export async function writeYamlDocument(filePath: string, document: unknown): Pr throw new Error(`Unable to write bundled yaml: ${e.message}`, { cause: e }); } } + +function stringifyToYaml(document: unknown): string { + try { + // Disable YAML Anchors https://yaml.org/spec/1.2.2/#3222-anchors-and-aliases + // It makes YAML much more human readable + return dump(document, { noRefs: true }); + } catch (e) { + // RangeError might happened because of stack overflow + // due to circular references in the document + // since YAML Anchors are disabled + if (e instanceof RangeError) { + // Try to stringify with YAML Anchors enabled + return dump(document, { noRefs: false }); + } + + throw e; + } +} diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.schema.yaml index aad2d49032856..cb67a3686822b 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.schema.yaml @@ -13,6 +13,7 @@ servers: paths: /engine/settings: + x-internal: true get: operationId: RiskEngineSettingsGet summary: Get the settings of the Risk Engine @@ -23,11 +24,11 @@ paths: application/json: schema: $ref: '#/components/schemas/RiskEngineSettingsResponse' - + components: schemas: RiskEngineSettingsResponse: type: object properties: range: - $ref: '../common/common.schema.yaml#/components/schemas/DateRange' \ No newline at end of file + $ref: '../common/common.schema.yaml#/components/schemas/DateRange' diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml index 1229cf0fb6615..d776f6363a01e 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml @@ -15,6 +15,7 @@ servers: paths: /api/risk_scores/calculation/entity: + x-internal: true post: summary: Trigger calculation of Risk Scores for an entity description: Calculates and persists Risk Scores for an entity, returning the calculated risk score. @@ -44,7 +45,7 @@ components: - identifier_type properties: identifier: - description: Used to identify the entity. + description: Used to identify the entity. type: string example: 'my.host' identifier_type: @@ -56,11 +57,11 @@ components: description: If 'wait_for' the request will wait for the index refresh. RiskScoresEntityCalculationResponse: - type: object - required: - - success - properties: - success: - type: boolean - score: - $ref: './common.schema.yaml#/components/schemas/RiskScore' + type: object + required: + - success + properties: + success: + type: boolean + score: + $ref: './common.schema.yaml#/components/schemas/RiskScore' diff --git a/x-pack/plugins/security_solution/scripts/openapi/bundle.js b/x-pack/plugins/security_solution/scripts/openapi/bundle.js index 6cfa1507ea9ee..82280d0ef0ebf 100644 --- a/x-pack/plugins/security_solution/scripts/openapi/bundle.js +++ b/x-pack/plugins/security_solution/scripts/openapi/bundle.js @@ -7,12 +7,14 @@ require('../../../../../src/setup_node_env'); const { bundle } = require('@kbn/openapi-bundler'); -const { resolve } = require('path'); +const { join, resolve } = require('path'); const SECURITY_SOLUTION_ROOT = resolve(__dirname, '../..'); bundle({ - rootDir: SECURITY_SOLUTION_ROOT, - sourceGlob: './common/api/**/*.schema.yaml', - outputFilePath: './target/openapi/security_solution.bundled.schema.yaml', + sourceGlob: join(SECURITY_SOLUTION_ROOT, 'common/api/**/*.schema.yaml'), + outputFilePath: join( + SECURITY_SOLUTION_ROOT, + 'target/openapi/security_solution-{version}.bundled.schema.yaml' + ), }); From db48aa03b45e25151705df61d556ff3f8e30351d Mon Sep 17 00:00:00 2001 From: Konrad Szwarc Date: Wed, 8 May 2024 14:17:10 +0200 Subject: [PATCH 22/34] [EDR Workflows][E2E] Unskip artifacts FTR (#182787) closes https://github.com/elastic/kibana/issues/180493 I've noticed locally that the modal where we input the blocklist entries can sometimes get rerendered without any apparent reason. So, I've added a retry mechanism that, in case the input's value is not present, attempts to fill it out again. Failure example: https://buildkite.com/elastic/kibana-on-merge/builds/43629#018ed329-76ee-4512-aef6-5583b2cf830e Flaky test runner: x25 - https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5871 x75 - https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5873 --- .../apps/integrations/artifact_entries_list.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/x-pack/test/security_solution_endpoint/apps/integrations/artifact_entries_list.ts b/x-pack/test/security_solution_endpoint/apps/integrations/artifact_entries_list.ts index fc179681388ae..58ffde0d7611f 100644 --- a/x-pack/test/security_solution_endpoint/apps/integrations/artifact_entries_list.ts +++ b/x-pack/test/security_solution_endpoint/apps/integrations/artifact_entries_list.ts @@ -54,7 +54,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('For each artifact list under management', function () { // It's flaky only in Serverless - targetTags(this, ['@ess', '@skipInServerless']); + targetTags(this, ['@ess', '@serverless']); this.timeout(60_000 * 5); let indexedData: IndexedHostsAndAlertsResponse; @@ -155,10 +155,13 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { } else if (formAction.type === 'click') { await testSubjects.click(formAction.selector); } else if (formAction.type === 'input') { - await testSubjects.setValue( - formAction.selector, - (formAction.value || '') + (suffix ? suffix : '') - ); + const newValue = (formAction.value || '') + (suffix ? suffix : ''); + await testSubjects.setValue(formAction.selector, newValue); + await testSubjects.getAttribute(formAction.selector, 'value').then((value) => { + if (value !== newValue) { + return testSubjects.setValue(formAction.selector, newValue); + } + }); } else if (formAction.type === 'clear') { await ( await (await testSubjects.find(formAction.selector)).findByCssSelector('button') From e9c3164da80d4720b7fe5910f1935bdf25c5834d Mon Sep 17 00:00:00 2001 From: Dima Arnautov Date: Wed, 8 May 2024 14:57:50 +0200 Subject: [PATCH 23/34] [ML] Anomaly swim lane - add / edit UX improvements (#182586) ## Summary Part of https://github.com/elastic/kibana/issues/178375 - Updates the anomaly swim lane add / edit flow with a single flyout. - Replaces custom edit action with the default one - Improves error handling, preventing an observable from completion on HTTP error image ### Checklist - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [x] Any UI touched in this PR is usable by keyboard only (learn more about [keyboard accessibility](https://webaim.org/techniques/keyboard/)) - [x] Any UI touched in this PR does not create any new axe failures (run axe in browser: [FF](https://addons.mozilla.org/en-US/firefox/addon/axe-devtools/), [Chrome](https://chrome.google.com/webstore/detail/axe-web-accessibility-tes/lhdoppojpmngadmnindnejefpokejbdd?hl=en-US)) - [ ] 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 renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --- .../ml/public/alerting/job_selector.tsx | 2 +- .../anomaly_swimlane_embeddable_factory.tsx | 25 +++ .../anomaly_swimlane_initializer.tsx | 170 +++++++++++++----- .../anomaly_swimlane_setup_flyout.tsx | 78 ++++---- .../initialize_swim_lane_data_fetcher.ts | 17 +- .../embeddables/anomaly_swimlane/types.ts | 2 + .../embeddables/common/get_jobs_observable.ts | 16 +- .../ml/public/ui_actions/create_swim_lane.tsx | 7 +- .../ui_actions/edit_swimlane_panel_action.tsx | 70 -------- x-pack/plugins/ml/public/ui_actions/index.ts | 6 +- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - 13 files changed, 223 insertions(+), 173 deletions(-) delete mode 100644 x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx diff --git a/x-pack/plugins/ml/public/alerting/job_selector.tsx b/x-pack/plugins/ml/public/alerting/job_selector.tsx index bd28a15800cb3..5e1835ebfdfe1 100644 --- a/x-pack/plugins/ml/public/alerting/job_selector.tsx +++ b/x-pack/plugins/ml/public/alerting/job_selector.tsx @@ -29,7 +29,7 @@ export interface JobSelectorControlProps { /** * Validation is handled by alerting framework */ - errors: string[]; + errors?: string[]; /** Enables multiple selection of jobs and groups */ multiSelect?: boolean; label?: ReactNode; diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx index 7306085b8d413..4b7e066d9416f 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx @@ -10,6 +10,7 @@ import { css } from '@emotion/react'; import type { StartServicesAccessor } from '@kbn/core/public'; import type { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; import type { TimeRange } from '@kbn/es-query'; +import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { useTimeBuckets } from '@kbn/ml-time-buckets'; @@ -138,6 +139,30 @@ export const getAnomalySwimLaneEmbeddableFactory = ( const api = buildApi( { + isEditingEnabled: () => true, + getTypeDisplayName: () => + i18n.translate('xpack.ml.swimlaneEmbeddable.typeDisplayName', { + defaultMessage: 'swim lane', + }), + onEdit: async () => { + try { + const { resolveAnomalySwimlaneUserInput } = await import( + './anomaly_swimlane_setup_flyout' + ); + + const result = await resolveAnomalySwimlaneUserInput( + { ...coreStartServices, ...pluginsStartServices }, + { + ...serializeTitles(), + ...serializeSwimLaneState(), + } + ); + + swimLaneControlsApi.updateUserInput(result); + } catch (e) { + return Promise.reject(); + } + }, ...titlesApi, ...timeRangeApi, ...swimLaneControlsApi, diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx index b4dd02be726a6..64c0d9db7b7b7 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_initializer.tsx @@ -5,53 +5,101 @@ * 2.0. */ -import type { FC } from 'react'; -import React, { useState } from 'react'; +import React, { type FC, useEffect, useRef, useState } from 'react'; import { EuiButton, EuiButtonEmpty, EuiButtonGroup, + EuiFieldText, + EuiFlexGroup, + EuiFlexItem, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, EuiForm, EuiFormRow, - EuiModalBody, - EuiModalFooter, - EuiModalHeader, - EuiModalHeaderTitle, EuiSelect, - EuiFieldText, - EuiModal, + EuiTitle, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; +import useMountedState from 'react-use/lib/useMountedState'; +import { useMlLink } from '../../application/contexts/kibana'; +import { ML_PAGES } from '../../../common/constants/locator'; +import type { MlApiServices } from '../../application/services/ml_api_service'; +import { extractInfluencers } from '../../../common/util/job_utils'; +import { JobSelectorControl } from '../../alerting/job_selector'; import type { SwimlaneType } from '../../application/explorer/explorer_constants'; -import { SWIMLANE_TYPE } from '../../application/explorer/explorer_constants'; -import type { AnomalySwimlaneEmbeddableUserInput, AnomalySwimLaneEmbeddableState } from '..'; +import { SWIMLANE_TYPE, VIEW_BY_JOB_LABEL } from '../../application/explorer/explorer_constants'; +import type { AnomalySwimLaneEmbeddableState, AnomalySwimlaneEmbeddableUserInput } from '..'; +import { getDefaultSwimlanePanelTitle } from './anomaly_swimlane_embeddable'; -export type ExplicitInput = Omit; +export type ExplicitInput = AnomalySwimlaneEmbeddableUserInput; export interface AnomalySwimlaneInitializerProps { - defaultTitle: string; - influencers: string[]; initialInput?: Partial< - Pick + Pick >; onCreate: (swimlaneProps: ExplicitInput) => void; onCancel: () => void; + adJobsApiService: MlApiServices['jobs']; } +const getJobSelectionErrors = (jobIds: string[]) => { + if (jobIds.length === 0) { + return [ + i18n.translate('xpack.ml.swimlaneEmbeddable.setupModal.jobSelectionRequiredError', { + defaultMessage: 'Job selection is required', + }), + ]; + } +}; + export const AnomalySwimlaneInitializer: FC = ({ - defaultTitle, - influencers, onCreate, onCancel, initialInput, + adJobsApiService, }) => { - const [panelTitle, setPanelTitle] = useState(defaultTitle); + const isMounted = useMountedState(); + + const titleManuallyChanged = useRef(!!initialInput?.title); + + const [jobIds, setJobIds] = useState(initialInput?.jobIds ?? []); + + const [influencers, setInfluencers] = useState([VIEW_BY_JOB_LABEL]); + + useEffect( + function updateInfluencers() { + async function fetchInfluencers() { + const jobs = await adJobsApiService.jobs(jobIds); + if (isMounted()) { + setInfluencers([...extractInfluencers(jobs), VIEW_BY_JOB_LABEL]); + } + } + + if (jobIds.length > 0) { + fetchInfluencers(); + } + }, + [adJobsApiService, isMounted, jobIds] + ); + + const [panelTitle, setPanelTitle] = useState(initialInput?.title ?? ''); const [swimlaneType, setSwimlaneType] = useState( initialInput?.swimlaneType ?? SWIMLANE_TYPE.OVERALL ); const [viewBySwimlaneFieldName, setViewBySwimlaneFieldName] = useState(initialInput?.viewBy); + useEffect( + function updateDefaultTitle() { + if (!titleManuallyChanged.current) { + setPanelTitle(getDefaultSwimlanePanelTitle(jobIds)); + } + }, + [initialInput?.title, jobIds] + ); + const swimlaneTypeOptions = [ { id: SWIMLANE_TYPE.OVERALL, @@ -76,30 +124,49 @@ export const AnomalySwimlaneInitializer: FC = ( const isPanelTitleValid = panelTitle.length > 0; + const jobIdsErrors = getJobSelectionErrors(jobIds); + const isFormValid = isPanelTitleValid && + !jobIdsErrors && (swimlaneType === SWIMLANE_TYPE.OVERALL || (swimlaneType === SWIMLANE_TYPE.VIEW_BY && !!viewBySwimlaneFieldName)); const resultInput = { + jobIds, panelTitle, swimlaneType, ...(viewBySwimlaneFieldName ? { viewBy: viewBySwimlaneFieldName } : {}), }; + const newJobUrl = useMlLink({ page: ML_PAGES.ANOMALY_DETECTION_CREATE_JOB }); + return ( - - - - - - + <> + + +

+ +

+
+
- + + { + setJobIds([...(update?.jobIds ?? []), ...(update?.groupIds ?? [])]); + }} + errors={jobIdsErrors} + /> + = ( /> } isInvalid={!isPanelTitleValid} + fullWidth > setPanelTitle(e.target.value)} + onChange={(e) => { + titleManuallyChanged.current = true; + setPanelTitle(e.target.value); + }} isInvalid={!isPanelTitleValid} + fullWidth /> @@ -125,6 +197,7 @@ export const AnomalySwimlaneInitializer: FC = ( defaultMessage="Swim lane type" /> } + fullWidth > = ( label={ } + fullWidth > = ( )} - + - - - - - - - - - -
+ + + + + + + + + + + + + + + ); }; diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx index 596da35f66d4c..56eaed3e9a271 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout.tsx @@ -8,53 +8,63 @@ import React from 'react'; import type { CoreStart } from '@kbn/core/public'; import { toMountPoint } from '@kbn/react-kibana-mount'; -import type { DataViewsContract } from '@kbn/data-views-plugin/public'; -import { extractInfluencers } from '../../../common/util/job_utils'; -import { VIEW_BY_JOB_LABEL } from '../../application/explorer/explorer_constants'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { distinctUntilChanged, from, skip, takeUntil } from 'rxjs'; +import { jobsApiProvider } from '../../application/services/ml_api_service/jobs'; import { AnomalySwimlaneInitializer } from './anomaly_swimlane_initializer'; -import { getDefaultSwimlanePanelTitle } from './anomaly_swimlane_embeddable'; import { HttpService } from '../../application/services/http_service'; -import type { AnomalySwimlaneEmbeddableUserInput, AnomalySwimLaneEmbeddableState } from '..'; -import { resolveJobSelection } from '../common/resolve_job_selection'; -import { mlApiServicesProvider } from '../../application/services/ml_api_service'; +import type { AnomalySwimLaneEmbeddableState, AnomalySwimlaneEmbeddableUserInput } from '..'; export async function resolveAnomalySwimlaneUserInput( coreStart: CoreStart, - dataViews: DataViewsContract, input?: Partial ): Promise { - const { http, overlays, ...startServices } = coreStart; - - const { getJobs } = mlApiServicesProvider(new HttpService(http)); + const { + http, + overlays, + application: { currentAppId$ }, + ...startServices + } = coreStart; return new Promise(async (resolve, reject) => { try { - const { jobIds } = await resolveJobSelection(coreStart, dataViews, input?.jobIds); - const title = input?.title ?? getDefaultSwimlanePanelTitle(jobIds); - const { jobs } = await getJobs({ jobId: jobIds.join(',') }); - const influencers = extractInfluencers(jobs); - influencers.push(VIEW_BY_JOB_LABEL); - const modalSession = overlays.openModal( + const adJobsApiService = jobsApiProvider(new HttpService(http)); + + const flyoutSession = overlays.openFlyout( toMountPoint( - { - modalSession.close(); - resolve({ - jobIds, - ...explicitInput, - }); - }} - onCancel={() => { - modalSession.close(); - reject(); - }} - />, + + { + flyoutSession.close(); + resolve(explicitInput); + }} + onCancel={() => { + flyoutSession.close(); + reject(); + }} + /> + , startServices - ) + ), + { + type: 'push', + ownFocus: true, + size: 's', + onClose: () => { + flyoutSession.close(); + reject(); + }, + } ); + + // Close the flyout when user navigates out of the current plugin + currentAppId$ + .pipe(skip(1), takeUntil(from(flyoutSession.onClose)), distinctUntilChanged()) + .subscribe(() => { + flyoutSession.close(); + }); } catch (error) { reject(error); } diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts index f10afe8e874c0..6946215b0c452 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts @@ -8,14 +8,15 @@ import type { estypes } from '@elastic/elasticsearch'; import type { TimeRange } from '@kbn/es-query'; import type { PublishesUnifiedSearch } from '@kbn/presentation-publishing'; -import type { Observable } from 'rxjs'; import { BehaviorSubject, catchError, combineLatest, debounceTime, + EMPTY, from, map, + type Observable, of, shareReplay, skipWhile, @@ -55,7 +56,9 @@ export const initializeSwimLaneDataFetcher = ( const selectedJobs$ = getJobsObservable( swimLaneApi.jobIds.pipe(map((jobIds) => ({ jobIds }))), anomalyDetectorService, - (error) => blockingError.next(error) + (error) => { + blockingError.next(error); + } ).pipe(shareReplay(1)); const swimLaneInput$ = combineLatest({ @@ -105,7 +108,7 @@ export const initializeSwimLaneDataFetcher = ( } catch (e) { // handle query syntax errors blockingError.next(e); - return of(undefined); + return EMPTY; } return from( @@ -146,12 +149,12 @@ export const initializeSwimLaneDataFetcher = ( ); } return of(overallSwimlaneData); + }), + catchError((error) => { + blockingError.next(error); + return EMPTY; }) ); - }), - catchError((error) => { - blockingError.next(error); - return of(undefined); }) ) .subscribe((data) => { diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/types.ts b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/types.ts index 9e24c02f49c2b..cde7ff1350687 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/types.ts +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/types.ts @@ -7,6 +7,7 @@ import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import type { + HasEditCapabilities, PublishesDataViews, PublishesUnifiedSearch, PublishesWritablePanelTitle, @@ -41,6 +42,7 @@ export type AnomalySwimLaneEmbeddableApi = MlEmbeddableBaseApi v.jobIds), distinctUntilChanged(isEqual), - switchMap((jobsIds) => anomalyDetectorService.getJobs$(jobsIds)), + switchMap((jobsIds) => + anomalyDetectorService.getJobs$(jobsIds).pipe( + catchError((e) => { + // Catch error to prevent the observable from completing + setErrorHandler(e.body ?? e); + return EMPTY; + }) + ) + ), map((jobs) => { const explorerJobs: ExplorerJob[] = jobs.map((job) => { const bucketSpan = parseInterval(job.analysis_config.bucket_span!); @@ -33,10 +41,6 @@ export function getJobsObservable( }; }); return explorerJobs; - }), - catchError((e) => { - setErrorHandler(e.body ?? e); - return of(undefined); }) ); } diff --git a/x-pack/plugins/ml/public/ui_actions/create_swim_lane.tsx b/x-pack/plugins/ml/public/ui_actions/create_swim_lane.tsx index 1bb54b776e140..a2acc14dbe7de 100644 --- a/x-pack/plugins/ml/public/ui_actions/create_swim_lane.tsx +++ b/x-pack/plugins/ml/public/ui_actions/create_swim_lane.tsx @@ -56,14 +56,17 @@ export function createAddSwimlanePanelAction( const presentationContainerParent = await parentApiIsCompatible(context.embeddable); if (!presentationContainerParent) throw new IncompatibleActionError(); - const [coreStart, deps] = await getStartServices(); + const [coreStart, pluginStart] = await getStartServices(); try { const { resolveAnomalySwimlaneUserInput } = await import( '../embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout' ); - const initialState = await resolveAnomalySwimlaneUserInput(coreStart, deps.data.dataViews); + const initialState = await resolveAnomalySwimlaneUserInput({ + ...coreStart, + ...pluginStart, + }); presentationContainerParent.addNewPanel({ panelType: ANOMALY_SWIMLANE_EMBEDDABLE_TYPE, diff --git a/x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx b/x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx deleted file mode 100644 index 3612446e8f5af..0000000000000 --- a/x-pack/plugins/ml/public/ui_actions/edit_swimlane_panel_action.tsx +++ /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 { i18n } from '@kbn/i18n'; -import type { EmbeddableApiContext } from '@kbn/presentation-publishing'; -import type { UiActionsActionDefinition } from '@kbn/ui-actions-plugin/public'; -import { IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; -import type { AnomalySwimLaneEmbeddableApi } from '../embeddables/anomaly_swimlane/types'; -import type { MlCoreSetup } from '../plugin'; -import { isSwimLaneEmbeddableContext } from '../embeddables/anomaly_swimlane/types'; - -export const EDIT_SWIMLANE_PANEL_ACTION = 'editSwimlanePanelAction'; - -export type EditSwimlanePanelActionContext = EmbeddableApiContext & { - embeddable: AnomalySwimLaneEmbeddableApi; -}; - -export function createEditSwimlanePanelAction( - getStartServices: MlCoreSetup['getStartServices'] -): UiActionsActionDefinition { - return { - id: 'edit-anomaly-swimlane', - type: EDIT_SWIMLANE_PANEL_ACTION, - order: 50, - getIconType(): string { - return 'pencil'; - }, - getDisplayName: () => - i18n.translate('xpack.ml.actions.editSwimlaneTitle', { - defaultMessage: 'Edit swim lane', - }), - async execute(context) { - if (!isSwimLaneEmbeddableContext(context)) { - throw new IncompatibleActionError(); - } - - const [coreStart, deps] = await getStartServices(); - - try { - const { resolveAnomalySwimlaneUserInput } = await import( - '../embeddables/anomaly_swimlane/anomaly_swimlane_setup_flyout' - ); - - const { jobIds, viewBy, swimlaneType, panelTitle } = context.embeddable; - - const result = await resolveAnomalySwimlaneUserInput(coreStart, deps.data.dataViews, { - jobIds: jobIds.getValue(), - swimlaneType: swimlaneType.getValue(), - viewBy: viewBy.getValue(), - title: panelTitle?.getValue(), - }); - - context.embeddable.updateUserInput(result); - context.embeddable.setPanelTitle(result.panelTitle); - } catch (e) { - return Promise.reject(); - } - }, - async isCompatible(context: EmbeddableApiContext) { - return ( - isSwimLaneEmbeddableContext(context) && - context.embeddable.parentApi?.viewMode?.getValue() === 'edit' - ); - }, - }; -} diff --git a/x-pack/plugins/ml/public/ui_actions/index.ts b/x-pack/plugins/ml/public/ui_actions/index.ts index 15014205b8c83..41cdc5dcf6c4f 100644 --- a/x-pack/plugins/ml/public/ui_actions/index.ts +++ b/x-pack/plugins/ml/public/ui_actions/index.ts @@ -16,7 +16,6 @@ import { createApplyTimeRangeSelectionAction } from './apply_time_range_action'; import { createClearSelectionAction } from './clear_selection_action'; import { createAddSwimlanePanelAction } from './create_swim_lane'; import { createEditAnomalyChartsPanelAction } from './edit_anomaly_charts_panel_action'; -import { createEditSwimlanePanelAction } from './edit_swimlane_panel_action'; import { createEditSingleMetricViewerPanelAction } from './edit_single_metric_viewer_panel_action'; import { createAddSingleMetricViewerPanelAction } from './create_single_metric_viewer'; import { @@ -29,12 +28,11 @@ import { createVisToADJobAction } from './open_vis_in_ml_action'; import { entityFieldSelectionTrigger, EXPLORER_ENTITY_FIELD_SELECTION_TRIGGER, - swimLaneSelectionTrigger, SWIM_LANE_SELECTION_TRIGGER, + swimLaneSelectionTrigger, } from './triggers'; export { APPLY_INFLUENCER_FILTERS_ACTION } from './apply_influencer_filters_action'; export { APPLY_TIME_RANGE_SELECTION_ACTION } from './apply_time_range_action'; -export { EDIT_SWIMLANE_PANEL_ACTION } from './edit_swimlane_panel_action'; export { OPEN_IN_ANOMALY_EXPLORER_ACTION } from './open_in_anomaly_explorer_action'; export { CREATE_LENS_VIS_TO_ML_AD_JOB_ACTION } from './open_vis_in_ml_action'; export { SWIM_LANE_SELECTION_TRIGGER }; @@ -50,7 +48,6 @@ export function registerMlUiActions( core.getStartServices ); const addSwimlanePanelAction = createAddSwimlanePanelAction(core.getStartServices); - const editSwimlanePanelAction = createEditSwimlanePanelAction(core.getStartServices); const editSingleMetricViewerPanelAction = createEditSingleMetricViewerPanelAction( core.getStartServices ); @@ -74,7 +71,6 @@ export function registerMlUiActions( // Assign triggers uiActions.addTriggerAction('ADD_PANEL_TRIGGER', addSingleMetricViewerPanelAction); uiActions.addTriggerAction('ADD_PANEL_TRIGGER', addSwimlanePanelAction); - uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, editSwimlanePanelAction); uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, editSingleMetricViewerPanelAction); uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, editExplorerPanelAction); uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, openInExplorerAction); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 4814b1be2d6a2..d55f8f3384724 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -25593,7 +25593,6 @@ "xpack.ml.actions.createADJobFromLens": "Créer une tâche de détection des anomalies", "xpack.ml.actions.createADJobFromPatternAnalysis": "Créer une tâche de catégorisation et de détection des anomalies", "xpack.ml.actions.editAnomalyChartsTitle": "Modifier les graphiques d'anomalies", - "xpack.ml.actions.editSwimlaneTitle": "Modifier le couloir", "xpack.ml.actions.openInAnomalyExplorerTitle": "Ouvrir dans Anomaly Explorer", "xpack.ml.actions.runPatternAnalysis.description": "Déclenché lorsque l'utilisateur souhaite effectuer une analyse du modèle sur un champ.", "xpack.ml.actions.runPatternAnalysis.title": "Exécuter l'analyse du modèle", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 31af4836bd0ff..0842ddc97c8c9 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -25566,7 +25566,6 @@ "xpack.ml.actions.createADJobFromLens": "異常検知ジョブの作成", "xpack.ml.actions.createADJobFromPatternAnalysis": "分類異常検知ジョブを作成", "xpack.ml.actions.editAnomalyChartsTitle": "異常グラフを編集", - "xpack.ml.actions.editSwimlaneTitle": "スイムレーンの編集", "xpack.ml.actions.openInAnomalyExplorerTitle": "異常エクスプローラーで開く", "xpack.ml.actions.runPatternAnalysis.description": "ユーザーがフィールドに対してパターン分析を実行する場合にトリガーされます。", "xpack.ml.actions.runPatternAnalysis.title": "パターン分析を実行", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index ba71fe0550888..b8a8545e1d5ce 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -25604,7 +25604,6 @@ "xpack.ml.actions.createADJobFromLens": "创建异常检测作业", "xpack.ml.actions.createADJobFromPatternAnalysis": "创建归类异常检测作业", "xpack.ml.actions.editAnomalyChartsTitle": "编辑异常图表", - "xpack.ml.actions.editSwimlaneTitle": "编辑泳道", "xpack.ml.actions.openInAnomalyExplorerTitle": "在 Anomaly Explorer 中打开", "xpack.ml.actions.runPatternAnalysis.description": "在用户希望对字段运行模式分析时触发。", "xpack.ml.actions.runPatternAnalysis.title": "运行模式分析", From 71784ade41cf0d5665c72579fc2d6e10b97eed03 Mon Sep 17 00:00:00 2001 From: Sergi Massaneda Date: Wed, 8 May 2024 15:09:35 +0200 Subject: [PATCH 24/34] [Security Solution] Unify app mount on plugin start (#182863) ## Summary - Removes unnecessary calls from the UI assistant management mount handler. Namely, `registerActions` and `registerAlertsTableConfiguration`. - Duplicated code in application mount functions extracted to the new `async mountDependencies` function. - Translation extracted. - Code reorganized. --- .../public/common/translations.ts | 7 + .../security_solution/public/plugin.tsx | 150 ++++++++---------- .../public/plugin_services.ts | 6 +- 3 files changed, 76 insertions(+), 87 deletions(-) diff --git a/x-pack/plugins/security_solution/public/common/translations.ts b/x-pack/plugins/security_solution/public/common/translations.ts index ee0172e01b281..126aa4eabe3b0 100644 --- a/x-pack/plugins/security_solution/public/common/translations.ts +++ b/x-pack/plugins/security_solution/public/common/translations.ts @@ -15,6 +15,13 @@ export const SOLUTION_NAME = i18n.translate('xpack.securitySolution.pages.common defaultMessage: 'Security', }); +export const ASSISTANT_MANAGEMENT_TITLE = i18n.translate( + 'xpack.securitySolution.securityAiAssistantManagement.app.title', + { + defaultMessage: 'AI Assistant for Security', + } +); + export const BETA = i18n.translate('xpack.securitySolution.pages.common.beta', { defaultMessage: 'Beta', }); diff --git a/x-pack/plugins/security_solution/public/plugin.tsx b/x-pack/plugins/security_solution/public/plugin.tsx index cfb981c85c84b..8707f9cf190bf 100644 --- a/x-pack/plugins/security_solution/public/plugin.tsx +++ b/x-pack/plugins/security_solution/public/plugin.tsx @@ -16,7 +16,6 @@ import type { CoreStart, PluginInitializerContext, Plugin as IPlugin, - AppMount, } from '@kbn/core/public'; import { DEFAULT_APP_CATEGORIES } from '@kbn/core/public'; import { Storage } from '@kbn/kibana-utils-plugin/public'; @@ -33,7 +32,7 @@ import type { StartedSubPlugins, StartPluginsDependencies, } from './types'; -import { SOLUTION_NAME } from './common/translations'; +import { SOLUTION_NAME, ASSISTANT_MANAGEMENT_TITLE } from './common/translations'; import { APP_ID, APP_UI_ID, APP_PATH, APP_ICON_SOLUTION } from '../common/constants'; @@ -94,93 +93,18 @@ export class Plugin implements IPlugin { - // required to show the alert table inside cases - const { alertsTableConfigurationRegistry } = plugins.triggersActionsUi; - const { registerAlertsTableConfiguration } = - await this.lazyRegisterAlertsTableConfiguration(); - registerAlertsTableConfiguration(alertsTableConfigurationRegistry, this.storage); - - const [coreStart, startPlugins] = await core.getStartServices(); - const subPlugins = await this.startSubPlugins(this.storage, coreStart, startPlugins); - const store = await this.store(coreStart, startPlugins, subPlugins); - const services = await this.services.generateServices(coreStart, startPlugins); - await this.registerActions(store, params.history, core, services); - - const { renderApp } = await this.lazyApplicationDependencies(); - const { ManagementSettings } = await this.lazyAssistantSettingsManagement(); - - return renderApp({ - ...params, - services, - store, - usageCollection: plugins.usageCollection, - children: , - }); - }, - }); - } - } - - const mount: AppMount = async (params) => { + // Lazily instantiate subPlugins and initialize services + const mountDependencies = async (params?: AppMountParameters) => { + const { renderApp } = await this.lazyApplicationDependencies(); const [coreStart, startPlugins] = await core.getStartServices(); - const services = await this.services.generateServices(coreStart, startPlugins, params); const subPlugins = await this.startSubPlugins(this.storage, coreStart, startPlugins); const store = await this.store(coreStart, startPlugins, subPlugins); - const { renderApp } = await this.lazyApplicationDependencies(); - const { getSubPluginRoutesByCapabilities } = await this.lazyHelpersForRoutes(); - - await this.registerActions(store, params.history, core, services); - await this.registerAlertsTableConfiguration(triggersActionsUi); - - const subPluginRoutes = getSubPluginRoutesByCapabilities(subPlugins, services); - - return renderApp({ ...params, services, store, usageCollection, subPluginRoutes }); + const services = await this.services.generateServices(coreStart, startPlugins, params); + return { renderApp, subPlugins, store, services }; }; // Register main Security Solution plugin @@ -192,7 +116,17 @@ export class Plugin implements IPlugin { + const { renderApp, services, store, subPlugins } = await mountDependencies(params); + const { getSubPluginRoutesByCapabilities } = await this.lazyHelpersForRoutes(); + + await this.registerActions(store, params.history, core, services); + await this.registerAlertsTableConfiguration(triggersActionsUi); + + const subPluginRoutes = getSubPluginRoutesByCapabilities(subPlugins, services); + + return renderApp({ ...params, services, store, usageCollection, subPluginRoutes }); + }, }); // Register legacy SIEM app for backward compatibility @@ -215,7 +149,53 @@ export class Plugin implements IPlugin { + const { renderApp, services, store } = await mountDependencies(); + const { ManagementSettings } = await this.lazyAssistantSettingsManagement(); + + return renderApp({ + ...params, + services, + store, + usageCollection, + children: , + }); + }, + }); + + cases?.attachmentFramework.registerExternalReference( getExternalReferenceAttachmentEndpointRegular() ); diff --git a/x-pack/plugins/security_solution/public/plugin_services.ts b/x-pack/plugins/security_solution/public/plugin_services.ts index 1ce2292e2d9bf..38ac65c08c8be 100644 --- a/x-pack/plugins/security_solution/public/plugin_services.ts +++ b/x-pack/plugins/security_solution/public/plugin_services.ts @@ -138,17 +138,19 @@ export class PluginServices { apm, configSettings: this.configSettings, savedObjectsTagging: savedObjectsTaggingOss.getTaggingApi(), - ...(params?.setHeaderActionMenu ? { setHeaderActionMenu: params.setHeaderActionMenu } : {}), storage: this.storage, sessionStorage: this.sessionStorage, security: startPlugins.security, - ...(params?.onAppLeave ? { onAppLeave: params.onAppLeave } : {}), securityLayout: { getPluginWrapper: () => SecuritySolutionTemplateWrapper }, contentManagement: startPlugins.contentManagement, telemetry: this.telemetry.start(), customDataService, timelineDataService, topValuesPopover: new TopValuesPopoverService(), + ...(params && { + onAppLeave: params.onAppLeave, + setHeaderActionMenu: params.setHeaderActionMenu, + }), }; } From 27fdb2def7867ddc1d11b2a9d491e11fa07d1ac4 Mon Sep 17 00:00:00 2001 From: Dario Gieselaar Date: Wed, 8 May 2024 15:10:33 +0200 Subject: [PATCH 25/34] [Obs AI Assistant] Fix auto-generation of titles (#182923) If the LLM doesn't send the title_conversation in a single go, `getGeneratedTitle` fails, because it doesn't wait until the message has been fully completed. This PR fixes that issue, and adds tests, and also improves quote matching. --- .../operators/get_generated_title.test.ts | 215 ++++++++++++++++++ .../client/operators/get_generated_title.ts | 22 +- 2 files changed, 227 insertions(+), 10 deletions(-) create mode 100644 x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.test.ts diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.test.ts new file mode 100644 index 0000000000000..9fec3657a7fcc --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.test.ts @@ -0,0 +1,215 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { filter, lastValueFrom, of, throwError, toArray } from 'rxjs'; +import { + ChatCompletionChunkEvent, + Message, + MessageRole, + StreamingChatResponseEventType, +} from '../../../../common'; +import { ChatEvent } from '../../../../common/conversation_complete'; +import { getGeneratedTitle } from './get_generated_title'; + +describe('getGeneratedTitle', () => { + const messages: Message[] = [ + { + '@timestamp': new Date().toISOString(), + message: { + content: 'A message', + role: MessageRole.User, + }, + }, + ]; + + function createChatCompletionChunk( + content: string | { content?: string; function_call?: { name: string; arguments: string } } + ): ChatCompletionChunkEvent { + const msg = typeof content === 'string' ? { content } : content; + + return { + type: StreamingChatResponseEventType.ChatCompletionChunk, + id: 'id', + message: msg, + }; + } + + function callGenerateTitle( + ...rest: [ChatEvent[]] | [{ responseLanguage?: string }, ChatEvent[]] + ) { + const options = rest.length === 1 ? {} : rest[0]; + const chunks = rest.length === 1 ? rest[0] : rest[1]; + + const chatSpy = jest.fn().mockImplementation(() => of(...chunks)); + + const title$ = getGeneratedTitle({ + chat: chatSpy, + logger: { + debug: jest.fn(), + error: jest.fn(), + }, + messages, + ...options, + }); + + return { chatSpy, title$ }; + } + + it('returns the given title as a string', async () => { + const { title$ } = callGenerateTitle([ + createChatCompletionChunk({ + function_call: { + name: 'title_conversation', + arguments: JSON.stringify({ title: 'My title' }), + }, + }), + ]); + + const title = await lastValueFrom( + title$.pipe(filter((event): event is string => typeof event === 'string')) + ); + + expect(title).toEqual('My title'); + }); + + it('calls chat with the user message', async () => { + const { chatSpy, title$ } = callGenerateTitle([ + createChatCompletionChunk({ + function_call: { + name: 'title_conversation', + arguments: JSON.stringify({ title: 'My title' }), + }, + }), + ]); + + await lastValueFrom(title$); + + const [name, params] = chatSpy.mock.calls[0]; + + expect(name).toEqual('generate_title'); + expect(params.messages.length).toBe(2); + expect(params.messages[1].message.content).toContain('A message'); + }); + + it('strips quotes from the title', async () => { + async function testTitle(title: string) { + const { title$ } = callGenerateTitle([ + createChatCompletionChunk({ + function_call: { + name: 'title_conversation', + arguments: JSON.stringify({ title }), + }, + }), + ]); + + return await lastValueFrom( + title$.pipe(filter((event): event is string => typeof event === 'string')) + ); + } + + expect(await testTitle(`"My title"`)).toEqual('My title'); + expect(await testTitle(`'My title'`)).toEqual('My title'); + expect(await testTitle(`"User's request for a title"`)).toEqual(`User's request for a title`); + }); + + it('mentions the given response language in the instruction', async () => { + const { chatSpy, title$ } = callGenerateTitle( + { + responseLanguage: 'Orcish', + }, + [ + createChatCompletionChunk({ + function_call: { + name: 'title_conversation', + arguments: JSON.stringify({ title: 'My title' }), + }, + }), + ] + ); + + await lastValueFrom(title$); + + const [, params] = chatSpy.mock.calls[0]; + expect(params.messages[0].message.content).toContain('Orcish'); + }); + + it('handles partial updates', async () => { + const { title$ } = callGenerateTitle([ + createChatCompletionChunk({ + function_call: { + name: 'title_conversation', + arguments: '', + }, + }), + createChatCompletionChunk({ + function_call: { + name: '', + arguments: JSON.stringify({ title: 'My title' }), + }, + }), + ]); + + const title = await lastValueFrom(title$); + + expect(title).toEqual('My title'); + }); + + it('ignores token count events and still passes them through', async () => { + const { title$ } = callGenerateTitle([ + createChatCompletionChunk({ + function_call: { + name: 'title_conversation', + arguments: JSON.stringify({ title: 'My title' }), + }, + }), + { + type: StreamingChatResponseEventType.TokenCount, + tokens: { + completion: 10, + prompt: 10, + total: 10, + }, + }, + ]); + + const events = await lastValueFrom(title$.pipe(toArray())); + + expect(events).toEqual([ + 'My title', + { + tokens: { + completion: 10, + prompt: 10, + total: 10, + }, + type: StreamingChatResponseEventType.TokenCount, + }, + ]); + }); + + it('handles errors in chat and falls back to the default title', async () => { + const chatSpy = jest + .fn() + .mockImplementation(() => throwError(() => new Error('Error generating title'))); + + const logger = { + debug: jest.fn(), + error: jest.fn(), + }; + + const title$ = getGeneratedTitle({ + chat: chatSpy, + logger, + messages, + }); + + const title = await lastValueFrom(title$); + + expect(title).toEqual('New conversation'); + + expect(logger.error).toHaveBeenCalledWith('Error generating title'); + }); +}); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.ts b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.ts index f35e0716f1051..af8f0d15466f1 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.ts +++ b/x-pack/plugins/observability_solution/observability_ai_assistant/server/service/client/operators/get_generated_title.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { catchError, map, Observable, of, tap } from 'rxjs'; +import { catchError, last, map, Observable, of, tap } from 'rxjs'; import { Logger } from '@kbn/logging'; import type { ObservabilityAIAssistantClient } from '..'; import { Message, MessageRole } from '../../../../common'; @@ -30,7 +30,7 @@ export function getGeneratedTitle({ responseLanguage?: string; messages: Message[]; chat: ChatFunctionWithoutConnectorAndTokenCount; - logger: Logger; + logger: Pick; }): Observable { return hideTokenCountEvents((hide) => chat('generate_title', { @@ -46,9 +46,11 @@ export function getGeneratedTitle({ '@timestamp': new Date().toISOString(), message: { role: MessageRole.User, - content: messages.slice(1).reduce((acc, curr) => { - return `${acc} ${curr.message.role}: ${curr.message.content}`; - }, 'Generate a title, using the title_conversation_function, based on the following conversation:\n\n'), + content: messages + .filter((msg) => msg.message.role !== MessageRole.System) + .reduce((acc, curr) => { + return `${acc} ${curr.message.role}: ${curr.message.content}`; + }, 'Generate a title, using the title_conversation_function, based on the following conversation:\n\n'), }, }, ], @@ -72,21 +74,21 @@ export function getGeneratedTitle({ }).pipe( hide(), concatenateChatCompletionChunks(), + last(), map((concatenatedMessage) => { - const input = + const title: string = (concatenatedMessage.message.function_call.name ? JSON.parse(concatenatedMessage.message.function_call.arguments).title : concatenatedMessage.message?.content) || ''; - // This regular expression captures a string enclosed in single or double quotes. + // This captures a string enclosed in single or double quotes. // It extracts the string content without the quotes. // Example matches: // - "Hello, World!" => Captures: Hello, World! // - 'Another Example' => Captures: Another Example // - JustTextWithoutQuotes => Captures: JustTextWithoutQuotes - const match = input.match(/^["']?([^"']+)["']?$/); - const title = match ? match[1] : input; - return title; + + return title.replace(/^"(.*)"$/g, '$1').replace(/^'(.*)'$/g, '$1'); }), tap((event) => { if (typeof event === 'string') { From 9ddc3c6aa836e9e5d3bdd30512f7de55d62a16d2 Mon Sep 17 00:00:00 2001 From: Drew Tate Date: Wed, 8 May 2024 07:53:47 -0600 Subject: [PATCH 26/34] [ES|QL] accept string constants for date args (#182856) ## Summary ## String constants in place of dates As of https://github.com/elastic/elasticsearch/pull/106932 string constants can always be used in place of dates. - `| eval date_extract("DAY_OF_WEEK", "2024-05-07T13:20:40.554Z")` - `| STATS AVG(salary) BY bucket = BUCKET(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z") | SORT bucket` - `| eval date_diff("day", "2021-01-01", "2022-01-01")` ### 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: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../src/definitions/functions.ts | 42 ----------- .../src/shared/helpers.ts | 12 ++-- .../esql_validation_meta_tests.json | 70 ++++++++----------- .../src/validation/validation.test.ts | 18 +++-- 4 files changed, 52 insertions(+), 90 deletions(-) diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts index bfa718353f6b2..205b2d158fd05 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts @@ -606,48 +606,6 @@ export const evalFunctionsDefinitions: FunctionDefinition[] = [ returnType: 'number', examples: [], }, - { - params: [ - { - name: 'unit', - type: 'string', - literalOptions: dateDiffOptions, - literalSuggestions: dateDiffSuggestions, - }, - { name: 'startTimestamp', type: 'string', constantOnly: true }, - { name: 'endTimestamp', type: 'date' }, - ], - returnType: 'number', - examples: [], - }, - { - params: [ - { - name: 'unit', - type: 'string', - literalOptions: dateDiffOptions, - literalSuggestions: dateDiffSuggestions, - }, - { name: 'startTimestamp', type: 'date' }, - { name: 'endTimestamp', type: 'string', constantOnly: true }, - ], - returnType: 'number', - examples: [], - }, - { - params: [ - { - name: 'unit', - type: 'string', - literalOptions: dateDiffOptions, - literalSuggestions: dateDiffSuggestions, - }, - { name: 'startTimestamp', type: 'string', constantOnly: true }, - { name: 'endTimestamp', type: 'string', constantOnly: true }, - ], - returnType: 'number', - examples: [], - }, ], }, { diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts index 868e8f3f9212a..fb1d3d648142b 100644 --- a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts @@ -214,14 +214,18 @@ export function getCommandOption(optionName: CommandOptionsDefinition['name']) { ); } -function compareLiteralType(argTypes: string, item: ESQLLiteral) { +function compareLiteralType(argType: string, item: ESQLLiteral) { if (item.literalType !== 'string') { - return argTypes === item.literalType; + if (argType === item.literalType) { + return true; + } + return false; } - if (argTypes === 'chrono_literal') { + if (argType === 'chrono_literal') { return chronoLiterals.some(({ name }) => name === item.text); } - return argTypes === item.literalType; + // date-type parameters accept string literals because of ES auto-casting + return ['string', 'date'].includes(argType); } export function getColumnHit( diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json index c9b89c0163111..660fff0bb7d8f 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json +++ b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json @@ -952,19 +952,6 @@ "error": [], "warning": [] }, - { - "query": "row var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = date_extract(\"a\", \"a\")", - "error": [ - "Argument of [date_extract] must be [chrono_literal], found value [\"a\"] type [string]", - "Argument of [date_extract] must be [date], found value [\"a\"] type [string]" - ], - "warning": [] - }, { "query": "row var = date_format(now(), \"a\")", "error": [], @@ -975,19 +962,6 @@ "error": [], "warning": [] }, - { - "query": "row var = date_format(to_datetime(\"a\"), to_string(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = date_format(\"a\", 5)", - "error": [ - "Argument of [date_format] must be [date], found value [\"a\"] type [string]", - "Argument of [date_format] must be [string], found value [5] type [number]" - ], - "warning": [] - }, { "query": "row var = date_parse(\"a\", \"a\")", "error": [], @@ -1021,19 +995,6 @@ "error": [], "warning": [] }, - { - "query": "row var = date_trunc(1 year, to_datetime(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = date_trunc(\"a\", \"a\")", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [\"a\"] type [string]", - "Argument of [date_trunc] must be [date], found value [\"a\"] type [string]" - ], - "warning": [] - }, { "query": "row var = e()", "error": [], @@ -9121,6 +9082,37 @@ ], "warning": [] }, + { + "query": "from a_index | eval var = date_diff(\"year\", dateField, dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval date_diff(\"year\", dateField, dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = date_diff(\"year\", to_datetime(stringField), to_datetime(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval date_diff(numberField, stringField, stringField)", + "error": [ + "Argument of [date_diff] must be [string], found value [numberField] type [number]", + "Argument of [date_diff] must be [date], found value [stringField] type [string]", + "Argument of [date_diff] must be [date], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval date_diff(\"year\", dateField, dateField, extraArg)", + "error": [ + "Error: [date_diff] function expects exactly 3 arguments, got 4." + ], + "warning": [] + }, { "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts index 578d3e9d79b6a..1d7d080b6c5c0 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -622,7 +622,17 @@ describe('validation logic', () => { // the right error message if ( params.every(({ type }) => type !== 'any') && - !['to_version', 'mv_sort', 'date_diff'].includes(name) + ![ + 'to_version', + 'mv_sort', + // skip the date functions because the row tests always throw in + // a string literal and expect it to be invalid for the date functions + // but it's always valid because ES will parse it as a date + 'date_diff', + 'date_extract', + 'date_format', + 'date_trunc', + ].includes(name) ) { // now test nested functions const fieldMappingWithNestedFunctions = getFieldMapping(params, { @@ -1289,7 +1299,6 @@ describe('validation logic', () => { ); }); for (const { name, signatures, ...rest } of numericOrStringFunctions) { - if (name === 'date_diff') continue; // date_diff is hard to test const supportedSignatures = signatures.filter(({ returnType }) => // TODO — not sure why the tests have this limitation... seems like any type // that can be part of a boolean expression should be allowed in a where clause @@ -1489,7 +1498,6 @@ describe('validation logic', () => { } for (const { name, alias, signatures, ...defRest } of evalFunctionsDefinitions) { - if (name === 'date_diff') continue; // date_diff is hard to test for (const { params, ...signRest } of signatures) { const fieldMapping = getFieldMapping(params); testErrorsAndWarnings( @@ -1561,7 +1569,7 @@ describe('validation logic', () => { // the right error message if ( params.every(({ type }) => type !== 'any') && - !['to_version', 'mv_sort', 'date_diff'].includes(name) + !['to_version', 'mv_sort'].includes(name) ) { // now test nested functions const fieldMappingWithNestedFunctions = getFieldMapping(params, { @@ -2251,7 +2259,7 @@ describe('validation logic', () => { // the right error message if ( params.every(({ type }) => type !== 'any') && - !['to_version', 'mv_sort', 'date_diff'].includes(name) + !['to_version', 'mv_sort'].includes(name) ) { // now test nested functions const fieldMappingWithNestedAggsFunctions = getFieldMapping(params, { From 187ed098750c68ee889f1c7c2156f41c163f262f Mon Sep 17 00:00:00 2001 From: Elastic Machine Date: Wed, 8 May 2024 15:01:26 +0100 Subject: [PATCH 27/34] [main] Sync bundled packages with Package Storage (#182938) Automated by https://buildkite.com/elastic/package-storage-infra-kibana-discover-release-branches/builds/677 --- fleet_packages.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fleet_packages.json b/fleet_packages.json index 9f0b28f9da0a6..06a0f983657e5 100644 --- a/fleet_packages.json +++ b/fleet_packages.json @@ -42,12 +42,12 @@ }, { "name": "profiler_symbolizer", - "version": "8.12.0", + "version": "8.14.0", "forceAlignStackVersion": true }, { "name": "profiler_collector", - "version": "8.12.0", + "version": "8.14.0", "forceAlignStackVersion": true }, { From d38cf12fcad7455076afb8f2246e9751f932aca6 Mon Sep 17 00:00:00 2001 From: Larry Gregory Date: Wed, 8 May 2024 10:10:04 -0400 Subject: [PATCH 28/34] Bump @redocly/cli to version 1.12.0 (#182744) ## Summary Bump @redocly/cli to version `1.12.0`. [Changelog](https://redocly.com/docs/cli/changelog/) --- package.json | 2 +- renovate.json | 18 ++++++++++++++++++ yarn.lock | 35 +++++++++++++++++++++-------------- 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 6e385a82a6a8b..29487ced40a10 100644 --- a/package.json +++ b/package.json @@ -1373,7 +1373,7 @@ "@mapbox/vector-tile": "1.3.1", "@octokit/rest": "^16.35.0", "@parcel/watcher": "^2.1.0", - "@redocly/cli": "^1.6.0", + "@redocly/cli": "^1.12.0", "@statoscope/webpack-plugin": "^5.28.2", "@storybook/addon-a11y": "^6.5.16", "@storybook/addon-actions": "^6.5.16", diff --git a/renovate.json b/renovate.json index d07ce08ffa07d..9393a7b005225 100644 --- a/renovate.json +++ b/renovate.json @@ -157,6 +157,24 @@ ], "enabled": true }, + { + "groupName": "OpenAPI Spec", + "matchPackageNames": [ + "@redocly/cli" + ], + "reviewers": [ + "team:kibana-core" + ], + "matchBaseBranches": [ + "main" + ], + "labels": [ + "release_note:skip", + "Team:Core", + "backport:all-open" + ], + "enabled": true + }, { "groupName": "babel", "matchPackageNames": [ diff --git a/yarn.lock b/yarn.lock index ba830c1cdb1b6..7ff3debb76c7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7752,15 +7752,17 @@ require-from-string "^2.0.2" uri-js "^4.2.2" -"@redocly/cli@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@redocly/cli/-/cli-1.6.0.tgz#d3f6c8d6822eead487c2cb814d131e17d05c961f" - integrity sha512-0naVFJGR2tVcpMIHSFRr2HAoyy70qMqDAP6kXcnOdkGkwLRJ8s/5n1STwsym/yZwNkhrt2M0cKT6KAMlTUeCeg== +"@redocly/cli@^1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@redocly/cli/-/cli-1.12.0.tgz#c2191e2d34161cdaf1fcb42d896fd4c5e3313ac8" + integrity sha512-k45WELRAvE0UbYPhEhUPq/T4WOCDx4zoCT3tLokCdnCyeUHgaDzNAzPM2qe5Y8m8k5FUYlNoPdND4PlvUhg9Wg== dependencies: - "@redocly/openapi-core" "1.6.0" + "@redocly/openapi-core" "1.12.0" + abort-controller "^3.0.0" chokidar "^3.5.1" colorette "^1.2.0" core-js "^3.32.1" + form-data "^4.0.0" get-port-please "^3.0.1" glob "^7.1.6" handlebars "^4.7.6" @@ -7774,13 +7776,18 @@ styled-components "^6.0.7" yargs "17.0.1" -"@redocly/openapi-core@1.6.0", "@redocly/openapi-core@^1.0.0-rc.2": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.6.0.tgz#09aee5e21a9cbad08f3230ced16685d043a9b197" - integrity sha512-oao6Aey4peLKfagzWGb6N7OBI6CoDWEP4ka/XjrUNZw+UoKVVg3hVBXW4Vr3CJ2O8j6wEa2i+Lbb92VQQsoxwg== +"@redocly/config@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@redocly/config/-/config-0.2.0.tgz#c61fd0a8ccac330de398e26e8cac1a3fedbf9165" + integrity sha512-r0TqTPVXrxdvhpbOntWnJofOx0rC7u+A+tfC0KFwMtw38QCNb3pwodVjeLa7MT5Uu+fcPxfO119yLBj0QHvBuQ== + +"@redocly/openapi-core@1.12.0", "@redocly/openapi-core@^1.0.0-rc.2": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.12.0.tgz#82047a92a138362c7f411046d855fdcde3a946b8" + integrity sha512-2Jfxv3iIk1JUwLSnLyewJ8GAsoxubROVieg13Sjo79TjuWaUBuI49j8GZqC08ljENqyEIp0JHReDjhKs4Snrhg== dependencies: "@redocly/ajv" "^8.11.0" - "@types/node" "^14.11.8" + "@redocly/config" "^0.2.0" colorette "^1.2.0" js-levenshtein "^1.1.6" js-yaml "^4.1.0" @@ -10268,7 +10275,7 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@20.10.5", "@types/node@>= 8", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@>=18.0.0", "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.11.8", "@types/node@^14.14.20 || ^16.0.0", "@types/node@^18.0.0", "@types/node@^18.11.18": +"@types/node@*", "@types/node@20.10.5", "@types/node@>= 8", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@>=18.0.0", "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0", "@types/node@^18.0.0", "@types/node@^18.11.18": version "20.10.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.5.tgz#47ad460b514096b7ed63a1dae26fad0914ed3ab2" integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw== @@ -15738,9 +15745,9 @@ domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: domelementtype "^2.3.0" dompurify@^2.2.8: - version "2.4.7" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.7.tgz#277adeb40a2c84be2d42a8bcd45f582bfa4d0cfc" - integrity sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ== + version "2.5.2" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.5.2.tgz#e02be61d621bea36a76eb2beb23b043f347aa9c7" + integrity sha512-5vSyvxRAb45EoWwAktUT3AYqAwXK4FL7si22Cgj46U6ICsj/YJczCN+Bk7WNABIQmpWRymGfslMhrRUZkQNnqA== domutils@^2.0.0, domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" From da78b1b4ef292854a23b98e29fddd771188f9e24 Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Wed, 8 May 2024 10:22:52 -0400 Subject: [PATCH 29/34] skip failing test suite (#182932) --- .../cypress/e2e/explore/navigation/search_bar.cy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/explore/navigation/search_bar.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/explore/navigation/search_bar.cy.ts index 14afab3600f54..c11878fcc4916 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/explore/navigation/search_bar.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/explore/navigation/search_bar.cy.ts @@ -23,7 +23,8 @@ import { getHostIpFilter } from '../../../objects/filter'; import { hostsUrl } from '../../../urls/navigation'; import { waitForAllHostsToBeLoaded } from '../../../tasks/hosts/all_hosts'; -describe('SearchBar', { tags: ['@ess', '@serverless'] }, () => { +// Failing: See https://github.com/elastic/kibana/issues/182932 +describe.skip('SearchBar', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { login(); visitWithTimeRange(hostsUrl('allHosts')); From 099c909abc7a24ecefee93651fd3e245d13b279a Mon Sep 17 00:00:00 2001 From: Mykola Harmash Date: Wed, 8 May 2024 16:50:37 +0200 Subject: [PATCH 30/34] [Onboarding] Scroll to the top on the page when navigating to a quick start view (#182844) Closes https://github.com/elastic/kibana/issues/182157 - Adds a hook to watch for location path updates reset the page's scroll position --- .../public/application/experimental_onboarding_flow.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/observability_solution/observability_onboarding/public/application/experimental_onboarding_flow.tsx b/x-pack/plugins/observability_solution/observability_onboarding/public/application/experimental_onboarding_flow.tsx index 265e1cf810476..f3eac58303425 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/public/application/experimental_onboarding_flow.tsx +++ b/x-pack/plugins/observability_solution/observability_onboarding/public/application/experimental_onboarding_flow.tsx @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import React from 'react'; +import React, { useEffect } from 'react'; import { Route, Routes } from '@kbn/shared-ux-router'; import { useNavigate, useLocation } from 'react-router-dom-v5-compat'; import { EuiButtonEmpty, EuiPageTemplate, EuiSpacer } from '@elastic/eui'; @@ -22,6 +22,12 @@ import { CustomLogsPanel } from './quickstart_flows/custom_logs'; const queryClient = new QueryClient(); export function ExperimentalOnboardingFlow() { + const { pathname } = useLocation(); + + useEffect(() => { + window.scrollTo(0, 0); + }, [pathname]); + return ( Date: Wed, 8 May 2024 17:00:52 +0200 Subject: [PATCH 31/34] [ML] Enable transform health rule API tests (#182560) ## Summary Closes https://github.com/elastic/kibana/issues/177215 ### Checklist - [x] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed --- .../group2/transform_rule_types/transform_health/rule.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group2/transform_rule_types/transform_health/rule.ts b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group2/transform_rule_types/transform_health/rule.ts index 318b8f99a61e0..d5a03d3d66cec 100644 --- a/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group2/transform_rule_types/transform_health/rule.ts +++ b/x-pack/test/alerting_api_integration/spaces_only/tests/alerting/group2/transform_rule_types/transform_health/rule.ts @@ -23,6 +23,7 @@ import { TRANSFORM_HEALTH_RESULTS } from '@kbn/transform-plugin/common/constants import { FtrProviderContext } from '../../../../../../common/ftr_provider_context'; import { getUrlPrefix, ObjectRemover } from '../../../../../../common/lib'; import { Spaces } from '../../../../../scenarios'; +import { runSoon } from '../../../group3/test_helpers'; const CONNECTOR_TYPE_ID = '.index'; const RULE_TYPE_ID = 'transform_health'; @@ -30,7 +31,7 @@ const ES_TEST_INDEX_SOURCE = 'transform-alert:transform-health'; const ES_TEST_INDEX_REFERENCE = '-na-'; const ES_TEST_OUTPUT_INDEX_NAME = `${ES_TEST_INDEX_NAME}-ts-output`; -const RULE_INTERVAL_SECONDS = 3; +const RULE_INTERVAL_SECONDS = 10000; interface CreateRuleParams { name: string; @@ -80,8 +81,7 @@ export default function ruleTests({ getService }: FtrProviderContext) { `.internal.alerts-transform.health.alerts-default-000001` ); - // Failing: See https://github.com/elastic/kibana/issues/177215 - describe.skip('rule', async () => { + describe('rule', async () => { const objectRemover = new ObjectRemover(supertest); let connectorId: string; const transformId = 'test_transform_01'; @@ -121,6 +121,8 @@ export default function ruleTests({ getService }: FtrProviderContext) { await stopTransform(transformId); + await runSoon({ id: ruleId, supertest, retry }); + log.debug('Checking created alerts...'); const docs = await waitForDocs(1); From 8805c4ea4ee5cdb9ddbb5a563cb2b1b86258a1c7 Mon Sep 17 00:00:00 2001 From: Yara Tercero Date: Wed, 8 May 2024 08:16:08 -0700 Subject: [PATCH 32/34] [Detection Engine][FTR] Get exceptions tests in MKI green (#182890) This PR: - Ensures we have the correct tags for the FTR tests within `detection_engine/exceptions` - Adds ticket references or comments where we need to skip a test in MKI --- .../exception_comments_serverless.ts | 3 ++- .../workflows/basic_license_essentials_tier/prebuilt_rules.ts | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/exceptions/workflows/basic_license_essentials_tier/exception_comments_serverless.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/exceptions/workflows/basic_license_essentials_tier/exception_comments_serverless.ts index 9fd4433e01f38..cda1ed3ca1517 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/exceptions/workflows/basic_license_essentials_tier/exception_comments_serverless.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/exceptions/workflows/basic_license_essentials_tier/exception_comments_serverless.ts @@ -26,7 +26,8 @@ export default ({ getService }: FtrProviderContext) => { const log = getService('log'); const supertestWithoutAuth = getService('supertestWithoutAuth'); - describe('@serverless exception item comments - serverless specific behavior', () => { + // Skipping in MKI due to roles testing not yet being available + describe('@serverless @skipInServerlessMKI exception item comments - serverless specific behavior', () => { // FLAKY: https://github.com/elastic/kibana/issues/181507 describe.skip('Rule Exceptions', () => { afterEach(async () => { diff --git a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/exceptions/workflows/basic_license_essentials_tier/prebuilt_rules.ts b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/exceptions/workflows/basic_license_essentials_tier/prebuilt_rules.ts index 7ce1ec3bd5a3f..5ed8d5d66c5dc 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/exceptions/workflows/basic_license_essentials_tier/prebuilt_rules.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/detections_response/detection_engine/exceptions/workflows/basic_license_essentials_tier/prebuilt_rules.ts @@ -37,7 +37,9 @@ export default ({ getService }: FtrProviderContext) => { const log = getService('log'); const es = getService('es'); - describe('@serverless @ess exceptions workflows for prebuilt rules', () => { + // See https://github.com/elastic/kibana/issues/182889 for details + // on skipping in MKI + describe('@serverless @ess @skipInServerlessMKI exceptions workflows for prebuilt rules', () => { describe('creating rules with exceptions', () => { beforeEach(async () => { await createAlertsIndex(supertest, log); From e7dc1fcd035bd3ed67fd61c46809b0afa088629b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efe=20G=C3=BCrkan=20YALAMAN?= Date: Wed, 8 May 2024 17:17:15 +0200 Subject: [PATCH 33/34] [Search] Updated Notion native config to correct one (#182920) ## Summary Updated Notion native config to correct one as it was copied wrong previously. Thanks @praveen-elastic ### Checklist Delete any items that are not applicable to this PR. - [x] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md) - [ ] [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 renders correctly on smaller devices using a responsive layout. (You can test this [in your browser](https://www.browserstack.com/guide/responsive-testing-on-local-server)) - [x] This was checked for [cross-browser compatibility](https://www.elastic.co/support/matrix#matrix_browsers) --- .../types/native_connectors.ts | 67 ++++++++++--------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/packages/kbn-search-connectors/types/native_connectors.ts b/packages/kbn-search-connectors/types/native_connectors.ts index a044dd717ef4f..5f57f64f0a06f 100644 --- a/packages/kbn-search-connectors/types/native_connectors.ts +++ b/packages/kbn-search-connectors/types/native_connectors.ts @@ -2808,84 +2808,89 @@ export const NATIVE_CONNECTOR_DEFINITIONS: Record Date: Wed, 8 May 2024 17:49:20 +0200 Subject: [PATCH 34/34] github-issue: remove PR owner from the GitHub issue content (#182954) This will reduce the spam when the deployment happens --- .buildkite/scripts/steps/serverless/build_and_deploy.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/scripts/steps/serverless/build_and_deploy.sh b/.buildkite/scripts/steps/serverless/build_and_deploy.sh index 8fb982c11d9bf..88ce6d9ea3bb4 100644 --- a/.buildkite/scripts/steps/serverless/build_and_deploy.sh +++ b/.buildkite/scripts/steps/serverless/build_and_deploy.sh @@ -154,7 +154,7 @@ $BUILDKITE_PULL_REQUEST ### Further details -Caused by @$GITHUB_PR_TRIGGER_USER using the github label in https://github.com/elastic/kibana/pull/$BUILDKITE_PULL_REQUEST +Caused by the GitHub label 'ci:project-deploy-observability' in https://github.com/elastic/kibana/pull/$BUILDKITE_PULL_REQUEST EOF GH_TOKEN="$GITHUB_TOKEN" \